From c1570b9c9125f030b5040996b88928acacb92226 Mon Sep 17 00:00:00 2001 From: dahn Date: Thu, 23 Apr 2020 19:56:27 +0200 Subject: [PATCH] Volume migration (#4043) * Update AncientDataMotionStrategy.java fix When secondary storage usage is> 90%, VOLUME migration across primary storage will cause the migration to fail and lose VOLUME * Update AncientDataMotionStrategy.java Volume is migrated across Primary storage. If no secondary storage is available(Or used capacity> 90% ), the migration is canceled. Before modification, if secondary storage cannot be found, copyVolumeBetweenPools return NUll copyAsync considers answer = null to be a sign of successful task execution, so it deletes the VOLUME on the old primary storage. This is the root cause of data loss, because VOLUME did not perform the migration at all. * code in comment removed Co-authored-by: div8cn <35140268+div8cn@users.noreply.github.com> Co-authored-by: Daan Hoogland --- .../cloudstack/storage/motion/AncientDataMotionStrategy.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java index bc49a53db58..a5b01c70679 100644 --- a/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java +++ b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java @@ -330,8 +330,9 @@ public class AncientDataMotionStrategy implements DataMotionStrategy { // directly to s3 ImageStoreEntity imageStore = (ImageStoreEntity)dataStoreMgr.getImageStoreWithFreeCapacity(destScope.getScopeId()); if (imageStore == null || !imageStore.getProtocol().equalsIgnoreCase("nfs") && !imageStore.getProtocol().equalsIgnoreCase("cifs")) { - s_logger.debug("can't find a nfs (or cifs) image store to satisfy the need for a staging store"); - return null; + String errMsg = "can't find a nfs (or cifs) image store to satisfy the need for a staging store"; + Answer answer = new Answer(null, false, errMsg); + return answer; } DataObject objOnImageStore = imageStore.create(srcData);