Skip to content

Commit ccac1a3

Browse files
DK101010DK101010GutoVeroneziweizhouapache
authored
Feat/add vdisk UUID to list volume (#5848)
* get vdisk uuid from vcenter and store it into database * add vdisk uuid as external_uuid to listVolume response * add sql upgrade file * Update vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java Co-authored-by: Daniel Augusto Veronezi Salvador <[email protected]> * update sql add column external_uuid * Update server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java Co-authored-by: Wei Zhou <[email protected]> * adapt param description for externalUuid * add 'idempotent column add' to create external_uuid col * rename method to getExternalDiskUUID * remove line disk_offering.system_use Co-authored-by: DK101010 <[email protected]> Co-authored-by: Daniel Augusto Veronezi Salvador <[email protected]> Co-authored-by: Wei Zhou <[email protected]>
1 parent c339f6e commit ccac1a3

File tree

11 files changed

+99
-1
lines changed

11 files changed

+99
-1
lines changed

api/src/main/java/com/cloud/storage/Volume.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,4 +243,8 @@ enum Event {
243243
boolean isDisplay();
244244

245245
boolean isDeployAsIs();
246+
247+
String getExternalUuid();
248+
249+
void setExternalUuid(String externalUuid);
246250
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ public class ApiConstants {
166166
public static final String EXTRA_DHCP_OPTION_CODE = "extradhcpoptioncode";
167167
public static final String EXTRA_DHCP_OPTION_VALUE = "extradhcpvalue";
168168
public static final String EXTERNAL = "external";
169+
public static final String EXTERNAL_UUID = "externaluuid";
169170
public static final String FENCE = "fence";
170171
public static final String FETCH_LATEST = "fetchlatest";
171172
public static final String FIRSTNAME = "firstname";

api/src/main/java/org/apache/cloudstack/api/response/VolumeResponse.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,10 @@ public class VolumeResponse extends BaseResponseWithTagInformation implements Co
280280
@Param(description = "pod name of the volume")
281281
private String podName;
282282

283+
@SerializedName(ApiConstants.EXTERNAL_UUID)
284+
@Param(description = "volume uuid that is given by virtualisation provider (only for VMware)")
285+
private String externalUuid;
286+
283287
public String getPath() {
284288
return path;
285289
}
@@ -793,4 +797,12 @@ public String getPodName() {
793797
public void setPodName(String podName) {
794798
this.podName = podName;
795799
}
800+
801+
public String getExternalUuid() {
802+
return externalUuid;
803+
}
804+
805+
public void setExternalUuid(String externalUuid) {
806+
this.externalUuid = externalUuid;
807+
}
796808
}

engine/schema/src/main/java/com/cloud/storage/VolumeVO.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,9 @@ public class VolumeVO implements Volume {
160160
@Column(name = "iso_id")
161161
private Long isoId;
162162

163+
@Column(name = "external_uuid")
164+
private String externalUuid = null;
165+
163166
@Transient
164167
// @Column(name="reservation")
165168
String reservationId;
@@ -266,6 +269,7 @@ public VolumeVO(Volume that) {
266269
provisioningType = that.getProvisioningType();
267270
uuid = UUID.randomUUID().toString();
268271
deployAsIs = that.isDeployAsIs();
272+
externalUuid = that.getExternalUuid();
269273
}
270274

271275
@Override
@@ -648,4 +652,15 @@ public Class<?> getEntityType() {
648652
public String getVolumeDescription(){
649653
return ReflectionToStringBuilderUtils.reflectOnlySelectedFields(this, "name", "uuid");
650654
}
655+
656+
@Override
657+
public String getExternalUuid() {
658+
return externalUuid;
659+
}
660+
661+
@Override
662+
public void setExternalUuid(String externalUuid) {
663+
this.externalUuid = externalUuid;
664+
}
665+
651666
}

engine/schema/src/main/resources/META-INF/db/schema-41610to41700.sql

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,24 @@ CREATE VIEW `cloud`.`service_offering_view` AS
220220
GROUP BY
221221
`service_offering`.`id`;
222222

223+
224+
--;
225+
-- Stored procedure to do idempotent column add;
226+
-- This is copied from schema-41000to41100.sql
227+
--;
228+
DROP PROCEDURE IF EXISTS `cloud`.`IDEMPOTENT_ADD_COLUMN`;
229+
230+
CREATE PROCEDURE `cloud`.`IDEMPOTENT_ADD_COLUMN` (
231+
IN in_table_name VARCHAR(200),
232+
IN in_column_name VARCHAR(200),
233+
IN in_column_definition VARCHAR(1000)
234+
)
235+
BEGIN
236+
237+
DECLARE CONTINUE HANDLER FOR 1060 BEGIN END; SET @ddl = CONCAT('ALTER TABLE ', in_table_name); SET @ddl = CONCAT(@ddl, ' ', 'ADD COLUMN') ; SET @ddl = CONCAT(@ddl, ' ', in_column_name); SET @ddl = CONCAT(@ddl, ' ', in_column_definition); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt; END;
238+
239+
CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.volumes','external_uuid', 'VARCHAR(40) DEFAULT null ');
240+
223241
DROP VIEW IF EXISTS `cloud`.`volume_view`;
224242
CREATE VIEW `cloud`.`volume_view` AS
225243
SELECT
@@ -240,6 +258,7 @@ CREATE VIEW `cloud`.`volume_view` AS
240258
volumes.format,
241259
volumes.path,
242260
volumes.chain_info,
261+
volumes.external_uuid,
243262
account.id account_id,
244263
account.uuid account_uuid,
245264
account.account_name account_name,
@@ -641,7 +660,6 @@ CREATE VIEW `cloud`.`domain_router_view` AS
641660
`cloud`.`async_job` ON async_job.instance_id = vm_instance.id
642661
and async_job.instance_type = 'DomainRouter'
643662
and async_job.job_status = 0;
644-
645663
INSERT INTO `cloud`.`role_permissions` (`uuid`, `role_id`, `rule`, `permission`, `sort_order`) SELECT UUID(), 3, 'listConfigurations', 'ALLOW', (SELECT MAX(`sort_order`)+1 FROM `cloud`.`role_permissions`) ON DUPLICATE KEY UPDATE rule=rule;
646664
INSERT INTO `cloud`.`role_permissions` (`uuid`, `role_id`, `rule`, `permission`, `sort_order`) SELECT UUID(), 3, 'updateConfiguration', 'ALLOW', (SELECT MAX(`sort_order`)+1 FROM `cloud`.`role_permissions`) ON DUPLICATE KEY UPDATE rule=rule;
647665

engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeObject.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -833,4 +833,14 @@ public Long getVmSnapshotChainSize() {
833833
public Class<?> getEntityType() {
834834
return Volume.class;
835835
}
836+
837+
@Override
838+
public String getExternalUuid() {
839+
return volumeVO.getExternalUuid();
840+
}
841+
842+
@Override
843+
public void setExternalUuid(String externalUuid) {
844+
volumeVO.setExternalUuid(externalUuid);
845+
}
836846
}

plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2149,6 +2149,8 @@ private Answer attachVolume(Command cmd, DiskTO disk, boolean isAttach, boolean
21492149
VirtualMachineDiskInfo diskInfo = diskInfoBuilder.getDiskInfoByBackingFileBaseName(volumePath, dsMo.getName());
21502150
chainInfo = _gson.toJson(diskInfo);
21512151

2152+
answer.setContextParam("vdiskUuid",vmMo.getExternalDiskUUID(datastoreVolumePath));
2153+
21522154
if (isManaged) {
21532155
expandVirtualDisk(vmMo, datastoreVolumePath, volumeTO.getSize());
21542156
}

server/src/main/java/com/cloud/api/query/dao/VolumeJoinDaoImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ public VolumeResponse newVolumeResponse(ResponseView view, VolumeJoinVO volume)
269269
}
270270

271271
volResponse.setObjectName("volume");
272+
volResponse.setExternalUuid(volume.getExternalUuid());
272273
return volResponse;
273274
}
274275

server/src/main/java/com/cloud/api/query/vo/VolumeJoinVO.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,9 @@ public class VolumeJoinVO extends BaseViewWithTagInformationVO implements Contro
272272
@Column(name = "chain_info", length = 65535)
273273
String chainInfo;
274274

275+
@Column(name = "external_uuid")
276+
private String externalUuid = null;
277+
275278
public VolumeJoinVO() {
276279
}
277280

@@ -599,6 +602,14 @@ public String getChainInfo() {
599602
return chainInfo;
600603
}
601604

605+
public String getExternalUuid() {
606+
return externalUuid;
607+
}
608+
609+
public void setExternalUuid(String externalUuid) {
610+
this.externalUuid = externalUuid;
611+
}
612+
602613
@Override
603614
public Class<?> getEntityType() {
604615
return Volume.class;

server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3854,6 +3854,12 @@ private VolumeVO sendAttachVolumeCommand(UserVmVO vm, VolumeVO volumeToAttach, L
38543854
_volsDao.update(volumeToAttach.getId(), volumeToAttach);
38553855
}
38563856

3857+
if (answer.getContextParam("vdiskUuid") != null) {
3858+
volumeToAttach = _volsDao.findById(volumeToAttach.getId());
3859+
volumeToAttach.setExternalUuid(answer.getContextParam("vdiskUuid"));
3860+
_volsDao.update(volumeToAttach.getId(), volumeToAttach);
3861+
}
3862+
38573863
String chainInfo = answer.getContextParam("chainInfo");
38583864
if (chainInfo != null) {
38593865
volumeToAttach = _volsDao.findById(volumeToAttach.getId());

0 commit comments

Comments
 (0)