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/10/29 17:32:47 UTC
git commit: add more classes
Updated Branches:
refs/heads/javelin fff6fde82 -> 0debd8a39
add more classes
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/0debd8a3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/0debd8a3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/0debd8a3
Branch: refs/heads/javelin
Commit: 0debd8a393b6173dfe88cb80cd672e723072ee73
Parents: fff6fde
Author: Edison Su <ed...@citrix.com>
Authored: Mon Oct 29 09:32:28 2012 -0700
Committer: Edison Su <ed...@citrix.com>
Committed: Mon Oct 29 09:32:28 2012 -0700
----------------------------------------------------------------------
.../org/apache/cloudstack/storage/EndPoint.java | 5 +
.../datastore/DefaultPrimaryDataStoreImpl.java | 63 +++++++++++++++
.../storage/datastore/PrimaryDataStore.java | 4 +
.../driver/DefaultPrimaryDataStoreDriverImpl.java | 35 ++++++++
.../datastore/driver/PrimaryDataStoreDriver.java | 11 +++
.../DefaultPrimaryDatastoreProviderImpl.java | 18 ++++
.../provider/PrimaryDataStoreProvider.java | 7 ++
.../provider/PrimaryDataStoreProviderManager.java | 5 +
.../apache/cloudstack/storage/volume/Volume.java | 19 ++++-
.../storage/volume/disktype/VolumeDiskType.java | 1 -
.../volume/disktype/VolumeDiskTypeBase.java | 15 +++-
.../cloudstack/storage/test/storageContext.xml | 1 +
.../cloudstack/storage/test/volumeServiceTest.java | 17 ++++
.../com/cloud/utils/component/ComponentInject.java | 20 +++++
14 files changed, 215 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/src/org/apache/cloudstack/storage/EndPoint.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/EndPoint.java b/platform/storage/src/org/apache/cloudstack/storage/EndPoint.java
new file mode 100644
index 0000000..8cb01a1
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/EndPoint.java
@@ -0,0 +1,5 @@
+package org.apache.cloudstack.storage;
+
+public interface EndPoint {
+ public String getEndPoint();
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java b/platform/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java
new file mode 100644
index 0000000..54f535b
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java
@@ -0,0 +1,63 @@
+package org.apache.cloudstack.storage.datastore;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
+import org.apache.cloudstack.storage.volume.Volume;
+import org.apache.cloudstack.storage.volume.db.VolumeDao;
+import org.apache.cloudstack.storage.volume.db.VolumeVO;
+import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType;
+
+public class DefaultPrimaryDataStoreImpl implements PrimaryDataStore {
+ protected PrimaryDataStoreDriver driver;
+ protected List<VolumeDiskType> supportedDiskTypes;
+ @Inject
+ VolumeDao volumeDao;
+ public DefaultPrimaryDataStoreImpl(PrimaryDataStoreDriver driver, List<VolumeDiskType> types) {
+ this.driver = driver;
+ this.supportedDiskTypes = types;
+ }
+
+ @Override
+ public Volume getVolume(long id) {
+ VolumeVO volumeVO = volumeDao.findById(id);
+ Volume vol = new Volume(this, volumeVO);
+ return vol;
+ }
+
+ @Override
+ public List<Volume> getVolumes() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean deleteVolume(long id) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public Volume createVolume(long id, VolumeDiskType diskType) {
+ Volume vol = this.getVolume(id);
+ if (vol == null) {
+ return null;
+ }
+
+ if (!this.getSupportedDiskTypes().contains(diskType)) {
+ return null;
+ }
+
+ vol.setVolumeDiskType(diskType);
+ this.driver.createVolume(vol);
+ vol.update();
+ return vol;
+ }
+
+ @Override
+ public List<VolumeDiskType> getSupportedDiskTypes() {
+ return this.supportedDiskTypes;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java b/platform/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
index 6fc4ed0..e7ff49a 100644
--- a/platform/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
+++ b/platform/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
@@ -18,11 +18,15 @@
*/
package org.apache.cloudstack.storage.datastore;
+import java.util.List;
+
import org.apache.cloudstack.storage.volume.Volume;
import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType;
public interface PrimaryDataStore {
Volume getVolume(long id);
+ List<Volume> getVolumes();
boolean deleteVolume(long id);
Volume createVolume(long id, VolumeDiskType diskType);
+ List<VolumeDiskType> getSupportedDiskTypes();
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java b/platform/storage/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
new file mode 100644
index 0000000..d1e6976
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
@@ -0,0 +1,35 @@
+package org.apache.cloudstack.storage.datastore.driver;
+
+import org.apache.cloudstack.storage.EndPoint;
+import org.apache.cloudstack.storage.volume.Volume;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DefaultPrimaryDataStoreDriverImpl implements
+ PrimaryDataStoreDriver {
+
+ @Override
+ public boolean createVolume(Volume vol) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean deleteVolume(Volume vo) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public String grantAccess(Volume vol, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean revokeAccess(Volume vol, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java b/platform/storage/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java
new file mode 100644
index 0000000..a35118a
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java
@@ -0,0 +1,11 @@
+package org.apache.cloudstack.storage.datastore.driver;
+
+import org.apache.cloudstack.storage.EndPoint;
+import org.apache.cloudstack.storage.volume.Volume;
+
+public interface PrimaryDataStoreDriver {
+ boolean createVolume(Volume vol);
+ boolean deleteVolume(Volume vo);
+ String grantAccess(Volume vol, EndPoint ep);
+ boolean revokeAccess(Volume vol, EndPoint ep);
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java b/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
new file mode 100644
index 0000000..dd7e061
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
@@ -0,0 +1,18 @@
+package org.apache.cloudstack.storage.datastore.provider;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
+
+public class DefaultPrimaryDatastoreProviderImpl implements
+ PrimaryDataStoreProvider {
+ @Inject
+ public PrimaryDataStoreDriver driver;
+ @Override
+ public PrimaryDataStore getDataStore(String dataStoreId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java b/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
new file mode 100644
index 0000000..8a8d101
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
@@ -0,0 +1,7 @@
+package org.apache.cloudstack.storage.datastore.provider;
+
+import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+
+public interface PrimaryDataStoreProvider {
+ public PrimaryDataStore getDataStore(String dataStoreId);
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java b/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java
new file mode 100644
index 0000000..a01c96c
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java
@@ -0,0 +1,5 @@
+package org.apache.cloudstack.storage.datastore.provider;
+
+public interface PrimaryDataStoreProviderManager {
+ public PrimaryDataStoreProvider getDataStoreProvider(String providerUuid);
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java b/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java
index 6780f60..fb1c37d 100644
--- a/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java
+++ b/platform/storage/src/org/apache/cloudstack/storage/volume/Volume.java
@@ -3,6 +3,8 @@ package org.apache.cloudstack.storage.volume;
import javax.inject.Inject;
import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.volume.db.VolumeDao;
import org.apache.cloudstack.storage.volume.db.VolumeVO;
import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType;
import org.apache.cloudstack.storage.volume.disktype.VolumeDiskTypeHelper;
@@ -13,13 +15,15 @@ import com.cloud.utils.fsm.StateObject;
public class Volume implements StateObject<VolumeState> {
protected VolumeVO volumeVO;
- protected DataStore dataStore;
+ protected PrimaryDataStore dataStore;
@Inject
VolumeDiskTypeHelper diskTypeHelper;
@Inject
VolumeTypeHelper volumeTypeHelper;
+ @Inject
+ VolumeDao volumeDao;
- public Volume(DataStore dataStore, VolumeVO volumeVO) {
+ public Volume(PrimaryDataStore dataStore, VolumeVO volumeVO) {
this.volumeVO = volumeVO;
this.dataStore = dataStore;
}
@@ -29,7 +33,7 @@ public class Volume implements StateObject<VolumeState> {
return volumeVO.getState();
}
- public DataStore getDataStore() {
+ public PrimaryDataStore getDataStore() {
return dataStore;
}
@@ -44,4 +48,13 @@ public class Volume implements StateObject<VolumeState> {
public VolumeType getType() {
return volumeTypeHelper.getType(volumeVO.getVolumeType());
}
+
+ public void setVolumeDiskType(VolumeDiskType type) {
+ volumeVO.setDiskType(type.toString());
+ }
+
+ public void update() {
+ volumeDao.update(volumeVO.getId(), volumeVO);
+ volumeVO = volumeDao.findById(volumeVO.getId());
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java
index c2d2804..1832fe3 100644
--- a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java
+++ b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java
@@ -1,5 +1,4 @@
package org.apache.cloudstack.storage.volume.disktype;
public interface VolumeDiskType {
- boolean equals(String diskType);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java
index 1ee3141..083d49c 100644
--- a/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java
+++ b/platform/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java
@@ -4,12 +4,23 @@ public class VolumeDiskTypeBase implements VolumeDiskType {
protected String type = "Unknown";
@Override
- public boolean equals(String diskType) {
- if (getType().equalsIgnoreCase(diskType)) {
+ public boolean equals(Object that) {
+ if (this == that) {
return true;
+ }
+ if (that instanceof String) {
+ if (getType().equalsIgnoreCase((String)that)) {
+ return true;
+ }
+ } else if (that instanceof VolumeDiskTypeBase) {
+ VolumeDiskTypeBase th = (VolumeDiskTypeBase)that;
+ if (this.getType().equalsIgnoreCase(th.getType())) {
+ return true;
+ }
} else {
return false;
}
+ return false;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/test/org/apache/cloudstack/storage/test/storageContext.xml
----------------------------------------------------------------------
diff --git a/platform/storage/test/org/apache/cloudstack/storage/test/storageContext.xml b/platform/storage/test/org/apache/cloudstack/storage/test/storageContext.xml
index 508848a..c32004b 100644
--- a/platform/storage/test/org/apache/cloudstack/storage/test/storageContext.xml
+++ b/platform/storage/test/org/apache/cloudstack/storage/test/storageContext.xml
@@ -13,6 +13,7 @@
<context:annotation-config />
<context:component-scan base-package="org.apache.cloudstack.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.storage.dao" />
<context:component-scan base-package=" com.cloud.upgrade.dao" />
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
----------------------------------------------------------------------
diff --git a/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java b/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
index 7f4f826..b8229e4 100644
--- a/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
+++ b/platform/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
@@ -25,9 +25,13 @@ import java.util.LinkedList;
import javax.inject.Inject;
+import org.apache.cloudstack.storage.datastore.provider.DefaultPrimaryDatastoreProviderImpl;
+import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProvider;
import org.apache.cloudstack.storage.volume.VolumeMotionService;
import org.apache.cloudstack.storage.volume.VolumeService;
import org.apache.cloudstack.storage.volume.db.VolumeDao;
+import org.apache.cloudstack.storage.volume.disktype.VHD;
+import org.apache.cloudstack.storage.volume.disktype.VMDK;
import org.apache.cloudstack.storage.volume.disktype.VolumeDiskTypeHelper;
import org.apache.cloudstack.storage.volume.type.VolumeTypeHelper;
import org.junit.Before;
@@ -36,11 +40,13 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.mockito.Mockito.*;
+import com.cloud.utils.component.ComponentInject;
import com.cloud.utils.db.DB;
@@ -86,5 +92,16 @@ public class volumeServiceTest {
public void test1() {
System.out.println(volTypeHelper.getType("Root"));
System.out.println(volDiskTypeHelper.getDiskType("vmdk"));
+ assertFalse(new VMDK().equals(new VHD()));
+ VMDK vmdk = new VMDK();
+ assertTrue(vmdk.equals(vmdk));
+ VMDK newvmdk = new VMDK();
+ assertTrue(vmdk.equals(newvmdk));
+ }
+
+ @Test
+ public void testStaticBean() {
+ DefaultPrimaryDatastoreProviderImpl provider = ComponentInject.inject(DefaultPrimaryDatastoreProviderImpl.class);
+ assertNotNull(provider.driver);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/0debd8a3/utils/src/com/cloud/utils/component/ComponentInject.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentInject.java b/utils/src/com/cloud/utils/component/ComponentInject.java
new file mode 100644
index 0000000..4578ea1
--- /dev/null
+++ b/utils/src/com/cloud/utils/component/ComponentInject.java
@@ -0,0 +1,20 @@
+package com.cloud.utils.component;
+
+import javax.inject.Inject;
+
+import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ComponentInject {
+
+ private static AutowireCapableBeanFactory beanFactory;
+ @Inject
+ private void setbeanFactory(AutowireCapableBeanFactory bf) {
+ ComponentInject.beanFactory = bf;
+ }
+
+ public static <T> T inject(Class<T> clazz) {
+ return beanFactory.createBean(clazz);
+ }
+}