You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2014/01/04 01:45:21 UTC

git commit: updated refs/heads/4.3 to db25228

Updated Branches:
  refs/heads/4.3 ce7bc8fd9 -> db25228b2


CLOUDSTACK-5329: fix NPE in storage migration for zone-wide primary storage, and also the serization error.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/db25228b
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/db25228b
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/db25228b

Branch: refs/heads/4.3
Commit: db25228b23c3ffb0367c3e60d2339af5fadbc9e9
Parents: ce7bc8f
Author: edison <su...@gmail.com>
Authored: Fri Jan 3 16:44:21 2014 -0800
Committer: edison <su...@gmail.com>
Committed: Fri Jan 3 16:44:21 2014 -0800

----------------------------------------------------------------------
 api/src/com/cloud/storage/StoragePool.java              |  2 ++
 .../api/agent/test/BackupSnapshotCommandTest.java       |  6 ++++++
 .../api/agent/test/CheckNetworkAnswerTest.java          | 10 +++++++++-
 .../cloudstack/api/agent/test/SnapshotCommandTest.java  | 10 +++++++++-
 .../src/com/cloud/vm/VirtualMachineManagerImpl.java     |  6 ++++--
 .../src/com/cloud/vm/VmWorkStorageMigration.java        | 12 +++++-------
 .../storage/datastore/PrimaryDataStoreImpl.java         |  6 ++++++
 server/src/com/cloud/vm/UserVmManagerImpl.java          |  8 ++++++--
 8 files changed, 47 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/db25228b/api/src/com/cloud/storage/StoragePool.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/StoragePool.java b/api/src/com/cloud/storage/StoragePool.java
index 6e9af12..027ca60 100644
--- a/api/src/com/cloud/storage/StoragePool.java
+++ b/api/src/com/cloud/storage/StoragePool.java
@@ -18,6 +18,7 @@ package com.cloud.storage;
 
 import java.util.Date;
 
+import com.cloud.hypervisor.Hypervisor;
 import org.apache.cloudstack.api.Identity;
 import org.apache.cloudstack.api.InternalIdentity;
 
@@ -104,4 +105,5 @@ public interface StoragePool extends Identity, InternalIdentity {
 	String getStorageProviderName();
 	
 	boolean isInMaintenance();
+    Hypervisor.HypervisorType getHypervisor();
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/db25228b/core/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java
----------------------------------------------------------------------
diff --git a/core/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java b/core/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java
index a7a1fd2..f8c7797 100644
--- a/core/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java
+++ b/core/test/org/apache/cloudstack/api/agent/test/BackupSnapshotCommandTest.java
@@ -24,6 +24,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+import com.cloud.hypervisor.Hypervisor;
 import org.junit.Test;
 
 import com.cloud.agent.api.BackupSnapshotCommand;
@@ -35,6 +36,11 @@ import com.cloud.storage.StoragePoolStatus;
 public class BackupSnapshotCommandTest {
     public StoragePool pool = new StoragePool() {
         @Override
+        public Hypervisor.HypervisorType getHypervisor() {
+            return null;
+        }
+
+        @Override
         public long getId() {
             return 1L;
         };

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/db25228b/core/test/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java
----------------------------------------------------------------------
diff --git a/core/test/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java b/core/test/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java
index b834a26..1e3ff7f 100644
--- a/core/test/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java
+++ b/core/test/org/apache/cloudstack/api/agent/test/CheckNetworkAnswerTest.java
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertTrue;
 
 import com.cloud.agent.api.storage.ResizeVolumeCommand;
 import com.cloud.agent.api.to.StorageFilerTO;
+import com.cloud.hypervisor.Hypervisor;
 import com.cloud.storage.Storage;
 import com.cloud.storage.StoragePool;
 import com.cloud.storage.StoragePoolStatus;
@@ -185,7 +186,14 @@ public class CheckNetworkAnswerTest {
             public boolean isInMaintenance() {
                 // TODO Auto-generated method stub
                 return false;
-            };
+            }
+
+            @Override
+            public Hypervisor.HypervisorType getHypervisor() {
+                return null;
+            }
+
+            ;
         };
 
         Long newSize = 4194304L;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/db25228b/core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java
----------------------------------------------------------------------
diff --git a/core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java b/core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java
index 35bdfc8..b3933db 100644
--- a/core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java
+++ b/core/test/org/apache/cloudstack/api/agent/test/SnapshotCommandTest.java
@@ -24,6 +24,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+import com.cloud.hypervisor.Hypervisor;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -128,7 +129,14 @@ public class SnapshotCommandTest {
         public boolean isInMaintenance() {
             // TODO Auto-generated method stub
             return false;
-        };
+        }
+
+        @Override
+        public Hypervisor.HypervisorType getHypervisor() {
+            return null;
+        }
+
+        ;
     };
 
     SnapshotCommand ssc = new SnapshotCommand(pool,

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/db25228b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 0f9b2c9..d745692 100755
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -40,6 +40,7 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
 import org.apache.log4j.Logger;
 
 import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
@@ -4505,7 +4506,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 
 		            // save work context info (there are some duplications)
 		            VmWorkStorageMigration workInfo = new VmWorkStorageMigration(user.getId(), account.getId(), vm.getId(),
-                            VirtualMachineManagerImpl.VM_WORK_JOB_HANDLER, destPool);
+                            VirtualMachineManagerImpl.VM_WORK_JOB_HANDLER, destPool.getId());
 		            workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
 
                     _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vm.getId());
@@ -4847,7 +4848,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
             s_logger.info("Unable to find vm " + work.getVmId());
         }
         assert (vm != null);
-        orchestrateStorageMigration(vm.getUuid(), work.getDestStoragePool());
+        StoragePool pool = (PrimaryDataStoreInfo)dataStoreMgr.getPrimaryDataStore(work.getDestStoragePoolId());
+        orchestrateStorageMigration(vm.getUuid(), pool);
         return new Pair<JobInfo.Status, String>(JobInfo.Status.SUCCEEDED, null);
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/db25228b/engine/orchestration/src/com/cloud/vm/VmWorkStorageMigration.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VmWorkStorageMigration.java b/engine/orchestration/src/com/cloud/vm/VmWorkStorageMigration.java
index c8df5a9..a5b0a0a 100644
--- a/engine/orchestration/src/com/cloud/vm/VmWorkStorageMigration.java
+++ b/engine/orchestration/src/com/cloud/vm/VmWorkStorageMigration.java
@@ -16,20 +16,18 @@
 // under the License.
 package com.cloud.vm;
 
-import com.cloud.storage.StoragePool;
-
 public class VmWorkStorageMigration extends VmWork {
 	private static final long serialVersionUID = -8677979691741157474L;
 
-	StoragePool destPool;
+	Long  destPoolId;
 	
-    public VmWorkStorageMigration(long userId, long accountId, long vmId, String handlerName, StoragePool destPool) {
+    public VmWorkStorageMigration(long userId, long accountId, long vmId, String handlerName, Long destPoolId) {
         super(userId, accountId, vmId, handlerName);
     	
-    	this.destPool = destPool;
+    	this.destPoolId = destPoolId;
     }
     
-    public StoragePool getDestStoragePool() {
-    	return destPool;
+    public Long getDestStoragePoolId() {
+    	return destPoolId;
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/db25228b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java
index cb502e9..f3651d4 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreImpl.java
@@ -23,6 +23,7 @@ import java.util.List;
 
 import javax.inject.Inject;
 
+import com.cloud.hypervisor.Hypervisor;
 import org.apache.cloudstack.engine.subsystem.api.storage.*;
 import org.apache.log4j.Logger;
 
@@ -361,6 +362,11 @@ public class PrimaryDataStoreImpl implements PrimaryDataStore {
     }
 
     @Override
+    public HypervisorType getHypervisor() {
+        return pdsv.getHypervisor();
+    }
+
+    @Override
     public String getStorageProviderName() {
         return pdsv.getStorageProviderName();
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/db25228b/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 19285da..0a51d2c 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -4058,14 +4058,18 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
                     "Data disks attached to the vm, can not migrate. Need to dettach data disks at first");
         }
 
-        HypervisorType destHypervisorType = _clusterDao.findById(
-                destPool.getClusterId()).getHypervisorType();
+        HypervisorType destHypervisorType = destPool.getHypervisor();
+        if (destHypervisorType == null) {
+            destHypervisorType = _clusterDao.findById(
+                    destPool.getClusterId()).getHypervisorType();
+        }
         if (vm.getHypervisorType() != destHypervisorType) {
             throw new InvalidParameterValueException(
                     "hypervisor is not compatible: dest: "
                             + destHypervisorType.toString() + ", vm: "
                             + vm.getHypervisorType().toString());
         }
+
         _itMgr.storageMigration(vm.getUuid(), destPool);
         return _vmDao.findById(vm.getId());