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());