slavkap commented on code in PR #6661:
URL: https://github.com/apache/cloudstack/pull/6661#discussion_r1022358705
##########
plugins/storage/volume/storpool/src/main/java/org/apache/cloudstack/storage/datastore/driver/StorPoolPrimaryDataStoreDriver.java:
##########
@@ -792,6 +775,71 @@ public void copyAsync(DataObject srcData, DataObject
dstData, AsyncCompletionCal
callback.complete(res);
}
+ private Answer migrateVolumeToStorPool(DataObject srcData, DataObject
dstData, VolumeInfo srcInfo,
+ VolumeObjectTO srcTO, final String volumeName) {
+ Answer answer;
+ SpConnectionDesc conn =
StorPoolUtil.getSpConnection(dstData.getDataStore().getUuid(),
dstData.getDataStore().getId(), storagePoolDetailsDao, primaryStoreDao);
+ String baseOn =
StorPoolStorageAdaptor.getVolumeNameFromPath(srcTO.getPath(), true);
+
+ String vmUuid = null;
+ String vcPolicyTag = null;
+
+ VMInstanceVO vm = null;
+ if (srcInfo.getInstanceId() != null) {
+ vm = vmInstanceDao.findById(srcInfo.getInstanceId());
+ }
+
+ if (vm != null) {
+ vmUuid = vm.getUuid();
+ vcPolicyTag = getVcPolicyTag(vm.getId());
+ }
+
+ if (vm != null && vm.getState().equals(State.Running)) {
+ // migrate volume to another StorPool template
+ answer = migrateVolume(srcData, dstData, volumeName, conn);
+ } else {
+ //copy volume to another pool
+ answer = copyVolume(srcInfo, srcTO, conn, baseOn, vmUuid,
vcPolicyTag);
+ }
+ return answer;
+ }
+
+ private Answer copyVolume(VolumeInfo srcInfo, VolumeObjectTO srcTO,
SpConnectionDesc conn, String baseOn, String vmUuid, String vcPolicyTag) {
+ //uuid tag will be the same as srcData.uuid
+ String volumeName = srcInfo.getUuid();
+ Long iops = (srcInfo.getMaxIops() != null &&
srcInfo.getMaxIops().longValue() > 0) ? srcInfo.getMaxIops() : null;
+ SpApiResponse response = StorPoolUtil.volumeCopy(volumeName, baseOn,
"volume", iops, vmUuid, vcPolicyTag, conn);
+ if (response.getError() != null) {
+ return new CopyCmdAnswer(String.format("Could not copy volume [%s]
due to %s", baseOn, response.getError()));
+ }
+ String newVolume = StorPoolUtil.getNameFromResponse(response, false);
+
+ StorPoolUtil.spLog("StorpoolPrimaryDataStoreDriverImpl.copyAsnc copy
volume[%s] from pool[%s] with a new name [%s]",
+ baseOn, srcInfo.getDataStore().getName(), newVolume);
+
+ srcTO.setSize(srcInfo.getSize());
+ srcTO.setPath(StorPoolUtil.devPath(newVolume));
+
+ return new CopyCmdAnswer(srcTO);
+ }
+
+ private Answer migrateVolume(DataObject srcData, DataObject dstData,
String name, SpConnectionDesc conn) {
Review Comment:
there is a coverage for it
##########
plugins/storage/volume/storpool/src/main/java/org/apache/cloudstack/storage/datastore/driver/StorPoolPrimaryDataStoreDriver.java:
##########
@@ -792,6 +775,71 @@ public void copyAsync(DataObject srcData, DataObject
dstData, AsyncCompletionCal
callback.complete(res);
}
+ private Answer migrateVolumeToStorPool(DataObject srcData, DataObject
dstData, VolumeInfo srcInfo,
+ VolumeObjectTO srcTO, final String volumeName) {
+ Answer answer;
+ SpConnectionDesc conn =
StorPoolUtil.getSpConnection(dstData.getDataStore().getUuid(),
dstData.getDataStore().getId(), storagePoolDetailsDao, primaryStoreDao);
+ String baseOn =
StorPoolStorageAdaptor.getVolumeNameFromPath(srcTO.getPath(), true);
+
+ String vmUuid = null;
+ String vcPolicyTag = null;
+
+ VMInstanceVO vm = null;
+ if (srcInfo.getInstanceId() != null) {
+ vm = vmInstanceDao.findById(srcInfo.getInstanceId());
+ }
+
+ if (vm != null) {
+ vmUuid = vm.getUuid();
+ vcPolicyTag = getVcPolicyTag(vm.getId());
+ }
+
+ if (vm != null && vm.getState().equals(State.Running)) {
+ // migrate volume to another StorPool template
+ answer = migrateVolume(srcData, dstData, volumeName, conn);
+ } else {
+ //copy volume to another pool
+ answer = copyVolume(srcInfo, srcTO, conn, baseOn, vmUuid,
vcPolicyTag);
+ }
+ return answer;
+ }
+
+ private Answer copyVolume(VolumeInfo srcInfo, VolumeObjectTO srcTO,
SpConnectionDesc conn, String baseOn, String vmUuid, String vcPolicyTag) {
Review Comment:
there is a coverage for it
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]