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 2012/12/08 12:16:23 UTC
git commit: finish configurator,
the default primary storage provider can cover all the hypervisors
and protocols
Updated Branches:
refs/heads/javelin 7652a44be -> cdf551166
finish configurator, the default primary storage provider can cover all the hypervisors and protocols
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/cdf55116
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/cdf55116
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/cdf55116
Branch: refs/heads/javelin
Commit: cdf5511664a1ee4a0751f20ce19aae1f30c85ab2
Parents: 7652a44
Author: Edison Su <ed...@citrix.com>
Authored: Sat Dec 8 03:16:03 2012 -0800
Committer: Edison Su <ed...@citrix.com>
Committed: Sat Dec 8 03:16:03 2012 -0800
----------------------------------------------------------------------
.../storage/datastore/DefaultPrimaryDataStore.java | 27 ++++--
.../AbstractPrimaryDataStoreConfigurator.java | 43 ++++++++
.../configurator/PrimaryDataStoreConfigurator.java | 2 +-
.../configurator/kvm/AbstractKvmConfigurator.java | 22 +----
.../configurator/kvm/KvmCLVMConfigurator.java | 9 +--
.../configurator/kvm/KvmNfsConfigurator.java | 6 +-
.../configurator/kvm/KvmRBDConfigurator.java | 4 +-
.../configurator/validator/NfsValidator.java | 36 ++++++-
.../vmware/AbstractVmwareConfigurator.java | 27 +----
.../vmware/VmwareIsciConfigurator.java | 7 +-
.../configurator/vmware/VmwareNfsConfigurator.java | 8 +-
.../vmware/VmwareVMFSConfigurator.java | 8 +-
.../configurator/xen/AbstractXenConfigurator.java | 48 ++++++++
.../configurator/xen/XenIscsiConfigurator.java | 36 +++----
.../configurator/xen/XenNfsConfigurator.java | 37 +++----
.../storage/datastore/db/PrimaryDataStoreVO.java | 11 ++
.../DefaultPrimaryDataStoreLifeCycleImpl.java | 43 --------
.../DefaultVmwarePrimaryDataStoreLifeCycle.java | 8 +-
.../DefaultXenPrimaryDataStoreLifeCycle.java | 5 +-
.../DefaultPrimaryDatastoreProviderImpl.java | 84 ++++++++++++---
.../PrimaryDataStoreProviderManagerImpl.java | 3 +
.../storage/volume/test/ConfiguratorTest.java | 56 ++++++++++
.../storage/volume/test/TestConfiguration.java | 8 ++
.../storage/volume/test/resource/testContext.xml | 20 +++-
setup/db/4.1-new-db-schema.sql | 1 +
25 files changed, 372 insertions(+), 187 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
index c063c5d..5029a48 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
@@ -37,6 +37,9 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
protected PrimaryDataStoreVO pdsv;
protected PrimaryDataStoreInfo pdsInfo;
protected PrimaryDataStoreLifeCycle lifeCycle;
+ protected PrimaryDataStoreProvider provider;
+ private HypervisorType supportedHypervisor;
+ private boolean isLocalStorageSupported = false;
@Inject
private VolumeDao volumeDao;
@Inject
@@ -58,6 +61,10 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
this.lifeCycle = lifeCycle;
}
+ public void setProvider(PrimaryDataStoreProvider provider) {
+ this.provider = provider;
+ }
+
public static DefaultPrimaryDataStore createDataStore(PrimaryDataStoreVO pdsv) {
DefaultPrimaryDataStore dataStore = new DefaultPrimaryDataStore(pdsv);
return ComponentInject.inject(dataStore);
@@ -102,16 +109,22 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
return endpoints;
}
+ public void setSupportedHypervisor(HypervisorType type) {
+ this.supportedHypervisor = type;
+ }
+
@Override
public boolean isHypervisorSupported(HypervisorType hypervisor) {
- // TODO Auto-generated method stub
- return false;
+ return (this.supportedHypervisor == hypervisor) ? true : false;
+ }
+
+ public void setLocalStorageFlag(boolean supported) {
+ this.isLocalStorageSupported = supported;
}
@Override
public boolean isLocalStorageSupported() {
- // TODO Auto-generated method stub
- return false;
+ return this.isLocalStorageSupported;
}
@Override
@@ -208,13 +221,11 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
@Override
public PrimaryDataStoreLifeCycle getLifeCycle() {
- // TODO Auto-generated method stub
- return null;
+ return lifeCycle;
}
@Override
public PrimaryDataStoreProvider getProvider() {
- // TODO Auto-generated method stub
- return null;
+ return this.provider;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/AbstractPrimaryDataStoreConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/AbstractPrimaryDataStoreConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/AbstractPrimaryDataStoreConfigurator.java
new file mode 100644
index 0000000..1ffe9e6
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/AbstractPrimaryDataStoreConfigurator.java
@@ -0,0 +1,43 @@
+package org.apache.cloudstack.storage.datastore.configurator;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
+import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore;
+import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
+import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+public abstract class AbstractPrimaryDataStoreConfigurator implements PrimaryDataStoreConfigurator {
+ @Inject
+ PrimaryDataStoreDao dataStoreDao;
+
+ protected PrimaryDataStoreLifeCycle getLifeCycle() {
+ return null;
+ }
+
+ protected PrimaryDataStoreDriver getDriver() {
+ return null;
+ }
+
+ protected boolean isLocalStorageSupported() {
+ return false;
+ }
+
+ @Override
+ public PrimaryDataStore getDataStore(long dataStoreId) {
+ PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(dataStoreId);
+ if (dataStoreVO == null) {
+ throw new CloudRuntimeException("Can't find primary data store: " + dataStoreId);
+ }
+
+ DefaultPrimaryDataStore dataStore = DefaultPrimaryDataStore.createDataStore(dataStoreVO);
+ dataStore.setDriver(this.getDriver());
+ dataStore.setLifeCycle(getLifeCycle());
+ dataStore.setSupportedHypervisor(getSupportedHypervisor());
+ dataStore.setLocalStorageFlag(isLocalStorageSupported());
+ return dataStore;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/PrimaryDataStoreConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/PrimaryDataStoreConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/PrimaryDataStoreConfigurator.java
index e857165..fa0b76a 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/PrimaryDataStoreConfigurator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/PrimaryDataStoreConfigurator.java
@@ -26,7 +26,7 @@ import com.cloud.storage.Storage.StoragePoolType;
public interface PrimaryDataStoreConfigurator {
public HypervisorType getSupportedHypervisor();
- public StoragePoolType getSupportedDataStoreType();
+ public String getSupportedDataStoreType();
public PrimaryDataStore getDataStore(long dataStoreId);
public ProtocolValidator getValidator();
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/AbstractKvmConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/AbstractKvmConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/AbstractKvmConfigurator.java
index 8fc2832..008af85 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/AbstractKvmConfigurator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/AbstractKvmConfigurator.java
@@ -21,21 +21,18 @@ package org.apache.cloudstack.storage.datastore.configurator.kvm;
import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
-import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.configurator.PrimaryDataStoreConfigurator;
+import org.apache.cloudstack.storage.datastore.configurator.AbstractPrimaryDataStoreConfigurator;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
import org.apache.cloudstack.storage.datastore.driver.DefaultPrimaryDataStoreDriverImpl;
import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
import org.apache.cloudstack.storage.datastore.lifecycle.DefaultKvmPrimaryDataStoreLifeCycle;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.utils.exception.CloudRuntimeException;
-public abstract class AbstractKvmConfigurator implements PrimaryDataStoreConfigurator {
+public abstract class AbstractKvmConfigurator extends AbstractPrimaryDataStoreConfigurator {
@Inject
PrimaryDataStoreDao dataStoreDao;
+
@Override
public HypervisorType getSupportedHypervisor() {
return HypervisorType.KVM;
@@ -48,17 +45,4 @@ public abstract class AbstractKvmConfigurator implements PrimaryDataStoreConfigu
protected PrimaryDataStoreDriver getDriver() {
return new DefaultPrimaryDataStoreDriverImpl();
}
-
- @Override
- public PrimaryDataStore getDataStore(long dataStoreId) {
- PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(dataStoreId);
- if (dataStoreVO == null) {
- throw new CloudRuntimeException("Can't find primary data store: " + dataStoreId);
- }
-
- DefaultPrimaryDataStore dataStore = DefaultPrimaryDataStore.createDataStore(dataStoreVO);
- dataStore.setDriver(this.getDriver());
- dataStore.setLifeCycle(getLifeCycle());
- return dataStore;
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmCLVMConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmCLVMConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmCLVMConfigurator.java
index ca8f10a..8ca4df0 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmCLVMConfigurator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmCLVMConfigurator.java
@@ -18,23 +18,18 @@
*/
package org.apache.cloudstack.storage.datastore.configurator.kvm;
-import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.configurator.PrimaryDataStoreConfigurator;
import org.apache.cloudstack.storage.datastore.configurator.validator.CLVMValidator;
import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.storage.Storage.StoragePoolType;
-
@Component
@Qualifier("defaultProvider")
public class KvmCLVMConfigurator extends AbstractKvmConfigurator {
@Override
- public StoragePoolType getSupportedDataStoreType() {
- return StoragePoolType.CLVM;
+ public String getSupportedDataStoreType() {
+ return "clvm";
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmNfsConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmNfsConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmNfsConfigurator.java
index 25abe80..faed6cc 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmNfsConfigurator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmNfsConfigurator.java
@@ -23,15 +23,13 @@ import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolVa
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
-import com.cloud.storage.Storage.StoragePoolType;
-
@Component
@Qualifier("defaultProvider")
public class KvmNfsConfigurator extends AbstractKvmConfigurator {
@Override
- public StoragePoolType getSupportedDataStoreType() {
- return StoragePoolType.NetworkFilesystem;
+ public String getSupportedDataStoreType() {
+ return "nfs";
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmRBDConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmRBDConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmRBDConfigurator.java
index 3482162..cdbbb25 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmRBDConfigurator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/kvm/KvmRBDConfigurator.java
@@ -30,8 +30,8 @@ import com.cloud.storage.Storage.StoragePoolType;
public class KvmRBDConfigurator extends AbstractKvmConfigurator {
@Override
- public StoragePoolType getSupportedDataStoreType() {
- return StoragePoolType.RBD;
+ public String getSupportedDataStoreType() {
+ return "rbd";
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/NfsValidator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/NfsValidator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/NfsValidator.java
index 97d4761..5ee9316 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/NfsValidator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/NfsValidator.java
@@ -18,21 +18,49 @@
*/
package org.apache.cloudstack.storage.datastore.configurator.validator;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import com.cloud.utils.exception.CloudRuntimeException;
+
public class NfsValidator implements ProtocolValidator {
@Override
public boolean validate(Map<String, String> params) {
- // TODO Auto-generated method stub
- return false;
+ String url = params.get("url");
+
+ try {
+ URI uri = new URI(url);
+ if (!"nfs".equalsIgnoreCase(uri.getScheme())) {
+ throw new CloudRuntimeException("invalid protocol, must starting with nfs");
+ }
+ String storageHost = uri.getHost();
+ String hostPath = uri.getPath();
+ String userInfo = uri.getUserInfo();
+ int port = uri.getPort();
+ if (port == -1) {
+ port = 2049;
+ }
+ params.put("server", storageHost);
+ params.put("path", hostPath);
+ params.put("user", userInfo);
+ params.put("port", String.valueOf(port));
+
+ } catch (URISyntaxException e) {
+ throw new CloudRuntimeException("invalid url: " + e.toString());
+ }
+ return true;
}
@Override
public List<String> getInputParamNames() {
- // TODO Auto-generated method stub
- return null;
+ List<String> paramNames = new ArrayList<String>();
+ paramNames.add("server");
+ paramNames.add("path");
+ return paramNames;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/AbstractVmwareConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/AbstractVmwareConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/AbstractVmwareConfigurator.java
index ece2e81..c688bd6 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/AbstractVmwareConfigurator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/AbstractVmwareConfigurator.java
@@ -21,19 +21,14 @@ package org.apache.cloudstack.storage.datastore.configurator.vmware;
import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
-import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.configurator.PrimaryDataStoreConfigurator;
+import org.apache.cloudstack.storage.datastore.configurator.AbstractPrimaryDataStoreConfigurator;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
import org.apache.cloudstack.storage.datastore.driver.DefaultPrimaryDataStoreDriverImpl;
import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
import org.apache.cloudstack.storage.datastore.lifecycle.DefaultVmwarePrimaryDataStoreLifeCycle;
-
import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.utils.exception.CloudRuntimeException;
-public abstract class AbstractVmwareConfigurator implements PrimaryDataStoreConfigurator {
+public abstract class AbstractVmwareConfigurator extends AbstractPrimaryDataStoreConfigurator {
@Inject
PrimaryDataStoreDao dataStoreDao;
@@ -42,25 +37,13 @@ public abstract class AbstractVmwareConfigurator implements PrimaryDataStoreConf
return HypervisorType.VMware;
}
+ @Override
protected PrimaryDataStoreLifeCycle getLifeCycle() {
- return new DefaultVmwarePrimaryDataStoreLifeCycle();
+ return new DefaultVmwarePrimaryDataStoreLifeCycle(dataStoreDao);
}
+ @Override
protected PrimaryDataStoreDriver getDriver() {
return new DefaultPrimaryDataStoreDriverImpl();
}
-
- @Override
- public PrimaryDataStore getDataStore(long dataStoreId) {
- PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(dataStoreId);
- if (dataStoreVO == null) {
- throw new CloudRuntimeException("Can't find primary data store: " + dataStoreId);
- }
-
- DefaultPrimaryDataStore dataStore = DefaultPrimaryDataStore.createDataStore(dataStoreVO);
- dataStore.setDriver(this.getDriver());
- dataStore.setLifeCycle(getLifeCycle());
- return dataStore;
- }
-
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareIsciConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareIsciConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareIsciConfigurator.java
index f42ac93..55c82ca 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareIsciConfigurator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareIsciConfigurator.java
@@ -23,19 +23,18 @@ import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolVa
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
-import com.cloud.storage.Storage.StoragePoolType;
-
@Component
@Qualifier("defaultProvider")
public class VmwareIsciConfigurator extends AbstractVmwareConfigurator {
@Override
- public StoragePoolType getSupportedDataStoreType() {
- return StoragePoolType.Iscsi;
+ public String getSupportedDataStoreType() {
+ return "iscsi";
}
@Override
public ProtocolValidator getValidator() {
return new ISCSIValiator();
}
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareNfsConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareNfsConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareNfsConfigurator.java
index 8517c8e..23cabb1 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareNfsConfigurator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareNfsConfigurator.java
@@ -20,14 +20,18 @@ package org.apache.cloudstack.storage.datastore.configurator.vmware;
import org.apache.cloudstack.storage.datastore.configurator.validator.NfsValidator;
import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
import com.cloud.storage.Storage.StoragePoolType;
+@Component
+@Qualifier("defaultProvider")
public class VmwareNfsConfigurator extends AbstractVmwareConfigurator {
@Override
- public StoragePoolType getSupportedDataStoreType() {
- return StoragePoolType.NetworkFilesystem;
+ public String getSupportedDataStoreType() {
+ return "nfs";
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareVMFSConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareVMFSConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareVMFSConfigurator.java
index de3c256..ef0444c 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareVMFSConfigurator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/vmware/VmwareVMFSConfigurator.java
@@ -20,14 +20,18 @@ package org.apache.cloudstack.storage.datastore.configurator.vmware;
import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
import org.apache.cloudstack.storage.datastore.configurator.validator.VMFSValidator;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
import com.cloud.storage.Storage.StoragePoolType;
+@Component
+@Qualifier("defaultProvider")
public class VmwareVMFSConfigurator extends AbstractVmwareConfigurator {
@Override
- public StoragePoolType getSupportedDataStoreType() {
- return StoragePoolType.VMFS;
+ public String getSupportedDataStoreType() {
+ return "vmfs";
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/AbstractXenConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/AbstractXenConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/AbstractXenConfigurator.java
new file mode 100644
index 0000000..9b0d153
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/AbstractXenConfigurator.java
@@ -0,0 +1,48 @@
+package org.apache.cloudstack.storage.datastore.configurator.xen;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
+import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore;
+import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.datastore.configurator.AbstractPrimaryDataStoreConfigurator;
+import org.apache.cloudstack.storage.datastore.configurator.PrimaryDataStoreConfigurator;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
+import org.apache.cloudstack.storage.datastore.driver.DefaultPrimaryDataStoreDriverImpl;
+import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
+import org.apache.cloudstack.storage.datastore.lifecycle.DefaultXenPrimaryDataStoreLifeCycle;
+
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+public abstract class AbstractXenConfigurator extends AbstractPrimaryDataStoreConfigurator {
+ @Inject
+ PrimaryDataStoreDao dataStoreDao;
+
+ @Override
+ public HypervisorType getSupportedHypervisor() {
+ return HypervisorType.XenServer;
+ }
+
+ protected PrimaryDataStoreLifeCycle getLifeCycle() {
+ return new DefaultXenPrimaryDataStoreLifeCycle(dataStoreDao);
+ }
+
+ protected PrimaryDataStoreDriver getDriver() {
+ return new DefaultPrimaryDataStoreDriverImpl();
+ }
+
+ @Override
+ public PrimaryDataStore getDataStore(long dataStoreId) {
+ PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(dataStoreId);
+ if (dataStoreVO == null) {
+ throw new CloudRuntimeException("Can't find primary data store: " + dataStoreId);
+ }
+
+ DefaultPrimaryDataStore dataStore = DefaultPrimaryDataStore.createDataStore(dataStoreVO);
+ dataStore.setDriver(this.getDriver());
+ dataStore.setLifeCycle(getLifeCycle());
+ return dataStore;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenIscsiConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenIscsiConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenIscsiConfigurator.java
index c817a5e..c9546a8 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenIscsiConfigurator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenIscsiConfigurator.java
@@ -18,29 +18,23 @@
*/
package org.apache.cloudstack.storage.datastore.configurator.xen;
-import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.configurator.PrimaryDataStoreConfigurator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.ISCSIValiator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
+@Component
+@Qualifier("defaultProvider")
+public class XenIscsiConfigurator extends AbstractXenConfigurator {
-public class XenIscsiConfigurator implements PrimaryDataStoreConfigurator {
+ @Override
+ public String getSupportedDataStoreType() {
+ return "iscsi";
+ }
- @Override
- public HypervisorType getSupportedHypervisor() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public String getSupportedDataStoreType() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public PrimaryDataStore getDataStore() {
- // TODO Auto-generated method stub
- return null;
- }
+ @Override
+ public ProtocolValidator getValidator() {
+ return new ISCSIValiator();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenNfsConfigurator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenNfsConfigurator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenNfsConfigurator.java
index 5ee1b91..8fb7e88 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenNfsConfigurator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/xen/XenNfsConfigurator.java
@@ -18,29 +18,24 @@
*/
package org.apache.cloudstack.storage.datastore.configurator.xen;
-import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.configurator.PrimaryDataStoreConfigurator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.NfsValidator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.storage.Storage.StoragePoolType;
-public class XenNfsConfigurator implements PrimaryDataStoreConfigurator {
+@Component
+@Qualifier("defaultProvider")
+public class XenNfsConfigurator extends AbstractXenConfigurator {
- @Override
- public HypervisorType getSupportedHypervisor() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public String getSupportedDataStoreType() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public PrimaryDataStore getDataStore() {
- // TODO Auto-generated method stub
- return null;
- }
+ @Override
+ public String getSupportedDataStoreType() {
+ return "nfs";
+ }
+ @Override
+ public ProtocolValidator getValidator() {
+ return new NfsValidator();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
index 5a6b409..251c817 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
@@ -98,6 +98,9 @@ public class PrimaryDataStoreVO implements Identity {
@Column(name = "cluster_id")
private Long clusterId;
+
+ @Column(name = "configurator_key")
+ private String key;
public long getId() {
return id;
@@ -234,6 +237,14 @@ public class PrimaryDataStoreVO implements Identity {
public void setName(String name) {
this.name = name;
}
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public String getKey() {
+ return this.key;
+ }
@Override
public boolean equals(Object obj) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
index 897c65e..062c625 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
@@ -48,55 +48,12 @@ public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLif
this.dataStore = dataStore;
}
- protected class DataStoreUrlParser {
- private String schema;
- private String host;
- private String path;
- private int port;
-
- public DataStoreUrlParser(String url) {
- try {
- URI uri = new URI(url);
- schema = uri.getScheme();
- host = uri.getHost();
- path = uri.getPath();
- port = (uri.getPort() == -1) ? 0 : uri.getPort();
- } catch (URISyntaxException e) {
-
- }
- }
-
- public String getSchema() {
- return this.schema;
- }
-
- public String getHost() {
- return this.host;
- }
-
- public String getPath() {
- return this.path;
- }
-
- public int getPort() {
- return this.port;
- }
- }
-
@Override
public boolean initialize(Map<String, String> dsInfos) {
- DataStoreUrlParser parser = new DataStoreUrlParser(dsInfos.get("url"));
PrimaryDataStoreVO dataStore = dataStoreDao.findById(this.dataStore.getId());
- dataStore.setName(dsInfos.get("name"));
- dataStore.setPoolType(parser.getSchema());
- dataStore.setPort(parser.port);
- dataStore.setHostAddress(parser.getHost());
- dataStore.setPath(parser.getPath());
dataStore.setStatus(DataStoreStatus.Initialized);
dataStoreDao.update(this.dataStore.getId(), dataStore);
//TODO: add extension point for each data store
-
- this.dataStore = this.dataStore.getProvider().getDataStore(dataStore.getId());
return true;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultVmwarePrimaryDataStoreLifeCycle.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultVmwarePrimaryDataStoreLifeCycle.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultVmwarePrimaryDataStoreLifeCycle.java
index dcb0c77..ea19891 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultVmwarePrimaryDataStoreLifeCycle.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultVmwarePrimaryDataStoreLifeCycle.java
@@ -27,13 +27,9 @@ public class DefaultVmwarePrimaryDataStoreLifeCycle extends DefaultPrimaryDataSt
* @param dataStoreDao
* @param dataStore
*/
- public DefaultVmwarePrimaryDataStoreLifeCycle(PrimaryDataStoreDao dataStoreDao, PrimaryDataStore dataStore) {
- super(dataStoreDao, dataStore);
+ public DefaultVmwarePrimaryDataStoreLifeCycle(PrimaryDataStoreDao dataStoreDao) {
+ super(dataStoreDao);
// TODO Auto-generated constructor stub
}
-
- public DefaultVmwarePrimaryDataStoreLifeCycle() {
- super(null, null);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultXenPrimaryDataStoreLifeCycle.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultXenPrimaryDataStoreLifeCycle.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultXenPrimaryDataStoreLifeCycle.java
index 27bb347..824ac01 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultXenPrimaryDataStoreLifeCycle.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultXenPrimaryDataStoreLifeCycle.java
@@ -18,7 +18,6 @@
*/
package org.apache.cloudstack.storage.datastore.lifecycle;
-import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
public class DefaultXenPrimaryDataStoreLifeCycle extends DefaultPrimaryDataStoreLifeCycleImpl {
@@ -27,8 +26,8 @@ public class DefaultXenPrimaryDataStoreLifeCycle extends DefaultPrimaryDataStore
* @param dataStoreDao
* @param dataStore
*/
- public DefaultXenPrimaryDataStoreLifeCycle(PrimaryDataStoreDao dataStoreDao, PrimaryDataStore dataStore) {
- super(dataStoreDao, dataStore);
+ public DefaultXenPrimaryDataStoreLifeCycle(PrimaryDataStoreDao dataStoreDao) {
+ super(dataStoreDao);
// TODO Auto-generated constructor stub
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
index f1fca31..698762a 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
@@ -1,5 +1,9 @@
package org.apache.cloudstack.storage.datastore.provider;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.inject.Inject;
@@ -8,6 +12,8 @@ import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCy
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider;
import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.datastore.configurator.PrimaryDataStoreConfigurator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderVO;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
@@ -15,8 +21,15 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.driver.DefaultPrimaryDataStoreDriverImpl;
import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
import org.apache.cloudstack.storage.datastore.lifecycle.DefaultPrimaryDataStoreLifeCycleImpl;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
+import com.cloud.dc.ClusterVO;
+import com.cloud.dc.dao.ClusterDao;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.storage.Storage.StoragePoolType;
+import com.cloud.utils.exception.CloudRuntimeException;
+
@Component
public class DefaultPrimaryDatastoreProviderImpl implements PrimaryDataStoreProvider {
private final String providerName = "default primary data store provider";
@@ -26,9 +39,20 @@ public class DefaultPrimaryDatastoreProviderImpl implements PrimaryDataStoreProv
protected PrimaryDataStoreDao dataStoreDao;
@Inject
protected PrimaryDataStoreProviderDao providerDao;
+ @Inject
+ protected ClusterDao clusterDao;
+ protected Map<String, PrimaryDataStoreConfigurator> configuratorMaps = new HashMap<String, PrimaryDataStoreConfigurator>();
- public DefaultPrimaryDatastoreProviderImpl() {
-
+ @Inject
+ public DefaultPrimaryDatastoreProviderImpl(@Qualifier("defaultProvider") List<PrimaryDataStoreConfigurator> configurators) {
+ for (PrimaryDataStoreConfigurator configurator : configurators) {
+ String key = generateKey(configurator.getSupportedHypervisor(), configurator.getSupportedDataStoreType().toString());
+ configuratorMaps.put(key, configurator);
+ }
+ }
+
+ protected String generateKey(HypervisorType hypervisor, String poolType) {
+ return hypervisor.toString().toLowerCase() + "_" + poolType.toString().toLowerCase();
}
@Override
@@ -38,24 +62,58 @@ public class DefaultPrimaryDatastoreProviderImpl implements PrimaryDataStoreProv
return null;
}
- DefaultPrimaryDataStore pds = DefaultPrimaryDataStore.createDataStore(dsv);
-
- PrimaryDataStoreDriver driver = new DefaultPrimaryDataStoreDriverImpl(pds);
- pds.setDriver(driver);
-
- DefaultPrimaryDataStoreLifeCycleImpl lifeCycle = new DefaultPrimaryDataStoreLifeCycleImpl(dataStoreDao, pds);
- pds.setLifeCycle(lifeCycle);
-
- return pds;
+ String key = dsv.getKey();
+
+ PrimaryDataStoreConfigurator configurator = configuratorMaps.get(key);
+
+ DefaultPrimaryDataStore dataStore = (DefaultPrimaryDataStore)configurator.getDataStore(dataStoreId);
+ dataStore.setProvider(this);
+ return dataStore;
}
-
+
@Override
public PrimaryDataStore registerDataStore(Map<String, String> dsInfos) {
+ String url = dsInfos.get("url");
+ URI uri = null;
+ try {
+ uri = new URI(url);
+ } catch (URISyntaxException e) {
+ throw new CloudRuntimeException("invalid url: " + e.toString());
+ }
+ String protocol = uri.getScheme();
+ Long cluster = null;
+ try {
+ cluster = Long.parseLong(dsInfos.get("clusterId"));
+ } catch (NumberFormatException e) {
+ throw new CloudRuntimeException("Failed to get clusterId");
+ }
+ ClusterVO clusterVO = clusterDao.findById(cluster);
+ if (clusterVO == null) {
+ throw new CloudRuntimeException("Can't find cluster: " + cluster);
+ }
+ HypervisorType hypervisor = clusterVO.getHypervisorType();
+ String key = generateKey(hypervisor, protocol);
+ PrimaryDataStoreConfigurator configurator = configuratorMaps.get(key);
+ if (configurator == null) {
+ throw new CloudRuntimeException("can't find configurator from key: " + key);
+ }
+
+ ProtocolValidator validator = configurator.getValidator();
+ validator.validate(dsInfos);
+
PrimaryDataStoreVO dataStoreVO = new PrimaryDataStoreVO();
dataStoreVO.setStorageProviderId(this.getId());
+ dataStoreVO.setHostAddress(dsInfos.get("server"));
+ dataStoreVO.setPath(dsInfos.get("path"));
+ dataStoreVO.setPoolType(protocol);
+ dataStoreVO.setPort(Integer.parseInt(dsInfos.get("port")));
+ dataStoreVO.setKey(key);
+ dataStoreVO.setName(dsInfos.get("name"));
dataStoreVO = dataStoreDao.persist(dataStoreVO);
+
+ DefaultPrimaryDataStore dataStore = (DefaultPrimaryDataStore)configurator.getDataStore(dataStoreVO.getId());
+ dataStore.setProvider(this);
- PrimaryDataStore dataStore = this.getDataStore(dataStoreVO.getId());
PrimaryDataStoreLifeCycle lifeCycle = dataStore.getLifeCycle();
lifeCycle.initialize(dsInfos);
return getDataStore(dataStore.getId());
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
index d064cce..7d19449 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
@@ -29,6 +29,8 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderVO;
import org.springframework.stereotype.Component;
+import com.cloud.utils.db.DB;
+
@Component
public class PrimaryDataStoreProviderManagerImpl implements PrimaryDataStoreProviderManager {
@Inject
@@ -47,6 +49,7 @@ public class PrimaryDataStoreProviderManagerImpl implements PrimaryDataStoreProv
}
@Override
+ @DB
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
List<PrimaryDataStoreProviderVO> providerVos = providerDao.listAll();
for (PrimaryDataStoreProvider provider : providers) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/ConfiguratorTest.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/ConfiguratorTest.java b/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/ConfiguratorTest.java
index c70de8c..48bf880 100644
--- a/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/ConfiguratorTest.java
+++ b/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/ConfiguratorTest.java
@@ -18,17 +18,30 @@
*/
package org.apache.cloudstack.storage.volume.test;
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider;
import org.apache.cloudstack.storage.datastore.configurator.PrimaryDataStoreConfigurator;
+import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProviderManager;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import com.cloud.dc.ClusterVO;
+import com.cloud.dc.dao.ClusterDao;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:/resource/testContext.xml")
public class ConfiguratorTest {
@@ -36,10 +49,53 @@ public class ConfiguratorTest {
@Qualifier("defaultProvider")
List<PrimaryDataStoreConfigurator> configurators;
+ @Inject
+ List<PrimaryDataStoreProvider> providers;
+
+ @Inject
+ PrimaryDataStoreProviderManager providerMgr;
+ @Inject
+ ClusterDao clusterDao;
+ @Before
+ public void setup() {
+ ClusterVO cluster = new ClusterVO();
+ cluster.setHypervisorType(HypervisorType.XenServer.toString());
+ Mockito.when(clusterDao.findById(Mockito.anyLong())).thenReturn(cluster);
+ try {
+ providerMgr.configure("manager", null);
+ } catch (ConfigurationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
@Test
public void testLoadConfigurator() {
for (PrimaryDataStoreConfigurator configurator : configurators) {
System.out.println(configurator.getClass().getName());
}
}
+
+ @Test
+ public void testProvider() {
+ for (PrimaryDataStoreProvider provider : providers) {
+ if (provider.getName().startsWith("default")) {
+ assertTrue(true);
+ }
+ }
+ }
+
+ @Test
+ public void getProvider() {
+ assertNotNull(providerMgr.getDataStoreProvider("default primary data store provider"));
+ }
+
+ @Test
+ public void createDataStore() {
+ PrimaryDataStoreProvider provider = providerMgr.getDataStoreProvider("default primary data store provider");
+ Map<String, String> params = new HashMap<String, String>();
+ params.put("url", "nfs://localhost/mnt");
+ params.put("clusterId", "1");
+ params.put("name", "nfsprimary");
+ assertNotNull(provider.registerDataStore(params));
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/TestConfiguration.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/TestConfiguration.java b/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/TestConfiguration.java
index 960d1f6..c755334 100644
--- a/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/TestConfiguration.java
+++ b/engine/storage/volume/test/org/apache/cloudstack/storage/volume/test/TestConfiguration.java
@@ -23,6 +23,9 @@ import org.mockito.Mockito;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import com.cloud.dc.dao.ClusterDao;
+import com.cloud.dc.dao.ClusterDaoImpl;
+
@Configuration
public class TestConfiguration {
@@ -30,4 +33,9 @@ public class TestConfiguration {
public ImageMotionService imageMotion() {
return Mockito.mock(ImageMotionService.class);
}
+
+ @Bean
+ public ClusterDao clusterDao() {
+ return Mockito.mock(ClusterDaoImpl.class);
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/engine/storage/volume/test/resource/testContext.xml
----------------------------------------------------------------------
diff --git a/engine/storage/volume/test/resource/testContext.xml b/engine/storage/volume/test/resource/testContext.xml
index c8290eb..562bef8 100644
--- a/engine/storage/volume/test/resource/testContext.xml
+++ b/engine/storage/volume/test/resource/testContext.xml
@@ -12,13 +12,23 @@
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="org.apache.cloudstack.storage" />
- <context:component-scan base-package="org.apache.cloudstack.engine.subsystem.api.storage" />
+ <context:component-scan
+ base-package="org.apache.cloudstack.engine.subsystem.api.storage" />
<context:component-scan base-package="com.cloud.utils.db" />
<context:component-scan base-package="com.cloud.utils.component" />
<context:component-scan base-package="com.cloud.host.dao" />
<context:component-scan base-package="com.cloud.dc.dao" />
-
- <context:component-scan base-package=" com.cloud.upgrade.dao" />
- <tx:annotation-driven transaction-manager="transactionManager" />
- <bean class="org.cloudstack.storage.volume.test.TestConfiguration" />
+
+ <context:component-scan base-package=" com.cloud.upgrade.dao" />
+ <tx:annotation-driven transaction-manager="transactionManager" />
+ <bean class="org.apache.cloudstack.storage.volume.test.TestConfiguration" />
+ <aop:config proxy-target-class="true">
+ <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
+ <aop:pointcut id="captureAnyMethod" expression="@annotation(com.cloud.utils.db.DB)" />
+ <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod" />
+ </aop:aspect>
+ </aop:config>
+
+ <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
+
</beans>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/cdf55116/setup/db/4.1-new-db-schema.sql
----------------------------------------------------------------------
diff --git a/setup/db/4.1-new-db-schema.sql b/setup/db/4.1-new-db-schema.sql
index 7be4b09..a39cedc 100644
--- a/setup/db/4.1-new-db-schema.sql
+++ b/setup/db/4.1-new-db-schema.sql
@@ -17,6 +17,7 @@
alter table vm_template add image_data_store_id bigint unsigned;
alter table storage_pool add storage_provider_id bigint unsigned;
+alter table storage_pool add configurator_key varchar(255);
alter table storage_pool modify id bigint unsigned AUTO_INCREMENT UNIQUE NOT NULL;
alter table volumes add disk_type varchar(255);
alter table volumes drop foreign key `fk_volumes__account_id`;