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/24 11:38:14 UTC
[1/2] git commit: so many traps in rpc call: you can't use aop in a
thread, you need to intercept finalize call etc
Updated Branches:
refs/heads/javelin 4b2d9f441 -> d99161399
so many traps in rpc call: you can't use aop in a thread, you need to intercept finalize call etc
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/d9916139
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/d9916139
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/d9916139
Branch: refs/heads/javelin
Commit: d99161399e47529656a3622f837adef037587d27
Parents: 4b2d9f4
Author: Edison Su <ed...@citrix.com>
Authored: Mon Dec 24 02:37:32 2012 -0800
Committer: Edison Su <ed...@citrix.com>
Committed: Mon Dec 24 02:37:32 2012 -0800
----------------------------------------------------------------------
.../api/storage/PrimaryDataStoreInfo.java | 1 +
.../storage/test/ChildTestConfiguration.java | 2 +-
.../storage/test/CloudStackTestNGBase.java | 24 +++-
...ockHostEndpointRpcServerDirectCallResource.java | 30 +---
.../cloudstack/storage/test/MockRpcCallBack.java | 46 ++++++
.../cloudstack/storage/test/volumeServiceTest.java | 123 ++++++++------
.../integration-test/test/resource/testng.xml | 2 +-
.../storage/command/AttachPrimaryDataStoreCmd.java | 5 +-
.../storage/command/CreatePrimaryDataStoreCmd.java | 1 +
.../storage/datastore/PrimaryDataStore.java | 6 +
.../datastore/protocol/DataStoreProtocol.java | 16 ++
.../storage/to/ImageOnPrimayDataStoreTO.java | 2 +-
.../storage/to/NfsPrimaryDataStoreTO.java | 28 ++++
.../cloudstack/storage/to/PrimaryDataStoreTO.java | 6 +
.../storage/datastore/DataStoreStatus.java | 2 +-
.../storage/datastore/DefaultPrimaryDataStore.java | 45 ++++--
.../AbstractPrimaryDataStoreConfigurator.java | 17 +--
.../configurator/PrimaryDataStoreConfigurator.java | 4 +-
.../configurator/kvm/KvmCLVMConfigurator.java | 10 +-
.../configurator/kvm/KvmNfsConfigurator.java | 20 ++-
.../configurator/kvm/KvmRBDConfigurator.java | 11 +-
.../configurator/validator/CLVMValidator.java | 22 +++-
.../validator/FileSystemValidator.java | 22 +++-
.../configurator/validator/ISCSIValiator.java | 23 +++-
.../validator/NfsProtocolTransformer.java | 95 +++++++++++
.../configurator/validator/NfsValidator.java | 68 --------
.../configurator/validator/ProtocolValidator.java | 27 ---
.../configurator/validator/RBDValidator.java | 21 +++-
.../validator/StorageProtocolTransformer.java | 34 ++++
.../configurator/validator/VMFSValidator.java | 21 +++-
.../vmware/VmwareIsciConfigurator.java | 11 +-
.../configurator/vmware/VmwareNfsConfigurator.java | 19 ++-
.../vmware/VmwareVMFSConfigurator.java | 10 +-
.../configurator/xen/AbstractXenConfigurator.java | 24 ---
.../configurator/xen/XenIscsiConfigurator.java | 9 +-
.../configurator/xen/XenNfsConfigurator.java | 20 ++-
.../driver/DefaultPrimaryDataStoreDriverImpl.java | 2 +-
.../DefaultPrimaryDataStoreLifeCycleImpl.java | 13 +-
.../DefaultXenPrimaryDataStoreLifeCycle.java | 10 +-
.../DefaultPrimaryDatastoreProviderImpl.java | 28 +---
.../volume/TemplateOnPrimaryDataStoreObject.java | 4 +
.../storage/volume/VolumeServiceImpl.java | 2 -
.../framework/async/AsyncCallbackDispatcher.java | 37 ++++-
.../xen/resource/CitrixResourceBase.java | 3 +
.../xen/resource/XenServerStorageResource.java | 56 ++++---
45 files changed, 657 insertions(+), 325 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
index c818522..11bc26b 100644
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
@@ -41,4 +41,5 @@ public interface PrimaryDataStoreInfo {
public String getType();
public PrimaryDataStoreLifeCycle getLifeCycle();
PrimaryDataStoreProvider getProvider();
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
index 27a8513..69907bc 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
@@ -24,7 +24,7 @@ public class ChildTestConfiguration extends TestConfiguration {
@Bean
public HostEndpointRpcServer rpcServer() {
- return new MockHypervsiorHostEndPointRpcServer();
+ return new MockHostEndpointRpcServerDirectCallResource();
}
/* @Override
@Bean
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/CloudStackTestNGBase.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/CloudStackTestNGBase.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/CloudStackTestNGBase.java
index 94ae208..5bc7c0d 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/CloudStackTestNGBase.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/CloudStackTestNGBase.java
@@ -6,6 +6,7 @@ import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
+import org.testng.annotations.Test;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.Transaction;
@@ -17,13 +18,23 @@ public class CloudStackTestNGBase extends AbstractTestNGSpringContextTests {
private String hostGuid;
private String templateUrl;
private String localStorageUuid;
+ private String primaryStorageUrl;
private Transaction txn;
+ protected void injectMockito() {
+
+ }
+
@BeforeMethod(alwaysRun = true)
protected void injectDB(Method testMethod) throws Exception {
txn = Transaction.open(testMethod.getName());
}
+ @Test
+ protected void injectMockitoTest() {
+ injectMockito();
+ }
+
@AfterMethod(alwaysRun = true)
protected void closeDB(Method testMethod) throws Exception {
if (txn != null) {
@@ -32,14 +43,19 @@ public class CloudStackTestNGBase extends AbstractTestNGSpringContextTests {
}
@BeforeMethod(alwaysRun = true)
- @Parameters({"devcloud-host-uuid", "devcloud-host-gateway", "devcloud-host-cidr", "devcloud-host-ip", "template-url", "devcloud-local-storage-uuid"})
- protected void setup(String hostuuid, String gateway, String cidr, String hostIp, String templateUrl, String localStorageUuid) {
+ @Parameters({"devcloud-host-uuid", "devcloud-host-gateway", "devcloud-host-cidr",
+ "devcloud-host-ip", "template-url", "devcloud-local-storage-uuid",
+ "primary-storage-want-to-add"})
+ protected void setup(String hostuuid, String gateway, String cidr,
+ String hostIp, String templateUrl, String localStorageUuid,
+ String primaryStorage) {
this.hostGuid = hostuuid;
this.hostGateway = gateway;
this.hostCidr = cidr;
this.hostIp = hostIp;
this.templateUrl = templateUrl;
this.localStorageUuid = localStorageUuid;
+ this.primaryStorageUrl = primaryStorage;
}
protected String getHostGuid() {
@@ -65,4 +81,8 @@ public class CloudStackTestNGBase extends AbstractTestNGSpringContextTests {
protected String getLocalStorageUuid() {
return this.localStorageUuid;
}
+
+ protected String getPrimaryStorageUrl() {
+ return this.primaryStorageUrl;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockHostEndpointRpcServerDirectCallResource.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockHostEndpointRpcServerDirectCallResource.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockHostEndpointRpcServerDirectCallResource.java
index f2272ce..a9700ca 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockHostEndpointRpcServerDirectCallResource.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockHostEndpointRpcServerDirectCallResource.java
@@ -37,6 +37,9 @@ import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.exception.AgentUnavailableException;
import com.cloud.exception.OperationTimedoutException;
+import com.cloud.utils.component.ComponentInject;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.Transaction;
public class MockHostEndpointRpcServerDirectCallResource implements HostEndpointRpcServer {
@@ -47,29 +50,14 @@ public class MockHostEndpointRpcServerDirectCallResource implements HostEndpoint
public MockHostEndpointRpcServerDirectCallResource() {
executor = Executors.newScheduledThreadPool(10);
}
- protected class MockRpcCallBack implements Runnable {
- private final Command cmd;
- private final long hostId;
- private final AsyncCompletionCallback<Answer> callback;
- public MockRpcCallBack(long hostId, Command cmd, final AsyncCompletionCallback<Answer> callback) {
- this.cmd = cmd;
- this.callback = callback;
- this.hostId = hostId;
- }
- @Override
- public void run() {
- try {
- Answer answer = agentMgr.send(hostId, cmd);
- callback.complete(answer);
- } catch (Exception e) {
- s_logger.debug("send command failed:" + e.toString());
- }
- }
-
- }
public void sendCommandAsync(HypervisorHostEndPoint host, final Command command, final AsyncCompletionCallback<Answer> callback) {
- executor.schedule(new MockRpcCallBack(host.getHostId(), command, callback), 10, TimeUnit.SECONDS);
+ // new MockRpcCallBack(host.getHostId(), command, callback);
+ MockRpcCallBack run = ComponentInject.inject(MockRpcCallBack.class);
+ run.setCallback(callback);
+ run.setCmd(command);
+ run.setHostId(host.getHostId());
+ executor.schedule(run, 10, TimeUnit.SECONDS);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockRpcCallBack.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockRpcCallBack.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockRpcCallBack.java
new file mode 100644
index 0000000..294cb1e
--- /dev/null
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockRpcCallBack.java
@@ -0,0 +1,46 @@
+package org.apache.cloudstack.storage.test;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.Command;
+import com.cloud.utils.db.DB;
+import com.cloud.utils.db.Transaction;
+
+public class MockRpcCallBack implements Runnable {
+ @Inject
+ AgentManager agentMgr;
+ private Command cmd;
+ private long hostId;
+ private AsyncCompletionCallback<Answer> callback;
+
+ public void setCmd(Command cmd) {
+ this.cmd = cmd;
+ }
+
+ public void setHostId(long hostId) {
+ this.hostId = hostId;
+ }
+
+ public void setCallback(AsyncCompletionCallback<Answer> callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ @DB
+ public void run() {
+ try {
+ Answer answer = agentMgr.send(hostId, cmd);
+
+ callback.complete(answer);
+ } catch (Throwable e) {
+ //s_logger.debug("send command failed:" + e.toString());
+ } finally {
+ int i =1;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
index cd251b1..7451f36 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
@@ -18,8 +18,9 @@
*/
package org.apache.cloudstack.storage.test;
-import static org.junit.Assert.*;
-
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeMethod;
+import org.testng.AssertJUnit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
@@ -51,7 +52,6 @@ import org.apache.cloudstack.storage.command.CreateVolumeFromBaseImageCommand;
import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
-import org.apache.cloudstack.storage.datastore.provider.DefaultPrimaryDatastoreProviderImpl;
import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProviderManager;
import org.apache.cloudstack.storage.image.ImageService;
import org.apache.cloudstack.storage.image.db.ImageDataDao;
@@ -68,14 +68,7 @@ import org.apache.cloudstack.storage.image.store.lifecycle.ImageDataStoreLifeCyc
import org.apache.cloudstack.storage.volume.VolumeService;
import org.apache.cloudstack.storage.volume.db.VolumeDao;
import org.apache.cloudstack.storage.volume.db.VolumeVO;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import org.junit.runner.RunWith;
-
import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.mockito.Mockito;
import org.mockito.Mockito.*;
@@ -100,13 +93,9 @@ import com.cloud.org.Cluster.ClusterType;
import com.cloud.org.Managed.ManagedState;
import com.cloud.resource.ResourceState;
import com.cloud.storage.Storage.TemplateType;
-import com.cloud.utils.component.ComponentInject;
-import com.cloud.utils.db.DB;
-import com.cloud.utils.db.Transaction;
-@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:/storageContext.xml")
-public class volumeServiceTest {
+public class volumeServiceTest extends CloudStackTestNGBase {
@Inject
ImageDataStoreProviderManager imageProviderMgr;
@Inject
@@ -134,8 +123,19 @@ public class volumeServiceTest {
Long dcId;
Long clusterId;
Long podId;
- @Before
+ HostVO host;
+ String primaryName = "my primary data store";
+
+ @Test(priority = -1)
public void setUp() {
+
+ host = hostDao.findByGuid(this.getHostGuid());
+ if (host != null) {
+ dcId = host.getDataCenterId();
+ clusterId = host.getClusterId();
+ podId = host.getPodId();
+ return;
+ }
//create data center
DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24",
null, null, NetworkType.Basic, null, null, true, true);
@@ -143,7 +143,7 @@ public class volumeServiceTest {
dcId = dc.getId();
//create pod
- HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), dc.getId(), "192.168.56.1", "192.168.56.0/24", 8, "test");
+ HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), dc.getId(), this.getHostGateway(), this.getHostCidr(), 8, "test");
pod = podDao.persist(pod);
podId = pod.getId();
//create xen cluster
@@ -155,23 +155,23 @@ public class volumeServiceTest {
clusterId = cluster.getId();
//create xen host
- HostVO host = new HostVO(UUID.randomUUID().toString());
+ host = new HostVO(this.getHostGuid());
host.setName("devcloud xen host");
host.setType(Host.Type.Routing);
- host.setPrivateIpAddress("192.168.56.2");
+ host.setPrivateIpAddress(this.getHostIp());
host.setDataCenterId(dc.getId());
host.setVersion("6.0.1");
host.setAvailable(true);
host.setSetup(true);
+ host.setPodId(podId);
host.setLastPinged(0);
host.setResourceState(ResourceState.Enabled);
+ host.setHypervisorType(HypervisorType.XenServer);
host.setClusterId(cluster.getId());
host = hostDao.persist(host);
- List<HostVO> results = new ArrayList<HostVO>();
- results.add(host);
- Mockito.when(hostDao.listAll()).thenReturn(results);
- Mockito.when(hostDao.findHypervisorHostInCluster(Mockito.anyLong())).thenReturn(results);
+
+
//CreateVolumeAnswer createVolumeFromImageAnswer = new CreateVolumeAnswer(UUID.randomUUID().toString());
/*try {
@@ -187,11 +187,22 @@ public class volumeServiceTest {
//Mockito.when(primaryStoreDao.findById(Mockito.anyLong())).thenReturn(primaryStore);
}
+
+ @Override
+ protected void injectMockito() {
+ if (host == null) {
+ return;
+ }
+ List<HostVO> results = new ArrayList<HostVO>();
+ results.add(host);
+ Mockito.when(hostDao.listAll()).thenReturn(results);
+ Mockito.when(hostDao.findHypervisorHostInCluster(Mockito.anyLong())).thenReturn(results);
+ }
private ImageDataVO createImageData() {
ImageDataVO image = new ImageDataVO();
image.setTemplateType(TemplateType.USER);
- image.setUrl("http://testurl/test.vhd");
+ image.setUrl(this.getTemplateUrl());
image.setUniqueName(UUID.randomUUID().toString());
image.setName(UUID.randomUUID().toString());
image.setPublicTemplate(true);
@@ -226,21 +237,29 @@ public class volumeServiceTest {
}
}
- @Test
public void createTemplateTest() {
createTemplate();
}
private PrimaryDataStoreInfo createPrimaryDataStore() {
try {
- primaryDataStoreProviderMgr.configure("primary data store mgr", new HashMap<String, Object>());
- PrimaryDataStoreProvider provider = primaryDataStoreProviderMgr.getDataStoreProvider("default primary data store provider");
-
+ PrimaryDataStoreProvider provider = primaryDataStoreProviderMgr.getDataStoreProvider("default primary data store provider");
+ primaryDataStoreProviderMgr.configure("primary data store mgr", new HashMap<String, Object>());
+
+ List<PrimaryDataStoreVO> ds = primaryStoreDao.findPoolByName(this.primaryName);
+ if (ds.size() >= 1) {
+ PrimaryDataStoreVO store = ds.get(0);
+ if (store.getRemoved() == null) {
+ return provider.getDataStore(store.getId());
+ }
+ }
+
+
Map<String, String> params = new HashMap<String, String>();
- params.put("url", "nfs://localhost/primarynfs");
+ params.put("url", this.getPrimaryStorageUrl());
params.put("dcId", dcId.toString());
params.put("clusterId", clusterId.toString());
- params.put("name", "my primary data store");
+ params.put("name", this.primaryName);
PrimaryDataStoreInfo primaryDataStoreInfo = provider.registerDataStore(params);
PrimaryDataStoreLifeCycle lc = primaryDataStoreInfo.getLifeCycle();
ClusterScope scope = new ClusterScope(clusterId, podId, dcId);
@@ -251,11 +270,6 @@ public class volumeServiceTest {
}
}
- @Test
- public void createPrimaryDataStoreTest() {
- createPrimaryDataStore();
- }
-
private VolumeVO createVolume(long templateId) {
VolumeVO volume = new VolumeVO(1000, new RootDisk().toString(), UUID.randomUUID().toString(), templateId);
volume = volumeDao.persist(volume);
@@ -263,7 +277,7 @@ public class volumeServiceTest {
}
- @Test
+ @Test(priority=2)
public void createVolumeFromTemplate() {
TemplateEntity te = createTemplate();
PrimaryDataStoreInfo dataStoreInfo = createPrimaryDataStore();
@@ -271,37 +285,40 @@ public class volumeServiceTest {
VolumeEntity ve = volumeService.getVolumeEntity(volume.getId());
ve.createVolumeFromTemplate(dataStoreInfo.getId(), new VHD(), te);
}
+
+ @Test(priority=3)
+ public void tearDown() {
+ List<PrimaryDataStoreVO> ds = primaryStoreDao.findPoolByName(this.primaryName);
+ for (int i = 0; i < ds.size(); i++) {
+ PrimaryDataStoreVO store = ds.get(i);
+ store.setUuid(null);
+ primaryStoreDao.remove(ds.get(i).getId());
+ primaryStoreDao.expunge(ds.get(i).getId());
+ }
+ }
//@Test
- public void test1() {
+ @Test
+ public void test1() {
System.out.println(VolumeTypeHelper.getType("Root"));
System.out.println(VolumeDiskTypeHelper.getDiskType("vmdk"));
System.out.println(ImageFormatHelper.getFormat("ova"));
- assertFalse(new VMDK().equals(new VHD()));
+ AssertJUnit.assertFalse(new VMDK().equals(new VHD()));
VMDK vmdk = new VMDK();
- assertTrue(vmdk.equals(vmdk));
+ AssertJUnit.assertTrue(vmdk.equals(vmdk));
VMDK newvmdk = new VMDK();
- assertTrue(vmdk.equals(newvmdk));
+ AssertJUnit.assertTrue(vmdk.equals(newvmdk));
ImageFormat ova = new OVA();
ImageFormat iso = new ISO();
- assertTrue(ova.equals(new OVA()));
- assertFalse(ova.equals(iso));
- assertTrue(ImageFormatHelper.getFormat("test").equals(new Unknown()));
+ AssertJUnit.assertTrue(ova.equals(new OVA()));
+ AssertJUnit.assertFalse(ova.equals(iso));
+ AssertJUnit.assertTrue(ImageFormatHelper.getFormat("test").equals(new Unknown()));
VolumeDiskType qcow2 = new QCOW2();
ImageFormat qcow2format = new org.apache.cloudstack.storage.image.format.QCOW2();
- assertFalse(qcow2.equals(qcow2format));
-
- }
-
- //@Test
- public void testStaticBean() {
- DefaultPrimaryDatastoreProviderImpl provider = ComponentInject.inject(DefaultPrimaryDatastoreProviderImpl.class);
- //assertNotNull(provider.dataStoreDao);
+ AssertJUnit.assertFalse(qcow2.equals(qcow2format));
- DefaultPrimaryDataStore dpdsi = DefaultPrimaryDataStore.createDataStore(null);
- //assertNotNull(dpdsi.volumeDao);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/integration-test/test/resource/testng.xml
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/resource/testng.xml b/engine/storage/integration-test/test/resource/testng.xml
index b2531d1..186c542 100644
--- a/engine/storage/integration-test/test/resource/testng.xml
+++ b/engine/storage/integration-test/test/resource/testng.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
-<suite thread-count="1" verbose="1" name="storage test" annotations="JDK" parallel="methods">
+<suite thread-count="1" verbose="1" name="storage test" annotations="JDK" parallel="classes">
<!--describe your test environment-->
<parameter name="devcloud-host-ip" value="192.168.56.2"/>
<parameter name="devcloud-host-gateway" value="192.168.56.1"/>
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/src/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreCmd.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreCmd.java b/engine/storage/src/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreCmd.java
index 53400a3..b0b3299 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreCmd.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/command/AttachPrimaryDataStoreCmd.java
@@ -18,15 +18,14 @@
*/
package org.apache.cloudstack.storage.command;
-import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
import com.cloud.agent.api.Command;
public class AttachPrimaryDataStoreCmd extends Command implements StorageSubSystemCommand {
private final PrimaryDataStoreTO dataStore;
- public AttachPrimaryDataStoreCmd(PrimaryDataStoreInfo dataStore) {
- this.dataStore = new PrimaryDataStoreTO(dataStore);
+ public AttachPrimaryDataStoreCmd(PrimaryDataStoreTO dataStore) {
+ this.dataStore = dataStore;
}
public PrimaryDataStoreTO getDataStore() {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/src/org/apache/cloudstack/storage/command/CreatePrimaryDataStoreCmd.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/command/CreatePrimaryDataStoreCmd.java b/engine/storage/src/org/apache/cloudstack/storage/command/CreatePrimaryDataStoreCmd.java
index db5c019..5a64e33 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/command/CreatePrimaryDataStoreCmd.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/command/CreatePrimaryDataStoreCmd.java
@@ -1,5 +1,6 @@
package org.apache.cloudstack.storage.command;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
import com.cloud.agent.api.Command;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
index 9005bc0..a945e28 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
@@ -27,6 +27,8 @@ import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.storage.EndPoint;
import org.apache.cloudstack.storage.command.CommandResult;
import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
public interface PrimaryDataStore extends PrimaryDataStoreInfo {
@@ -53,4 +55,8 @@ public interface PrimaryDataStore extends PrimaryDataStoreInfo {
boolean installTemplate(TemplateOnPrimaryDataStoreInfo template);
VolumeDiskType getDefaultDiskType();
+
+ PrimaryDataStoreTO getDataStoreTO();
+
+ VolumeTO getVolumeTO(VolumeInfo volume);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/src/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java
new file mode 100644
index 0000000..54518ae
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java
@@ -0,0 +1,16 @@
+package org.apache.cloudstack.storage.datastore.protocol;
+
+public enum DataStoreProtocol {
+ NFS("nfs"),
+ ISCSI("iscsi");
+
+ private String name;
+ DataStoreProtocol(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return this.name;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/src/org/apache/cloudstack/storage/to/ImageOnPrimayDataStoreTO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/ImageOnPrimayDataStoreTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/ImageOnPrimayDataStoreTO.java
index 4c040f4..f7c2322 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/to/ImageOnPrimayDataStoreTO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/ImageOnPrimayDataStoreTO.java
@@ -26,7 +26,7 @@ public class ImageOnPrimayDataStoreTO {
private final TemplateTO template;
public ImageOnPrimayDataStoreTO(TemplateOnPrimaryDataStoreInfo template) {
this.pathOnPrimaryDataStore = template.getPath();
- this.dataStore = new PrimaryDataStoreTO(template.getPrimaryDataStore());
+ this.dataStore = template.getPrimaryDataStore().getDataStoreTO();
this.template = new TemplateTO(template.getTemplate());
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/src/org/apache/cloudstack/storage/to/NfsPrimaryDataStoreTO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/NfsPrimaryDataStoreTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/NfsPrimaryDataStoreTO.java
new file mode 100644
index 0000000..06ff16b
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/NfsPrimaryDataStoreTO.java
@@ -0,0 +1,28 @@
+package org.apache.cloudstack.storage.to;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+
+public class NfsPrimaryDataStoreTO extends PrimaryDataStoreTO {
+ private String server;
+ private String path;
+
+ public NfsPrimaryDataStoreTO(PrimaryDataStoreInfo dataStore) {
+ super(dataStore);
+ }
+
+ public void setServer(String server) {
+ this.server = server;
+ }
+
+ public String getServer() {
+ return this.server;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public String getPath() {
+ return this.path;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
index 7708621..13d51ac 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
@@ -6,10 +6,16 @@ public class PrimaryDataStoreTO {
private final String uuid;
private final String name;
private final String type;
+ private final long id;
public PrimaryDataStoreTO(PrimaryDataStoreInfo dataStore) {
this.uuid = dataStore.getUuid();
this.name = dataStore.getName();
this.type = dataStore.getType();
+ this.id = dataStore.getId();
+ }
+
+ public long getId() {
+ return this.id;
}
public String getUuid() {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
index a40f6cf..23551e4 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
@@ -19,5 +19,5 @@
package org.apache.cloudstack.storage.datastore;
public enum DataStoreStatus {
- Initial, Initialized, Creating, Up, PrepareForMaintenance, ErrorInMaintenance, CancelMaintenance, Maintenance, Removed;
+ Initial, Initialized, Creating, Attaching, Up, PrepareForMaintenance, ErrorInMaintenance, CancelMaintenance, Maintenance, Removed;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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 a3d1038..347817d 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
@@ -15,9 +15,13 @@ import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.storage.EndPoint;
import org.apache.cloudstack.storage.HypervisorHostEndPoint;
import org.apache.cloudstack.storage.command.CommandResult;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
+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 org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
import org.apache.cloudstack.storage.volume.TemplatePrimaryDataStoreManager;
import org.apache.cloudstack.storage.volume.VolumeObject;
@@ -36,18 +40,20 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
private static final Logger s_logger = Logger.getLogger(DefaultPrimaryDataStore.class);
protected PrimaryDataStoreDriver driver;
protected PrimaryDataStoreVO pdsv;
- protected PrimaryDataStoreInfo pdsInfo;
protected PrimaryDataStoreLifeCycle lifeCycle;
protected PrimaryDataStoreProvider provider;
+ protected StorageProtocolTransformer protocalTransformer;
private HypervisorType supportedHypervisor;
private boolean isLocalStorageSupported = false;
@Inject
private VolumeDao volumeDao;
@Inject
- HostDao hostDao;
+ private HostDao hostDao;
@Inject
- TemplatePrimaryDataStoreManager templatePrimaryStoreMgr;
-
+ private PrimaryDataStoreDao dataStoreDao;
+ @Inject
+ private TemplatePrimaryDataStoreManager templatePrimaryStoreMgr;
+
private DefaultPrimaryDataStore(PrimaryDataStoreVO pdsv) {
this.pdsv = pdsv;
}
@@ -66,6 +72,20 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
this.provider = provider;
}
+ public void setProtocolTransFormer(StorageProtocolTransformer transformer) {
+ this.protocalTransformer = transformer;
+ }
+
+ @Override
+ public PrimaryDataStoreTO getDataStoreTO() {
+ return this.protocalTransformer.getDataStoreTO(this);
+ }
+
+ @Override
+ public VolumeTO getVolumeTO(VolumeInfo volume) {
+ return this.protocalTransformer.getVolumeTO(volume);
+ }
+
public static DefaultPrimaryDataStore createDataStore(PrimaryDataStoreVO pdsv) {
DefaultPrimaryDataStore dataStore = new DefaultPrimaryDataStore(pdsv);
return ComponentInject.inject(dataStore);
@@ -97,8 +117,13 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
public List<EndPoint> getEndPoints() {
Long clusterId = pdsv.getClusterId();
if (clusterId == null) {
- return null;
+ pdsv = dataStoreDao.findById(pdsv.getId());
+ clusterId = pdsv.getClusterId();
+ if (clusterId == null) {
+ return new ArrayList<EndPoint>();
+ }
}
+
List<EndPoint> endpoints = new ArrayList<EndPoint>();
List<HostVO> hosts = hostDao.findHypervisorHostInCluster(clusterId);
for (HostVO host : hosts) {
@@ -206,26 +231,22 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
@Override
public String getUuid() {
- // TODO Auto-generated method stub
- return null;
+ return this.pdsv.getUuid();
}
@Override
public DataCenterResourceEntity.State getManagedState() {
- // TODO Auto-generated method stub
return null;
}
@Override
public String getName() {
- // TODO Auto-generated method stub
- return null;
+ return this.pdsv.getName();
}
@Override
public String getType() {
- // TODO Auto-generated method stub
- return null;
+ return this.pdsv.getPoolType();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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
index 1ffe9e6..db1fbde 100644
--- 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
@@ -12,19 +12,13 @@ import com.cloud.utils.exception.CloudRuntimeException;
public abstract class AbstractPrimaryDataStoreConfigurator implements PrimaryDataStoreConfigurator {
@Inject
- PrimaryDataStoreDao dataStoreDao;
+ protected PrimaryDataStoreDao dataStoreDao;
- protected PrimaryDataStoreLifeCycle getLifeCycle() {
- return null;
- }
+ protected abstract PrimaryDataStoreLifeCycle getLifeCycle();
- protected PrimaryDataStoreDriver getDriver() {
- return null;
- }
+ protected abstract PrimaryDataStoreDriver getDriver();
- protected boolean isLocalStorageSupported() {
- return false;
- }
+ protected abstract boolean isLocalStorageSupported();
@Override
public PrimaryDataStore getDataStore(long dataStoreId) {
@@ -34,10 +28,11 @@ public abstract class AbstractPrimaryDataStoreConfigurator implements PrimaryDat
}
DefaultPrimaryDataStore dataStore = DefaultPrimaryDataStore.createDataStore(dataStoreVO);
- dataStore.setDriver(this.getDriver());
+ dataStore.setDriver(getDriver());
dataStore.setLifeCycle(getLifeCycle());
dataStore.setSupportedHypervisor(getSupportedHypervisor());
dataStore.setLocalStorageFlag(isLocalStorageSupported());
+ dataStore.setProtocolTransFormer(getProtocolTransformer());
return dataStore;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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 fa0b76a..e868b4e 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
@@ -19,7 +19,7 @@
package org.apache.cloudstack.storage.datastore.configurator;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.storage.Storage.StoragePoolType;
@@ -28,5 +28,5 @@ public interface PrimaryDataStoreConfigurator {
public HypervisorType getSupportedHypervisor();
public String getSupportedDataStoreType();
public PrimaryDataStore getDataStore(long dataStoreId);
- public ProtocolValidator getValidator();
+ public StorageProtocolTransformer getProtocolTransformer();
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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 8ca4df0..b5e9db3 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
@@ -19,7 +19,7 @@
package org.apache.cloudstack.storage.datastore.configurator.kvm;
import org.apache.cloudstack.storage.datastore.configurator.validator.CLVMValidator;
-import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@@ -33,9 +33,15 @@ public class KvmCLVMConfigurator extends AbstractKvmConfigurator {
}
@Override
- public ProtocolValidator getValidator() {
+ public StorageProtocolTransformer getProtocolTransformer() {
return new CLVMValidator();
}
+ @Override
+ protected boolean isLocalStorageSupported() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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 faed6cc..6897e54 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
@@ -18,22 +18,32 @@
*/
package org.apache.cloudstack.storage.datastore.configurator.kvm;
-import org.apache.cloudstack.storage.datastore.configurator.validator.NfsValidator;
-import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.NfsProtocolTransformer;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
+import com.cloud.utils.component.Inject;
+
@Component
@Qualifier("defaultProvider")
public class KvmNfsConfigurator extends AbstractKvmConfigurator {
-
+ @Inject
+ PrimaryDataStoreDao dataStoreDao;
@Override
public String getSupportedDataStoreType() {
return "nfs";
}
@Override
- public ProtocolValidator getValidator() {
- return new NfsValidator();
+ public StorageProtocolTransformer getProtocolTransformer() {
+ return new NfsProtocolTransformer(dataStoreDao);
+ }
+
+ @Override
+ protected boolean isLocalStorageSupported() {
+ // TODO Auto-generated method stub
+ return false;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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 cdbbb25..a644239 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
@@ -18,7 +18,7 @@
*/
package org.apache.cloudstack.storage.datastore.configurator.kvm;
-import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
import org.apache.cloudstack.storage.datastore.configurator.validator.RBDValidator;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@@ -29,13 +29,18 @@ import com.cloud.storage.Storage.StoragePoolType;
@Qualifier("defaultProvider")
public class KvmRBDConfigurator extends AbstractKvmConfigurator {
- @Override
public String getSupportedDataStoreType() {
return "rbd";
}
@Override
- public ProtocolValidator getValidator() {
+ public StorageProtocolTransformer getProtocolTransformer() {
return new RBDValidator();
}
+
+ @Override
+ protected boolean isLocalStorageSupported() {
+ // TODO Auto-generated method stub
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/CLVMValidator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/CLVMValidator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/CLVMValidator.java
index e26394d..ea25991 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/CLVMValidator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/CLVMValidator.java
@@ -21,10 +21,15 @@ package org.apache.cloudstack.storage.datastore.configurator.validator;
import java.util.List;
import java.util.Map;
-public class CLVMValidator implements ProtocolValidator {
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+
+public class CLVMValidator implements StorageProtocolTransformer {
@Override
- public boolean validate(Map<String, String> params) {
+ public boolean normalizeUserInput(Map<String, String> params) {
// TODO Auto-generated method stub
return false;
}
@@ -35,4 +40,17 @@ public class CLVMValidator implements ProtocolValidator {
return null;
}
+ @Override
+ public PrimaryDataStoreTO getDataStoreTO(PrimaryDataStoreInfo dataStore) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public VolumeTO getVolumeTO(VolumeInfo volume) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/FileSystemValidator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/FileSystemValidator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/FileSystemValidator.java
index 60532dc..8e1180e 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/FileSystemValidator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/FileSystemValidator.java
@@ -21,10 +21,15 @@ package org.apache.cloudstack.storage.datastore.configurator.validator;
import java.util.List;
import java.util.Map;
-public class FileSystemValidator implements ProtocolValidator {
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+
+public class FileSystemValidator implements StorageProtocolTransformer {
@Override
- public boolean validate(Map<String, String> params) {
+ public boolean normalizeUserInput(Map<String, String> params) {
// TODO Auto-generated method stub
return false;
}
@@ -35,4 +40,17 @@ public class FileSystemValidator implements ProtocolValidator {
return null;
}
+ @Override
+ public PrimaryDataStoreTO getDataStoreTO(PrimaryDataStoreInfo dataStore) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public VolumeTO getVolumeTO(VolumeInfo volume) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/ISCSIValiator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/ISCSIValiator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/ISCSIValiator.java
index 89ecc31..9e56058 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/ISCSIValiator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/ISCSIValiator.java
@@ -21,16 +21,33 @@ package org.apache.cloudstack.storage.datastore.configurator.validator;
import java.util.List;
import java.util.Map;
-public class ISCSIValiator implements ProtocolValidator {
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+
+public class ISCSIValiator implements StorageProtocolTransformer {
+
+ @Override
+ public List<String> getInputParamNames() {
+ // TODO Auto-generated method stub
+ return null;
+ }
@Override
- public boolean validate(Map<String, String> params) {
+ public boolean normalizeUserInput(Map<String, String> params) {
// TODO Auto-generated method stub
return false;
}
@Override
- public List<String> getInputParamNames() {
+ public PrimaryDataStoreTO getDataStoreTO(PrimaryDataStoreInfo dataStore) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public VolumeTO getVolumeTO(VolumeInfo volume) {
// TODO Auto-generated method stub
return null;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/NfsProtocolTransformer.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/NfsProtocolTransformer.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/NfsProtocolTransformer.java
new file mode 100644
index 0000000..f812ffb
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/NfsProtocolTransformer.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+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 java.util.UUID;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
+import org.apache.cloudstack.storage.to.NfsPrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+
+import com.cloud.utils.exception.CloudRuntimeException;
+
+public class NfsProtocolTransformer implements StorageProtocolTransformer {
+ private final PrimaryDataStoreDao dataStoreDao;
+
+ public NfsProtocolTransformer(PrimaryDataStoreDao dao) {
+ this.dataStoreDao = dao;
+ }
+
+ @Override
+ public boolean normalizeUserInput(Map<String, String> params) {
+ 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));
+ params.put("uuid", UUID.nameUUIDFromBytes((storageHost + hostPath).getBytes()).toString());
+ } catch (URISyntaxException e) {
+ throw new CloudRuntimeException("invalid url: " + e.toString());
+ }
+ return true;
+ }
+
+ @Override
+ public List<String> getInputParamNames() {
+ List<String> paramNames = new ArrayList<String>();
+ paramNames.add("server");
+ paramNames.add("path");
+ return paramNames;
+ }
+
+ @Override
+ public PrimaryDataStoreTO getDataStoreTO(PrimaryDataStoreInfo dataStore) {
+ NfsPrimaryDataStoreTO dataStoreTO = new NfsPrimaryDataStoreTO(dataStore);
+ PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(dataStore.getId());
+ dataStoreTO.setServer(dataStoreVO.getHostAddress());
+ dataStoreTO.setPath(dataStoreVO.getPath());
+ return dataStoreTO;
+ }
+
+ @Override
+ public VolumeTO getVolumeTO(VolumeInfo volume) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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
deleted file mode 100644
index 0da4174..0000000
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/NfsValidator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-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 java.util.UUID;
-
-import com.cloud.utils.exception.CloudRuntimeException;
-
-public class NfsValidator implements ProtocolValidator {
-
- @Override
- public boolean validate(Map<String, String> params) {
- 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));
- params.put("uuid", UUID.fromString(storageHost + hostPath).toString());
-
- } catch (URISyntaxException e) {
- throw new CloudRuntimeException("invalid url: " + e.toString());
- }
- return true;
- }
-
- @Override
- public List<String> getInputParamNames() {
- 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/d9916139/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/ProtocolValidator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/ProtocolValidator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/ProtocolValidator.java
deleted file mode 100644
index 2b1948b..0000000
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/ProtocolValidator.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.cloudstack.storage.datastore.configurator.validator;
-
-import java.util.List;
-import java.util.Map;
-
-public interface ProtocolValidator {
- public boolean validate(Map<String, String> params);
- public List<String> getInputParamNames();
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/RBDValidator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/RBDValidator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/RBDValidator.java
index fbcf451..e18c861 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/RBDValidator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/RBDValidator.java
@@ -21,10 +21,15 @@ package org.apache.cloudstack.storage.datastore.configurator.validator;
import java.util.List;
import java.util.Map;
-public class RBDValidator implements ProtocolValidator {
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+
+public class RBDValidator implements StorageProtocolTransformer {
@Override
- public boolean validate(Map<String, String> params) {
+ public boolean normalizeUserInput(Map<String, String> params) {
// TODO Auto-generated method stub
return false;
}
@@ -35,4 +40,16 @@ public class RBDValidator implements ProtocolValidator {
return null;
}
+ @Override
+ public PrimaryDataStoreTO getDataStoreTO(PrimaryDataStoreInfo dataStore) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public VolumeTO getVolumeTO(VolumeInfo volume) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/StorageProtocolTransformer.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/StorageProtocolTransformer.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/StorageProtocolTransformer.java
new file mode 100644
index 0000000..ab9a613
--- /dev/null
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/StorageProtocolTransformer.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.datastore.configurator.validator;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+
+public interface StorageProtocolTransformer {
+ public boolean normalizeUserInput(Map<String, String> params);
+ public PrimaryDataStoreTO getDataStoreTO(PrimaryDataStoreInfo dataStore);
+ public VolumeTO getVolumeTO(VolumeInfo volume);
+ public List<String> getInputParamNames();
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/VMFSValidator.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/VMFSValidator.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/VMFSValidator.java
index 439e047..a0ae1f8 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/VMFSValidator.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/configurator/validator/VMFSValidator.java
@@ -21,10 +21,15 @@ package org.apache.cloudstack.storage.datastore.configurator.validator;
import java.util.List;
import java.util.Map;
-public class VMFSValidator implements ProtocolValidator {
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+
+public class VMFSValidator implements StorageProtocolTransformer {
@Override
- public boolean validate(Map<String, String> params) {
+ public boolean normalizeUserInput(Map<String, String> params) {
// TODO Auto-generated method stub
return false;
}
@@ -35,4 +40,16 @@ public class VMFSValidator implements ProtocolValidator {
return null;
}
+ @Override
+ public PrimaryDataStoreTO getDataStoreTO(PrimaryDataStoreInfo dataStore) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public VolumeTO getVolumeTO(VolumeInfo volume) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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 55c82ca..2a47e03 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
@@ -19,7 +19,7 @@
package org.apache.cloudstack.storage.datastore.configurator.vmware;
import org.apache.cloudstack.storage.datastore.configurator.validator.ISCSIValiator;
-import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@@ -27,14 +27,19 @@ import org.springframework.stereotype.Component;
@Qualifier("defaultProvider")
public class VmwareIsciConfigurator extends AbstractVmwareConfigurator {
- @Override
public String getSupportedDataStoreType() {
return "iscsi";
}
@Override
- public ProtocolValidator getValidator() {
+ public StorageProtocolTransformer getProtocolTransformer() {
return new ISCSIValiator();
}
+
+ @Override
+ protected boolean isLocalStorageSupported() {
+ // TODO Auto-generated method stub
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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 23cabb1..c6afc13 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
@@ -18,24 +18,33 @@
*/
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.apache.cloudstack.storage.datastore.configurator.validator.NfsProtocolTransformer;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import com.cloud.storage.Storage.StoragePoolType;
+import com.cloud.utils.component.Inject;
@Component
@Qualifier("defaultProvider")
public class VmwareNfsConfigurator extends AbstractVmwareConfigurator {
-
+ @Inject
+ PrimaryDataStoreDao dataStoreDao;
@Override
public String getSupportedDataStoreType() {
return "nfs";
}
@Override
- public ProtocolValidator getValidator() {
- return new NfsValidator();
+ public StorageProtocolTransformer getProtocolTransformer() {
+ return new NfsProtocolTransformer(dataStoreDao);
+ }
+
+ @Override
+ protected boolean isLocalStorageSupported() {
+ // TODO Auto-generated method stub
+ return false;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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 ef0444c..fc8738c 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
@@ -18,7 +18,7 @@
*/
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.StorageProtocolTransformer;
import org.apache.cloudstack.storage.datastore.configurator.validator.VMFSValidator;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@@ -35,7 +35,13 @@ public class VmwareVMFSConfigurator extends AbstractVmwareConfigurator {
}
@Override
- public ProtocolValidator getValidator() {
+ public StorageProtocolTransformer getProtocolTransformer() {
return new VMFSValidator();
}
+
+ @Override
+ protected boolean isLocalStorageSupported() {
+ // TODO Auto-generated method stub
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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
index 9b0d153..b8efb48 100644
--- 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
@@ -1,25 +1,14 @@
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;
@@ -32,17 +21,4 @@ public abstract class AbstractXenConfigurator extends AbstractPrimaryDataStoreCo
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/d9916139/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 c9546a8..a447756 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
@@ -19,7 +19,7 @@
package org.apache.cloudstack.storage.datastore.configurator.xen;
import org.apache.cloudstack.storage.datastore.configurator.validator.ISCSIValiator;
-import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@@ -33,8 +33,13 @@ public class XenIscsiConfigurator extends AbstractXenConfigurator {
}
@Override
- public ProtocolValidator getValidator() {
+ public StorageProtocolTransformer getProtocolTransformer() {
return new ISCSIValiator();
}
+ protected boolean isLocalStorageSupported() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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 8fb7e88..6ad4b53 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,24 +18,32 @@
*/
package org.apache.cloudstack.storage.datastore.configurator.xen;
-import org.apache.cloudstack.storage.datastore.configurator.validator.NfsValidator;
-import org.apache.cloudstack.storage.datastore.configurator.validator.ProtocolValidator;
+import org.apache.cloudstack.storage.datastore.configurator.validator.NfsProtocolTransformer;
+import org.apache.cloudstack.storage.datastore.configurator.validator.StorageProtocolTransformer;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.protocol.DataStoreProtocol;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import com.cloud.storage.Storage.StoragePoolType;
+import com.cloud.utils.component.Inject;
@Component
@Qualifier("defaultProvider")
public class XenNfsConfigurator extends AbstractXenConfigurator {
-
@Override
public String getSupportedDataStoreType() {
- return "nfs";
+ return DataStoreProtocol.NFS.toString();
}
@Override
- public ProtocolValidator getValidator() {
- return new NfsValidator();
+ public StorageProtocolTransformer getProtocolTransformer() {
+ return new NfsProtocolTransformer(dataStoreDao);
}
+
+ @Override
+ protected boolean isLocalStorageSupported() {
+ // TODO Auto-generated method stub
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
index 1a09266..012d006 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
@@ -47,7 +47,7 @@ public class DefaultPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver
// which can access its datastore
List<EndPoint> endPoints = vol.getDataStore().getEndPoints();
VolumeInfo volInfo = vol;
- CreateVolumeCommand createCmd = new CreateVolumeCommand(new VolumeTO(volInfo));
+ CreateVolumeCommand createCmd = new CreateVolumeCommand(this.dataStore.getVolumeTO(volInfo));
Answer answer = sendOutCommand(createCmd, endPoints);
CreateVolumeAnswer volAnswer = (CreateVolumeAnswer) answer;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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 3826414..658d4db 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
@@ -52,8 +52,8 @@ public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLif
}
protected void attachCluster() {
- //send down createStoragePool command to all the hosts in the cluster
- AttachPrimaryDataStoreCmd cmd = new AttachPrimaryDataStoreCmd(this.dataStore);
+ //send down AttachPrimaryDataStoreCmd command to all the hosts in the cluster
+ AttachPrimaryDataStoreCmd cmd = new AttachPrimaryDataStoreCmd(this.dataStore.getDataStoreTO());
for (EndPoint ep : dataStore.getEndPoints()) {
ep.sendMessage(cmd);
}
@@ -61,14 +61,19 @@ public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLif
@Override
public boolean attachCluster(ClusterScope scope) {
- attachCluster();
-
PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(this.dataStore.getId());
dataStoreVO.setDataCenterId(scope.getZoneId());
dataStoreVO.setPodId(scope.getPodId());
dataStoreVO.setClusterId(scope.getScopeId());
+ dataStoreVO.setStatus(DataStoreStatus.Attaching);
+ dataStoreDao.update(dataStoreVO.getId(), dataStoreVO);
+
+ attachCluster();
+
+ dataStoreVO = dataStoreDao.findById(this.dataStore.getId());
dataStoreVO.setStatus(DataStoreStatus.Up);
dataStoreDao.update(dataStoreVO.getId(), dataStoreVO);
+
return true;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d9916139/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 d689258..bb255b0 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
@@ -20,6 +20,7 @@ package org.apache.cloudstack.storage.datastore.lifecycle;
import org.apache.cloudstack.storage.EndPoint;
import org.apache.cloudstack.storage.command.AttachPrimaryDataStoreCmd;
+import org.apache.cloudstack.storage.command.CreatePrimaryDataStoreCmd;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import com.cloud.agent.api.Answer;
@@ -39,7 +40,7 @@ public class DefaultXenPrimaryDataStoreLifeCycle extends DefaultPrimaryDataStore
@Override
public void attachCluster() {
//send one time is enough, as xenserver is clustered
- AttachPrimaryDataStoreCmd cmd = new AttachPrimaryDataStoreCmd(this.dataStore);
+ CreatePrimaryDataStoreCmd cmd = new CreatePrimaryDataStoreCmd(this.dataStore.getDataStoreTO());
String result = null;
for (EndPoint ep : dataStore.getEndPoints()) {
Answer answer = ep.sendMessage(cmd);
@@ -49,8 +50,9 @@ public class DefaultXenPrimaryDataStoreLifeCycle extends DefaultPrimaryDataStore
result = answer.getDetails();
}
- throw new CloudRuntimeException("AttachPrimaryDataStoreCmd failed: " + result);
+ if (result != null)
+ throw new CloudRuntimeException("AttachPrimaryDataStoreCmd failed: " + result);
+
+ super.attachCluster();
}
-
-
}