Skip to content

Commit f4f0655

Browse files
committed
Preserve device Ids of data volumes in the new instance.
1 parent 8717e3a commit f4f0655

File tree

16 files changed

+85
-40
lines changed

16 files changed

+85
-40
lines changed

api/src/main/java/com/cloud/offering/DiskOfferingInfo.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class DiskOfferingInfo {
2323
private Long _size;
2424
private Long _minIops;
2525
private Long _maxIops;
26+
private Long _deviceId;
2627

2728
public DiskOfferingInfo() {
2829
}
@@ -38,6 +39,11 @@ public DiskOfferingInfo(DiskOffering diskOffering, Long size, Long minIops, Long
3839
_maxIops = maxIops;
3940
}
4041

42+
public DiskOfferingInfo(DiskOffering diskOffering, Long size, Long minIops, Long maxIops, Long deviceId) {
43+
this(diskOffering, size, minIops, maxIops);
44+
_deviceId = deviceId;
45+
}
46+
4147
public void setDiskOffering(DiskOffering diskOffering) {
4248
_diskOffering = diskOffering;
4349
}
@@ -69,4 +75,12 @@ public void setMaxIops(Long maxIops) {
6975
public Long getMaxIops() {
7076
return _maxIops;
7177
}
78+
79+
public void setDeviceId(Long deviceId) {
80+
_deviceId = deviceId;
81+
}
82+
83+
public Long getDeviceId() {
84+
return _deviceId;
85+
}
7286
}

api/src/main/java/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ public class ApiConstants {
146146
public static final String DESTINATION_ZONE_ID = "destzoneid";
147147
public static final String DETAILS = "details";
148148
public static final String DEVICE_ID = "deviceid";
149+
public static final String DEVICE_IDS = "deviceids";
149150
public static final String DIRECT_DOWNLOAD = "directdownload";
150151
public static final String DISK = "disk";
151152
public static final String DISK_OFFERING_ID = "diskofferingid";

api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@ public List<DiskOfferingInfo> getDataDiskOfferingsInfo() {
547547
Long size = null;
548548
Long minIops = null;
549549
Long maxIops = null;
550+
Long deviceId = Long.parseLong(dataDisk.get(ApiConstants.DEVICE_ID));
550551
if (diskOffering.isCustomized()) {
551552
if (dataDisk.get(ApiConstants.SIZE) == null) {
552553
throw new InvalidParameterValueException("Size is required for custom disk offering");
@@ -565,7 +566,7 @@ public List<DiskOfferingInfo> getDataDiskOfferingsInfo() {
565566
minIops = Long.parseLong(dataDisk.get(ApiConstants.MIN_IOPS));
566567
maxIops = Long.parseLong(dataDisk.get(ApiConstants.MAX_IOPS));
567568
}
568-
DiskOfferingInfo diskOfferingInfo = new DiskOfferingInfo(diskOffering, size, minIops, maxIops);
569+
DiskOfferingInfo diskOfferingInfo = new DiskOfferingInfo(diskOffering, size, minIops, maxIops, deviceId);
569570
diskOfferingInfoList.add(diskOfferingInfo);
570571
}
571572
this.dataDiskOfferingsInfo = diskOfferingInfoList;

api/src/main/java/org/apache/cloudstack/backup/BackupManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ public interface BackupManager extends BackupService, Configurable, PluggableSer
161161

162162
List<DiskOfferingInfo> getDataDiskOfferingListFromBackup(Backup backup);
163163

164-
Map<String, String> getBackupVmDetails(VirtualMachine vm);
164+
Map<String, String> getVmDetailsForBackup(VirtualMachine vm);
165165

166-
Map<String, String> getBackupDiskOfferingDetails(Long vmId);
166+
Map<String, String> getDiskOfferingDetailsForBackup(Long vmId);
167167
}

engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -520,22 +520,25 @@ public void allocate(final String vmInstanceName, final VirtualMachineTemplate t
520520
// Create new Volume context and inject event resource type, id and details to generate VOLUME.CREATE event for the ROOT disk.
521521
CallContext volumeContext = CallContext.register(CallContext.current(), ApiCommandResourceType.Volume);
522522
try {
523-
int diskNumber = 1;
523+
Long nextDiskNumber = 1L;
524524
if (dataDiskOfferings != null) {
525525
for (final DiskOfferingInfo dataDiskOfferingInfo : dataDiskOfferings) {
526-
volumeMgr.allocateRawVolume(Type.DATADISK, "DATA-" + persistedVm.getId() + "-" + String.valueOf(diskNumber), dataDiskOfferingInfo.getDiskOffering(), dataDiskOfferingInfo.getSize(),
527-
dataDiskOfferingInfo.getMinIops(), dataDiskOfferingInfo.getMaxIops(), persistedVm, template, owner, Long.valueOf(diskNumber));
528-
diskNumber++;
526+
Long deviceId = dataDiskOfferingInfo.getDeviceId();
527+
volumeMgr.allocateRawVolume(Type.DATADISK, "DATA-" + persistedVm.getId() + "-" + String.valueOf(deviceId), dataDiskOfferingInfo.getDiskOffering(), dataDiskOfferingInfo.getSize(),
528+
dataDiskOfferingInfo.getMinIops(), dataDiskOfferingInfo.getMaxIops(), persistedVm, template, owner, deviceId);
529+
if (nextDiskNumber <= deviceId) {
530+
nextDiskNumber = deviceId + 1;
531+
}
529532
}
530533
}
531534
if (datadiskTemplateToDiskOfferingMap != null && !datadiskTemplateToDiskOfferingMap.isEmpty()) {
532535
for (Entry<Long, DiskOffering> dataDiskTemplateToDiskOfferingMap : datadiskTemplateToDiskOfferingMap.entrySet()) {
533536
DiskOffering diskOffering = dataDiskTemplateToDiskOfferingMap.getValue();
534537
long diskOfferingSize = diskOffering.getDiskSize() / (1024 * 1024 * 1024);
535538
VMTemplateVO dataDiskTemplate = _templateDao.findById(dataDiskTemplateToDiskOfferingMap.getKey());
536-
volumeMgr.allocateRawVolume(Type.DATADISK, "DATA-" + persistedVm.getId() + "-" + String.valueOf(diskNumber), diskOffering, diskOfferingSize, null, null,
537-
persistedVm, dataDiskTemplate, owner, Long.valueOf(diskNumber));
538-
diskNumber++;
539+
volumeMgr.allocateRawVolume(Type.DATADISK, "DATA-" + persistedVm.getId() + "-" + String.valueOf(nextDiskNumber), diskOffering, diskOfferingSize, null, null,
540+
persistedVm, dataDiskTemplate, owner, nextDiskNumber);
541+
nextDiskNumber++;
539542
}
540543
}
541544
} finally {

engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/CloudOrchestrator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ public VirtualMachineEntity createVirtualMachine(String id, String owner, String
226226
DiskOfferingInfo dataDiskOfferingInfo = new DiskOfferingInfo();
227227

228228
dataDiskOfferingInfo.setDiskOffering(diskOffering);
229+
dataDiskOfferingInfo.setDeviceId(1L);
229230
dataDiskOfferingInfo.setSize(size);
230231

231232
if (diskOffering.isCustomizedIops() != null && diskOffering.isCustomizedIops()) {

engine/schema/src/main/java/org/apache/cloudstack/backup/dao/BackupDaoImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ public BackupResponse newBackupResponse(Backup backup) {
239239
vmDetails.put(ApiConstants.SERVICE_OFFERING_ID, details.get(ApiConstants.SERVICE_OFFERING_ID));
240240
vmDetails.put(ApiConstants.NETWORK_IDS, details.get(ApiConstants.NETWORK_IDS));
241241
vmDetails.put(ApiConstants.DISK_OFFERING_IDS, details.get(ApiConstants.DISK_OFFERING_IDS));
242+
vmDetails.put(ApiConstants.DEVICE_IDS, details.get(ApiConstants.DEVICE_IDS));
242243
vmDetails.put(ApiConstants.DISK_SIZES, details.get(ApiConstants.DISK_SIZES));
243244
vmDetails.put(ApiConstants.MIN_IOPS, details.get(ApiConstants.MIN_IOPS));
244245
vmDetails.put(ApiConstants.MAX_IOPS, details.get(ApiConstants.MAX_IOPS));

plugins/backup/dummy/src/main/java/org/apache/cloudstack/backup/DummyBackupProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,9 @@ public boolean takeBackup(VirtualMachine vm) {
130130
backup.setDomainId(vm.getDomainId());
131131
backup.setZoneId(vm.getDataCenterId());
132132
backup.setBackedUpVolumes(BackupManagerImpl.createVolumeInfoFromVolumes(volumeDao.findByInstance(vm.getId())));
133-
Map<String, String> details = backupManager.getBackupVmDetails(vm);
133+
Map<String, String> details = backupManager.getVmDetailsForBackup(vm);
134134
backup.setDetails(details);
135-
Map<String, String> diskOfferingDetails = backupManager.getBackupDiskOfferingDetails(vm.getId());
135+
Map<String, String> diskOfferingDetails = backupManager.getDiskOfferingDetailsForBackup(vm.getId());
136136
backup.addDetails(diskOfferingDetails);
137137

138138
return backupDao.persist(backup) != null;

plugins/backup/nas/src/main/java/org/apache/cloudstack/backup/NASBackupProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ public boolean takeBackup(final VirtualMachine vm) {
183183
backupVO.setSize(answer.getSize());
184184
backupVO.setStatus(Backup.Status.BackedUp);
185185
backupVO.setBackedUpVolumes(BackupManagerImpl.createVolumeInfoFromVolumes(volumeDao.findByInstance(vm.getId())));
186-
Map<String, String> details = backupManager.getBackupDiskOfferingDetails(vm.getId());
186+
Map<String, String> details = backupManager.getDiskOfferingDetailsForBackup(vm.getId());
187187
backupVO.addDetails(details);
188188
return backupDao.update(backupVO.getId(), backupVO);
189189
} else {
@@ -211,7 +211,7 @@ private BackupVO createBackupObject(VirtualMachine vm, String backupPath) {
211211
backup.setAccountId(vm.getAccountId());
212212
backup.setDomainId(vm.getDomainId());
213213
backup.setZoneId(vm.getDataCenterId());
214-
Map<String, String> details = backupManager.getBackupVmDetails(vm);
214+
Map<String, String> details = backupManager.getVmDetailsForBackup(vm);
215215
backup.setDetails(details);
216216

217217
return backupDao.persist(backup);

plugins/backup/networker/src/main/java/org/apache/cloudstack/backup/NetworkerBackupProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -524,9 +524,9 @@ public boolean takeBackup(VirtualMachine vm) {
524524
BackupVO backup = getClient(vm.getDataCenterId()).registerBackupForVm(vm, backupJobStart, saveTime);
525525
if (backup != null) {
526526
backup.setBackedUpVolumes(BackupManagerImpl.createVolumeInfoFromVolumes(volumeDao.findByInstance(vm.getId())));
527-
Map<String, String> details = backupManager.getBackupVmDetails(vm);
527+
Map<String, String> details = backupManager.getVmDetailsForBackup(vm);
528528
backup.setDetails(details);
529-
details = backupManager.getBackupDiskOfferingDetails(vm.getId());
529+
details = backupManager.getDiskOfferingDetailsForBackup(vm.getId());
530530
backup.addDetails(details);
531531
backupDao.persist(backup);
532532
return true;

0 commit comments

Comments
 (0)