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);
+	}
+}