You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2021/03/03 08:00:34 UTC
[cloudstack] branch master updated: server: Clean up the duplicate
volume when the destination managed volume creation failed on migrate
volume operation (#4730)
This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push:
new 45e77dd server: Clean up the duplicate volume when the destination managed volume creation failed on migrate volume operation (#4730)
45e77dd is described below
commit 45e77dd6f0b707b7fd087d50aee5c8294e813cc9
Author: sureshanaparti <12...@users.noreply.github.com>
AuthorDate: Wed Mar 3 13:30:08 2021 +0530
server: Clean up the duplicate volume when the destination managed volume creation failed on migrate volume operation (#4730)
Duplicated volumes after failed migration in Allocated state
Fix: Clean up the duplicate volume when the destination managed volume creation failed on migrate volume operation
---
.../cloudstack/storage/volume/VolumeServiceImpl.java | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
index 68940d4..348c142 100644
--- a/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
+++ b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
@@ -1123,12 +1123,6 @@ public class VolumeServiceImpl implements VolumeService {
// Refresh the volume info from the DB.
volumeInfo = volFactory.getVolume(volumeInfo.getId(), destPrimaryDataStore);
- volumeInfo.processEvent(Event.CreateRequested);
- CreateVolumeFromBaseImageContext<VolumeApiResult> context = new CreateVolumeFromBaseImageContext<>(null, volumeInfo, destPrimaryDataStore, srcTemplateOnPrimary, future, null, null);
- AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> caller = AsyncCallbackDispatcher.create(this);
- caller.setCallback(caller.getTarget().createVolumeFromBaseManagedImageCallBack(null, null));
- caller.setContext(context);
-
Map<String, String> details = new HashMap<String, String>();
details.put(PrimaryDataStore.MANAGED, Boolean.TRUE.toString());
details.put(PrimaryDataStore.STORAGE_HOST, destPrimaryDataStore.getHostAddress());
@@ -1141,6 +1135,13 @@ public class VolumeServiceImpl implements VolumeService {
grantAccess(volumeInfo, destHost, destPrimaryDataStore);
+ volumeInfo.processEvent(Event.CreateRequested);
+
+ CreateVolumeFromBaseImageContext<VolumeApiResult> context = new CreateVolumeFromBaseImageContext<>(null, volumeInfo, destPrimaryDataStore, srcTemplateOnPrimary, future, null, null);
+ AsyncCallbackDispatcher<VolumeServiceImpl, CopyCommandResult> caller = AsyncCallbackDispatcher.create(this);
+ caller.setCallback(caller.getTarget().createVolumeFromBaseManagedImageCallBack(null, null));
+ caller.setContext(context);
+
try {
motionSrv.copyAsync(srcTemplateOnPrimary, volumeInfo, destHost, caller);
} finally {
@@ -1919,6 +1920,11 @@ public class VolumeServiceImpl implements VolumeService {
AsyncCallFuture<VolumeApiResult> createVolumeFuture = createVolumeAsync(destVolume, destStore);
VolumeApiResult createVolumeResult = createVolumeFuture.get();
if (createVolumeResult.isFailed()) {
+ s_logger.debug("Failed to create dest volume " + destVolume.getId() + ", volume can be removed");
+ destroyVolume(destVolume.getId());
+ destVolume.processEvent(Event.ExpungeRequested);
+ destVolume.processEvent(Event.OperationSuccessed);
+ volDao.remove(destVolume.getId());
throw new CloudRuntimeException("Creation of a dest volume failed: " + createVolumeResult.getResult());
}