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 25c4f7f  kvm: Remove code that generated /var/lib/libvirt/images/null 
on target host (#3280)
25c4f7f is described below

commit 25c4f7fc088499565eb6df7ead0b57304c78be42
Author: Gabriel Beims Bräscher <[email protected]>
AuthorDate: Mon May 27 09:45:29 2019 -0300

    kvm: Remove code that generated /var/lib/libvirt/images/null on target host 
(#3280)
    
    This commit simplifies the generateDestPath method and fixes an issue where 
an extra file, named as 'null', was created on the target storage pool during 
VM local storage volume migration. Without this fix, the VM is migrated and 
there is no data loss; however, 193 KB is allocated for the unused file named 
as 'null' and the file stays on the target storage.
---
 .../KvmNonManagedStorageDataMotionStrategy.java    | 29 +---------
 .../motion/StorageSystemDataMotionStrategy.java    |  4 +-
 .../KvmNonManagedStorageSystemDataMotionTest.java  | 67 ----------------------
 .../StorageSystemDataMotionStrategyTest.java       |  4 +-
 4 files changed, 5 insertions(+), 99 deletions(-)

diff --git 
a/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/KvmNonManagedStorageDataMotionStrategy.java
 
b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/KvmNonManagedStorageDataMotionStrategy.java
index 2cf236d..1bbe177 100644
--- 
a/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/KvmNonManagedStorageDataMotionStrategy.java
+++ 
b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/KvmNonManagedStorageDataMotionStrategy.java
@@ -40,15 +40,11 @@ import org.apache.log4j.Logger;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.MigrateCommand;
 import com.cloud.agent.api.MigrateCommand.MigrateDiskInfo;
-import com.cloud.agent.api.storage.CreateAnswer;
-import com.cloud.agent.api.storage.CreateCommand;
-import com.cloud.agent.api.to.VirtualMachineTO;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.OperationTimedoutException;
 import com.cloud.host.Host;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.storage.DataStoreRole;
-import com.cloud.storage.DiskOfferingVO;
 import com.cloud.storage.Storage.StoragePoolType;
 import com.cloud.storage.StorageManager;
 import com.cloud.storage.StoragePool;
@@ -57,7 +53,6 @@ import com.cloud.storage.VMTemplateStorageResourceAssoc;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.VMTemplatePoolDao;
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.DiskProfile;
 import com.cloud.vm.VirtualMachineManager;
 
 /**
@@ -111,28 +106,8 @@ public class KvmNonManagedStorageDataMotionStrategy 
extends StorageSystemDataMot
      * Example: /var/lib/libvirt/images/f3d49ecc-870c-475a-89fa-fd0124420a9b
      */
     @Override
-    protected String generateDestPath(VirtualMachineTO vmTO, VolumeVO 
srcVolume, Host destHost, StoragePoolVO destStoragePool, VolumeInfo 
destVolumeInfo) {
-        DiskOfferingVO diskOffering = 
_diskOfferingDao.findById(srcVolume.getDiskOfferingId());
-        DiskProfile diskProfile = new DiskProfile(destVolumeInfo, 
diskOffering, HypervisorType.KVM);
-        String templateUuid = getTemplateUuid(destVolumeInfo.getTemplateId());
-        CreateCommand rootImageProvisioningCommand = new 
CreateCommand(diskProfile, templateUuid, destStoragePool, true);
-
-        Answer rootImageProvisioningAnswer = 
agentManager.easySend(destHost.getId(), rootImageProvisioningCommand);
-
-        if (rootImageProvisioningAnswer == null) {
-            throw new CloudRuntimeException(String.format("Migration with 
storage of vm [%s] failed while provisioning root image", vmTO.getName()));
-        }
-
-        if (!rootImageProvisioningAnswer.getResult()) {
-            throw new CloudRuntimeException(String.format("Unable to modify 
target volume on the host [host id:%s, name:%s]", destHost.getId(), 
destHost.getName()));
-        }
-
-        String libvirtDestImgsPath = null;
-        if (rootImageProvisioningAnswer instanceof CreateAnswer) {
-            libvirtDestImgsPath = 
((CreateAnswer)rootImageProvisioningAnswer).getVolume().getName();
-        }
-        // File.getAbsolutePath is used to keep the file separator as it 
should be and eliminate a verification to check if exists a file separator in 
the last character of libvirtDestImgsPath.
-        return new File(libvirtDestImgsPath, 
destVolumeInfo.getUuid()).getAbsolutePath();
+    protected String generateDestPath(Host destHost, StoragePoolVO 
destStoragePool, VolumeInfo destVolumeInfo) {
+        return new File(destStoragePool.getPath(), 
destVolumeInfo.getUuid()).getAbsolutePath();
     }
 
     /**
diff --git 
a/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java
 
b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java
index 6bcaebe..1f3368f 100644
--- 
a/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java
+++ 
b/engine/storage/datamotion/src/main/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategy.java
@@ -1764,7 +1764,7 @@ public class StorageSystemDataMotionStrategy implements 
DataMotionStrategy {
 
                 _volumeService.grantAccess(destVolumeInfo, destHost, 
destDataStore);
 
-                String destPath = generateDestPath(vmTO, srcVolume, destHost, 
destStoragePool, destVolumeInfo);
+                String destPath = generateDestPath(destHost, destStoragePool, 
destVolumeInfo);
 
                 MigrateCommand.MigrateDiskInfo migrateDiskInfo = 
configureMigrateDiskInfo(srcVolumeInfo, destPath);
                 
migrateDiskInfo.setSourceDiskOnStorageFileSystem(isStoragePoolTypeOfFile(sourceStoragePool));
@@ -1855,7 +1855,7 @@ public class StorageSystemDataMotionStrategy implements 
DataMotionStrategy {
     /**
      * Returns the iScsi connection path.
      */
-    protected String generateDestPath(VirtualMachineTO vmTO, VolumeVO 
srcVolume, Host destHost, StoragePoolVO destStoragePool, VolumeInfo 
destVolumeInfo) {
+    protected String generateDestPath(Host destHost, StoragePoolVO 
destStoragePool, VolumeInfo destVolumeInfo) {
         return connectHostToVolume(destHost, destVolumeInfo.getPoolId(), 
destVolumeInfo.get_iScsiName());
     }
 
diff --git 
a/engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/KvmNonManagedStorageSystemDataMotionTest.java
 
b/engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/KvmNonManagedStorageSystemDataMotionTest.java
index c0d8ad3..89a2783 100644
--- 
a/engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/KvmNonManagedStorageSystemDataMotionTest.java
+++ 
b/engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/KvmNonManagedStorageSystemDataMotionTest.java
@@ -50,10 +50,6 @@ import org.mockito.runners.MockitoJUnitRunner;
 import com.cloud.agent.AgentManager;
 import com.cloud.agent.api.Answer;
 import com.cloud.agent.api.MigrateCommand;
-import com.cloud.agent.api.storage.CreateAnswer;
-import com.cloud.agent.api.storage.CreateCommand;
-import com.cloud.agent.api.to.VirtualMachineTO;
-import com.cloud.agent.api.to.VolumeTO;
 import com.cloud.exception.AgentUnavailableException;
 import com.cloud.exception.CloudException;
 import com.cloud.exception.OperationTimedoutException;
@@ -61,18 +57,13 @@ import com.cloud.host.Host;
 import com.cloud.host.HostVO;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.storage.DataStoreRole;
-import com.cloud.storage.DiskOfferingVO;
-import com.cloud.storage.Storage;
 import com.cloud.storage.StoragePool;
 import com.cloud.storage.VMTemplateStoragePoolVO;
 import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.storage.Storage.StoragePoolType;
-import com.cloud.storage.Volume;
-import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.VMTemplatePoolDao;
 import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.vm.DiskProfile;
 import com.cloud.vm.VirtualMachineManager;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -203,64 +194,6 @@ public class KvmNonManagedStorageSystemDataMotionTest {
     }
 
     @Test
-    public void generateDestPathTest() {
-        configureAndVerifygenerateDestPathTest(true, false);
-    }
-
-    @Test(expected = CloudRuntimeException.class)
-    public void generateDestPathTestExpectCloudRuntimeException() {
-        configureAndVerifygenerateDestPathTest(false, false);
-    }
-
-    @Test(expected = CloudRuntimeException.class)
-    public void generateDestPathTestExpectCloudRuntimeException2() {
-        configureAndVerifygenerateDestPathTest(false, true);
-    }
-
-    private void configureAndVerifygenerateDestPathTest(boolean answerResult, 
boolean answerIsNull) {
-        String uuid = "f3d49ecc-870c-475a-89fa-fd0124420a9b";
-        String destPath = "/var/lib/libvirt/images/";
-
-        VirtualMachineTO vmTO = Mockito.mock(VirtualMachineTO.class);
-        Mockito.when(vmTO.getName()).thenReturn("vmName");
-
-        VolumeVO srcVolume = Mockito.spy(new VolumeVO("name", 0l, 0l, 0l, 0l, 
0l, "folder", "path", Storage.ProvisioningType.THIN, 0l, Volume.Type.ROOT));
-        StoragePoolVO destStoragePool = Mockito.spy(new StoragePoolVO());
-
-        VolumeInfo destVolumeInfo = Mockito.spy(new VolumeObject());
-        Mockito.doReturn(0l).when(destVolumeInfo).getTemplateId();
-        Mockito.doReturn(0l).when(destVolumeInfo).getId();
-        
Mockito.doReturn(Volume.Type.ROOT).when(destVolumeInfo).getVolumeType();
-        Mockito.doReturn("name").when(destVolumeInfo).getName();
-        Mockito.doReturn(0l).when(destVolumeInfo).getSize();
-        Mockito.doReturn(uuid).when(destVolumeInfo).getUuid();
-
-        DiskOfferingVO diskOffering = Mockito.spy(new DiskOfferingVO());
-        Mockito.doReturn(0l).when(diskOffering).getId();
-        Mockito.doReturn(diskOffering).when(diskOfferingDao).findById(0l);
-        DiskProfile diskProfile = Mockito.spy(new DiskProfile(destVolumeInfo, 
diskOffering, HypervisorType.KVM));
-
-        String templateUuid = 
Mockito.doReturn("templateUuid").when(kvmNonManagedStorageDataMotionStrategy).getTemplateUuid(0l);
-        CreateCommand rootImageProvisioningCommand = new 
CreateCommand(diskProfile, templateUuid, destStoragePool, true);
-        CreateAnswer createAnswer = Mockito.spy(new 
CreateAnswer(rootImageProvisioningCommand, "details"));
-        Mockito.doReturn(answerResult).when(createAnswer).getResult();
-
-        VolumeTO volumeTo = Mockito.mock(VolumeTO.class);
-        Mockito.doReturn(destPath).when(volumeTo).getName();
-        Mockito.doReturn(volumeTo).when(createAnswer).getVolume();
-
-        if (answerIsNull) {
-            Mockito.doReturn(null).when(agentManager).easySend(0l, 
rootImageProvisioningCommand);
-        } else {
-            Mockito.doReturn(createAnswer).when(agentManager).easySend(0l, 
rootImageProvisioningCommand);
-        }
-
-        String generatedDestPath = 
kvmNonManagedStorageDataMotionStrategy.generateDestPath(vmTO, srcVolume, new 
HostVO("sourceHostUuid"), destStoragePool, destVolumeInfo);
-
-        Assert.assertEquals(destPath + uuid, generatedDestPath);
-    }
-
-    @Test
     public void shouldMigrateVolumeTest() {
         StoragePoolVO sourceStoragePool = Mockito.spy(new StoragePoolVO());
         HostVO destHost = new HostVO("guid");
diff --git 
a/engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategyTest.java
 
b/engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategyTest.java
index d76ff27..197e66c 100644
--- 
a/engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategyTest.java
+++ 
b/engine/storage/datamotion/src/test/java/org/apache/cloudstack/storage/motion/StorageSystemDataMotionStrategyTest.java
@@ -47,7 +47,6 @@ import org.mockito.Spy;
 import org.mockito.runners.MockitoJUnitRunner;
 
 import com.cloud.agent.api.MigrateCommand;
-import com.cloud.agent.api.to.VirtualMachineTO;
 import com.cloud.host.HostVO;
 import com.cloud.storage.DataStoreRole;
 import com.cloud.storage.ImageStore;
@@ -164,8 +163,7 @@ public class StorageSystemDataMotionStrategyTest {
         Mockito.doReturn(0l).when(destVolumeInfo).getPoolId();
         
Mockito.doReturn("expected").when(storageSystemDataMotionStrategy).connectHostToVolume(destHost,
 0l, "iScsiName");
 
-        String expected = 
storageSystemDataMotionStrategy.generateDestPath(Mockito.mock(VirtualMachineTO.class),
 Mockito.mock(VolumeVO.class), destHost,
-                Mockito.mock(StoragePoolVO.class), destVolumeInfo);
+        String expected = 
storageSystemDataMotionStrategy.generateDestPath(destHost, 
Mockito.mock(StoragePoolVO.class), destVolumeInfo);
 
         Assert.assertEquals(expected, "expected");
         
Mockito.verify(storageSystemDataMotionStrategy).connectHostToVolume(destHost, 
0l, "iScsiName");

Reply via email to