diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java index 001de2df085..e8c0e75ed17 100755 --- a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java +++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java @@ -19,10 +19,13 @@ package org.apache.cloudstack.engine.cloud.entity.api; import org.apache.cloudstack.engine.entity.api.CloudStackEntity; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType; +import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType; import com.cloud.storage.Volume; -public interface VolumeEntity extends CloudStackEntity, Volume { +public interface VolumeEntity extends CloudStackEntity { /** * Take a snapshot of the volume @@ -71,4 +74,13 @@ public interface VolumeEntity extends CloudStackEntity, Volume { * Destroy the volume */ void destroy(); + + long getSize(); + + String getTemplatePath(); + String getTemplateUuid(); + VolumeDiskType getDiskType(); + VolumeType getType(); + PrimaryDataStore getDataStore(); + void setUuid(String uuid); } diff --git a/engine/storage/src/org/apache/cloudstack/storage/EndPoint.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/EndPoint.java similarity index 70% rename from engine/storage/src/org/apache/cloudstack/storage/EndPoint.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/EndPoint.java index 0a3dfa2d28d..cecc6f5e8f2 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/EndPoint.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/EndPoint.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage; +package org.apache.cloudstack.engine.subsystem.api.storage; import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStore.java similarity index 74% rename from engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStore.java index 7efa56177ea..3f8bae037ae 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStore.java @@ -16,19 +16,19 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.cloudstack.storage.datastore; +package org.apache.cloudstack.engine.subsystem.api.storage; import java.util.List; -import org.apache.cloudstack.storage.EndPoint; -import org.apache.cloudstack.storage.volume.Volume; -import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; +import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType; + public interface PrimaryDataStore { - Volume getVolume(long id); - List getVolumes(); + VolumeEntity getVolume(long id); + List getVolumes(); boolean deleteVolume(long id); - Volume createVolume(long id, VolumeDiskType diskType); + VolumeEntity createVolume(long id, VolumeDiskType diskType); List getEndPoints(); PrimaryDataStoreInfo getDataStoreInfo(); } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreInfo.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java similarity index 88% rename from engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreInfo.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java index d30a5c8d221..549a76e1168 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreInfo.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java @@ -16,9 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.cloudstack.storage.datastore; +package org.apache.cloudstack.engine.subsystem.api.storage; -import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; + +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType; import com.cloud.hypervisor.Hypervisor.HypervisorType; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java similarity index 76% rename from engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java index 63e247cc2a8..290a74c3eca 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/VolumeService.java @@ -16,17 +16,19 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.cloudstack.storage.volume; +package org.apache.cloudstack.engine.subsystem.api.storage; + +import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType; +import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType; -import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; -import org.apache.cloudstack.storage.volume.type.VolumeType; public interface VolumeService { /** * */ - Volume allocateVolumeInDb(long size, VolumeType type,String volName, Long templateId); + VolumeEntity allocateVolumeInDb(long size, VolumeType type,String volName, Long templateId); /** * Creates the volume based on the given criteria @@ -35,7 +37,7 @@ public interface VolumeService { * * @return the volume object */ - Volume createVolume(long volumeId, long dataStoreId, VolumeDiskType diskType); + VolumeEntity createVolume(long volumeId, long dataStoreId, VolumeDiskType diskType); /** * Delete volume diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/QCOW2.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/QCOW2.java similarity index 69% rename from engine/storage/src/org/apache/cloudstack/storage/volume/disktype/QCOW2.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/QCOW2.java index 105801cabf8..4daa4a714f1 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/QCOW2.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/QCOW2.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.disktype; +package org.apache.cloudstack.engine.subsystem.api.storage.disktype; import org.springframework.stereotype.Component; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/Unknown.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/Unknown.java similarity index 59% rename from engine/storage/src/org/apache/cloudstack/storage/volume/disktype/Unknown.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/Unknown.java index e22acce7a17..5b52d5d8a72 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/Unknown.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/Unknown.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.disktype; +package org.apache.cloudstack.engine.subsystem.api.storage.disktype; public class Unknown extends VolumeDiskTypeBase { public Unknown() { diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VHD.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VHD.java similarity index 68% rename from engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VHD.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VHD.java index 4535748b64b..a19dcaf5bf0 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VHD.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VHD.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.disktype; +package org.apache.cloudstack.engine.subsystem.api.storage.disktype; import org.springframework.stereotype.Component; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VMDK.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VMDK.java similarity index 68% rename from engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VMDK.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VMDK.java index 10623ab4bcc..bb06318487e 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VMDK.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VMDK.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.disktype; +package org.apache.cloudstack.engine.subsystem.api.storage.disktype; import org.springframework.stereotype.Component; diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskType.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskType.java new file mode 100644 index 00000000000..3e1462135bd --- /dev/null +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskType.java @@ -0,0 +1,4 @@ +package org.apache.cloudstack.engine.subsystem.api.storage.disktype; + +public interface VolumeDiskType { +} diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeBase.java similarity index 90% rename from engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeBase.java index 083d49c6f2c..66c33a8e0f9 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeBase.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeBase.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.disktype; +package org.apache.cloudstack.engine.subsystem.api.storage.disktype; public class VolumeDiskTypeBase implements VolumeDiskType { protected String type = "Unknown"; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeHelper.java similarity index 89% rename from engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeHelper.java index c51e25fcf84..ca65cd6a632 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskTypeHelper.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/disktype/VolumeDiskTypeHelper.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.disktype; +package org.apache.cloudstack.engine.subsystem.api.storage.disktype; import java.util.List; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/type/DataDisk.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/DataDisk.java similarity index 71% rename from engine/storage/src/org/apache/cloudstack/storage/volume/type/DataDisk.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/DataDisk.java index 1e30768c05d..11b40ce361b 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/type/DataDisk.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/DataDisk.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.type; +package org.apache.cloudstack.engine.subsystem.api.storage.type; import org.springframework.stereotype.Component; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/type/Iso.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/Iso.java similarity index 69% rename from engine/storage/src/org/apache/cloudstack/storage/volume/type/Iso.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/Iso.java index 61e4e358eb7..22274d5f744 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/type/Iso.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/Iso.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.type; +package org.apache.cloudstack.engine.subsystem.api.storage.type; import org.springframework.stereotype.Component; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/type/RootDisk.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/RootDisk.java similarity index 70% rename from engine/storage/src/org/apache/cloudstack/storage/volume/type/RootDisk.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/RootDisk.java index c616cea21a8..96da41684a5 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/type/RootDisk.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/RootDisk.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.type; +package org.apache.cloudstack.engine.subsystem.api.storage.type; import org.springframework.stereotype.Component; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/type/Unknown.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/Unknown.java similarity index 60% rename from engine/storage/src/org/apache/cloudstack/storage/volume/type/Unknown.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/Unknown.java index c1a77b14ae4..ba9a6ce88f6 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/type/Unknown.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/Unknown.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.type; +package org.apache.cloudstack.engine.subsystem.api.storage.type; public class Unknown extends VolumeTypeBase { public Unknown() { diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeType.java similarity index 92% rename from engine/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeType.java index e423a5e62ef..fcc1c4b3898 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/type/VolumeType.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeType.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.cloudstack.storage.volume.type; +package org.apache.cloudstack.engine.subsystem.api.storage.type; public interface VolumeType { } diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeBase.java similarity index 89% rename from engine/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeBase.java index 830873cd2c2..c82961d2928 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeBase.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeBase.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.type; +package org.apache.cloudstack.engine.subsystem.api.storage.type; public class VolumeTypeBase implements VolumeType { protected String type = "Unknown"; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeHelper.java similarity index 88% rename from engine/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java rename to engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeHelper.java index 9443475e79a..a02f524a730 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/type/VolumeTypeHelper.java +++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/VolumeTypeHelper.java @@ -1,4 +1,4 @@ -package org.apache.cloudstack.storage.volume.type; +package org.apache.cloudstack.engine.subsystem.api.storage.type; import java.util.List; diff --git a/engine/storage/src/org/apache/cloudstack/storage/HypervisorHostEndPoint.java b/engine/storage/src/org/apache/cloudstack/storage/HypervisorHostEndPoint.java index 8bd51c7c580..a47946a2a1e 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/HypervisorHostEndPoint.java +++ b/engine/storage/src/org/apache/cloudstack/storage/HypervisorHostEndPoint.java @@ -20,6 +20,7 @@ package org.apache.cloudstack.storage; import javax.inject.Inject; +import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java index ea22b2314cd..1dc86f73e7f 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java @@ -6,15 +6,20 @@ import java.util.List; import javax.inject.Inject; -import org.apache.cloudstack.storage.EndPoint; +import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; +import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType; import org.apache.cloudstack.storage.HypervisorHostEndPoint; import org.apache.cloudstack.storage.datastore.db.DataStoreVO; import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver; -import org.apache.cloudstack.storage.volume.Volume; + +import org.apache.cloudstack.storage.volume.VolumeEntityImpl; import org.apache.cloudstack.storage.volume.VolumeEvent; 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.log4j.Logger; import com.cloud.host.HostVO; @@ -40,14 +45,14 @@ public class DefaultPrimaryDataStoreImpl implements PrimaryDataStore { } @Override - public Volume getVolume(long id) { + public VolumeEntity getVolume(long id) { VolumeVO volumeVO = volumeDao.findById(id); - Volume vol = new Volume(this, volumeVO); + VolumeEntity vol = new VolumeEntityImpl(this, volumeVO); return vol; } @Override - public List getVolumes() { + public List getVolumes() { // TODO Auto-generated method stub return null; } @@ -59,8 +64,9 @@ public class DefaultPrimaryDataStoreImpl implements PrimaryDataStore { } @Override - public Volume createVolume(long id, VolumeDiskType diskType) { - Volume vol = this.getVolume(id); + public VolumeEntity createVolume(long id, VolumeDiskType diskType) { + /* + VolumeEntity vol = this.getVolume(id); if (vol == null) { return null; } @@ -89,8 +95,8 @@ public class DefaultPrimaryDataStoreImpl implements PrimaryDataStore { } else { vol.stateTransit(VolumeEvent.OperationFailed); } - } - + }*/ + return null; } @Override diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreInfoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreInfoImpl.java index c453d33e93b..b11e9227746 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreInfoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreInfoImpl.java @@ -20,8 +20,8 @@ package org.apache.cloudstack.storage.datastore; import java.util.List; -import org.apache.cloudstack.storage.datastore.db.DataStoreVO; -import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType; import com.cloud.hypervisor.Hypervisor.HypervisorType; diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java index 935f2140b86..16c54ae2e4e 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java @@ -2,10 +2,10 @@ package org.apache.cloudstack.storage.datastore.driver; import java.util.List; -import org.apache.cloudstack.storage.EndPoint; +import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; +import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; import org.apache.cloudstack.storage.command.CreateVolumeAnswer; import org.apache.cloudstack.storage.command.CreateVolumeCommand; -import org.apache.cloudstack.storage.volume.Volume; import org.apache.cloudstack.storage.volume.VolumeInfo; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -17,7 +17,7 @@ public class DefaultPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver { private static final Logger s_logger = Logger.getLogger(DefaultPrimaryDataStoreDriverImpl.class); @Override - public boolean createVolume(Volume vol) { + public boolean createVolume(VolumeEntity vol) { //The default driver will send createvolume command to one of hosts which can access its datastore List endPoints = vol.getDataStore().getEndPoints(); int retries = 3; @@ -45,19 +45,19 @@ public class DefaultPrimaryDataStoreDriverImpl implements } @Override - public boolean deleteVolume(Volume vo) { + public boolean deleteVolume(VolumeEntity vo) { // TODO Auto-generated method stub return false; } @Override - public String grantAccess(Volume vol, EndPoint ep) { + public String grantAccess(VolumeEntity vol, EndPoint ep) { // TODO Auto-generated method stub return null; } @Override - public boolean revokeAccess(Volume vol, EndPoint ep) { + public boolean revokeAccess(VolumeEntity vol, EndPoint ep) { // TODO Auto-generated method stub return false; } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java index a35118a97b6..006c0d5c869 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java @@ -1,11 +1,12 @@ package org.apache.cloudstack.storage.datastore.driver; -import org.apache.cloudstack.storage.EndPoint; -import org.apache.cloudstack.storage.volume.Volume; +import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; +import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; + public interface PrimaryDataStoreDriver { - boolean createVolume(Volume vol); - boolean deleteVolume(Volume vo); - String grantAccess(Volume vol, EndPoint ep); - boolean revokeAccess(Volume vol, EndPoint ep); + boolean createVolume(VolumeEntity vol); + boolean deleteVolume(VolumeEntity vo); + String grantAccess(VolumeEntity vol, EndPoint ep); + boolean revokeAccess(VolumeEntity vol, EndPoint ep); } diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java index 4949b2faf67..4095acb68d0 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java @@ -20,7 +20,7 @@ package org.apache.cloudstack.storage.datastore.manager; import javax.inject.Inject; -import org.apache.cloudstack.storage.datastore.PrimaryDataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStore; import org.apache.cloudstack.storage.datastore.db.DataStoreVO; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderDao; diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreManager.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreManager.java index b6ac34d3d76..33fac990256 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreManager.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreManager.java @@ -18,7 +18,7 @@ */ package org.apache.cloudstack.storage.datastore.manager; -import org.apache.cloudstack.storage.datastore.PrimaryDataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStore; import org.apache.cloudstack.storage.datastore.lifecycle.PrimaryDataStoreLifeCycle; public interface PrimaryDataStoreManager { diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java index 7ca9000d281..bd65752069a 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java @@ -2,9 +2,9 @@ package org.apache.cloudstack.storage.datastore.provider; import javax.inject.Inject; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStoreImpl; -import org.apache.cloudstack.storage.datastore.PrimaryDataStore; -import org.apache.cloudstack.storage.datastore.PrimaryDataStoreInfo; import org.apache.cloudstack.storage.datastore.db.DataStoreVO; import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.driver.DefaultPrimaryDataStoreDriverImpl; diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java index a346d3206dc..9c9a8307c65 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java @@ -1,7 +1,7 @@ package org.apache.cloudstack.storage.datastore.provider; -import org.apache.cloudstack.storage.datastore.PrimaryDataStore; -import org.apache.cloudstack.storage.datastore.PrimaryDataStoreInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; public interface PrimaryDataStoreProvider { public PrimaryDataStore getDataStore(long dataStoreId); diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDaoStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDaoStoreDaoImpl.java index 55453fa75f5..4f1a510095c 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDaoStoreDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDaoStoreDaoImpl.java @@ -18,8 +18,10 @@ */ package org.apache.cloudstack.storage.image.db; -import com.cloud.utils.db.GenericDaoBase; +import org.springframework.stereotype.Component; +import com.cloud.utils.db.GenericDaoBase; +@Component public class ImageDaoStoreDaoImpl extends GenericDaoBase implements ImageDataStoreDao { } diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDaoImpl.java index cb075bea1ee..49419d3972d 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDaoImpl.java @@ -18,9 +18,11 @@ */ package org.apache.cloudstack.storage.image.db; +import org.springframework.stereotype.Component; + import com.cloud.utils.db.GenericDaoBase; - +@Component public class ImageDataStoreProviderDaoImpl extends GenericDaoBase implements ImageDataStoreProviderDao { } diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java b/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java index 60d1e84dc05..d712acc813c 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java @@ -27,5 +27,6 @@ public interface ImageDataStore { boolean revokeAccess(long templateId, long endPointId); boolean deleteTemplate(long templateId); boolean needDownloadToCacheStorage(); + ImageDownloader getImageDownloader(); } diff --git a/engine/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManager.java b/engine/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManager.java index 6292ab8b553..4b7142f8d0a 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManager.java +++ b/engine/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManager.java @@ -21,7 +21,7 @@ package org.apache.cloudstack.storage.manager; import java.util.List; import java.util.Map; -import org.apache.cloudstack.storage.datastore.PrimaryDataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStore; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.StoragePool; diff --git a/engine/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManagerImpl.java index 2af2ef0324f..24ae5ea37ef 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManagerImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/manager/PrimaryDataStoreManagerImpl.java @@ -24,9 +24,9 @@ import java.util.Map; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreLifeCycle; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStore; import org.apache.cloudstack.engine.subsystem.api.storage.StorageProvider; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore.StoreType; -import org.apache.cloudstack.storage.datastore.PrimaryDataStore; import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenterVO; diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/Volume.java b/engine/storage/src/org/apache/cloudstack/storage/volume/Volume.java deleted file mode 100644 index 35eaa3b9a16..00000000000 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/Volume.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.apache.cloudstack.storage.volume; - -import javax.inject.Inject; - -import org.apache.cloudstack.storage.datastore.PrimaryDataStore; -import org.apache.cloudstack.storage.datastore.PrimaryDataStoreInfo; -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; -import org.apache.cloudstack.storage.volume.type.VolumeType; -import org.apache.cloudstack.storage.volume.type.VolumeTypeHelper; -import org.apache.log4j.Logger; - -import com.cloud.utils.fsm.NoTransitionException; -import com.cloud.utils.fsm.StateMachine2; - -public class Volume { - private static final Logger s_logger = Logger.getLogger(Volume.class); - protected VolumeVO volumeVO; - private StateMachine2 _volStateMachine; - protected PrimaryDataStore dataStore; - @Inject - VolumeDiskTypeHelper diskTypeHelper; - @Inject - VolumeTypeHelper volumeTypeHelper; - @Inject - VolumeDao volumeDao; - - public Volume(PrimaryDataStore dataStore, VolumeVO volumeVO) { - this.volumeVO = volumeVO; - this.dataStore = dataStore; - } - - public String getUuid() { - return volumeVO.getUuid(); - } - - public void setUuid(String uuid) { - volumeVO.setUuid(uuid); - } - - public String getPath() { - return volumeVO.getPath(); - } - - public String getTemplateUuid() { - return null; - } - - public String getTemplatePath() { - return null; - } - - public PrimaryDataStoreInfo getDataStoreInfo() { - return dataStore.getDataStoreInfo(); - } - - public VolumeState getState() { - return volumeVO.getState(); - } - - public PrimaryDataStore getDataStore() { - return dataStore; - } - - public long getSize() { - return volumeVO.getSize(); - } - - public VolumeDiskType getDiskType() { - return diskTypeHelper.getDiskType(volumeVO.getDiskType()); - } - - public VolumeType getType() { - return volumeTypeHelper.getType(volumeVO.getVolumeType()); - } - - public long getVolumeId() { - return volumeVO.getId(); - } - - public void setVolumeDiskType(VolumeDiskType type) { - volumeVO.setDiskType(type.toString()); - } - - public boolean stateTransit(VolumeEvent event) { - boolean result = false; - try { - result = _volStateMachine.transitTo(volumeVO, event, null, volumeDao); - } catch (NoTransitionException e) { - s_logger.debug("Failed to transit volume: " + this.getVolumeId() + ", due to: " + e.toString()); - } - return result; - } - - public void update() { - volumeDao.update(volumeVO.getId(), volumeVO); - volumeVO = volumeDao.findById(volumeVO.getId()); - } -} diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java new file mode 100644 index 00000000000..13308e8c862 --- /dev/null +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java @@ -0,0 +1,236 @@ +package org.apache.cloudstack.storage.volume; + +import java.lang.reflect.Method; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.inject.Inject; + +import org.apache.cloudstack.engine.cloud.entity.api.SnapshotEntity; +import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskTypeHelper; +import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType; +import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeTypeHelper; +import org.apache.cloudstack.storage.volume.db.VolumeDao; +import org.apache.cloudstack.storage.volume.db.VolumeVO; + +import org.apache.log4j.Logger; + +import com.cloud.storage.Volume; +import com.cloud.utils.fsm.NoTransitionException; +import com.cloud.utils.fsm.StateMachine2; + +public class VolumeEntityImpl implements VolumeEntity { + private static final Logger s_logger = Logger.getLogger(VolumeEntityImpl.class); + protected VolumeVO volumeVO; + private StateMachine2 _volStateMachine; + protected PrimaryDataStore dataStore; + @Inject + VolumeDiskTypeHelper diskTypeHelper; + @Inject + VolumeTypeHelper volumeTypeHelper; + @Inject + VolumeDao volumeDao; + + public VolumeEntityImpl(PrimaryDataStore dataStore, VolumeVO volumeVO) { + this.volumeVO = volumeVO; + this.dataStore = dataStore; + } + + public String getUuid() { + return volumeVO.getUuid(); + } + + public void setUuid(String uuid) { + volumeVO.setUuid(uuid); + } + + public String getPath() { + return volumeVO.getPath(); + } + + public String getTemplateUuid() { + return null; + } + + public String getTemplatePath() { + return null; + } + + public PrimaryDataStoreInfo getDataStoreInfo() { + return dataStore.getDataStoreInfo(); + } + + public Volume.State getState() { + return volumeVO.getState(); + } + + public PrimaryDataStore getDataStore() { + return dataStore; + } + + public long getSize() { + return volumeVO.getSize(); + } + + public VolumeDiskType getDiskType() { + return diskTypeHelper.getDiskType(volumeVO.getDiskType()); + } + + public VolumeType getType() { + return volumeTypeHelper.getType(volumeVO.getVolumeType()); + } + + public long getVolumeId() { + return volumeVO.getId(); + } + + public void setVolumeDiskType(VolumeDiskType type) { + volumeVO.setDiskType(type.toString()); + } + + public boolean stateTransit(VolumeEvent event) { + boolean result = false; + try { + result = _volStateMachine.transitTo(volumeVO, event, null, volumeDao); + } catch (NoTransitionException e) { + s_logger.debug("Failed to transit volume: " + this.getVolumeId() + ", due to: " + e.toString()); + } + return result; + } + + public void update() { + volumeDao.update(volumeVO.getId(), volumeVO); + volumeVO = volumeDao.findById(volumeVO.getId()); + } + + @Override + public long getId() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public String getExternalId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getCurrentState() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getDesiredState() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Date getCreatedTime() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Date getLastUpdatedTime() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getOwner() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Map getDetails(String source) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getDetailSources() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void addDetail(String source, String name, String value) { + // TODO Auto-generated method stub + + } + + @Override + public void delDetail(String source, String name, String value) { + // TODO Auto-generated method stub + + } + + @Override + public void updateDetail(String source, String name, String value) { + // TODO Auto-generated method stub + + } + + @Override + public List getApplicableActions() { + // TODO Auto-generated method stub + return null; + } + + @Override + public SnapshotEntity takeSnapshotOf(boolean full) { + // TODO Auto-generated method stub + return null; + } + + @Override + public String reserveForMigration(long expirationTime) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void migrate(String reservationToken) { + // TODO Auto-generated method stub + + } + + @Override + public VolumeEntity setupForCopy() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void copy(VolumeEntity dest) { + // TODO Auto-generated method stub + + } + + @Override + public void attachTo(String vm, long deviceId) { + // TODO Auto-generated method stub + + } + + @Override + public void detachFrom() { + // TODO Auto-generated method stub + + } + + @Override + public void destroy() { + // TODO Auto-generated method stub + + } +} diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeInfo.java b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeInfo.java index 0c6981a9401..bc8fbe5f500 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeInfo.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeInfo.java @@ -18,9 +18,10 @@ */ package org.apache.cloudstack.storage.volume; -import org.apache.cloudstack.storage.datastore.PrimaryDataStoreInfo; -import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; -import org.apache.cloudstack.storage.volume.type.VolumeType; +import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType; +import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType; public class VolumeInfo { private long size; @@ -32,12 +33,12 @@ public class VolumeInfo { private VolumeType type; private VolumeDiskType diskType; - public VolumeInfo(Volume volume) { + public VolumeInfo(VolumeEntity volume) { this.size = volume.getSize(); this.uuid = volume.getUuid(); this.baseTemplatePath = volume.getTemplatePath(); this.baseTemplateUuid = volume.getTemplateUuid(); - this.dataStoreInfo = volume.getDataStoreInfo(); + //this.dataStoreInfo = volume.getDataStoreInfo(); this.diskType = volume.getDiskType(); this.type = volume.getType(); } diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java index 145813fda9b..83b98315ff9 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java @@ -20,11 +20,14 @@ package org.apache.cloudstack.storage.volume; import javax.inject.Inject; -import org.apache.cloudstack.storage.datastore.PrimaryDataStore; +import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStore; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType; +import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType; import org.apache.cloudstack.storage.datastore.manager.PrimaryDataStoreManager; import org.apache.cloudstack.storage.volume.db.VolumeDao; -import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; -import org.apache.cloudstack.storage.volume.type.VolumeType; + import org.springframework.stereotype.Service; import com.cloud.utils.db.DB; @@ -36,7 +39,7 @@ public class VolumeServiceImpl implements VolumeService { @Inject PrimaryDataStoreManager dataStoreMgr; @Override - public Volume createVolume(long volumeId, long dataStoreId, VolumeDiskType diskType) { + public VolumeEntity createVolume(long volumeId, long dataStoreId, VolumeDiskType diskType) { PrimaryDataStore dataStore = dataStoreMgr.getPrimaryDataStore(dataStoreId); return dataStore.createVolume(volumeId, diskType); } @@ -72,8 +75,9 @@ public class VolumeServiceImpl implements VolumeService { } @Override - public Volume allocateVolumeInDb(long size, VolumeType type, String volName, Long templateId) { + public VolumeEntity allocateVolumeInDb(long size, VolumeType type, String volName, Long templateId) { volDao.allocVolume(size, type, volName, templateId); return null; } + } diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeState.java b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeState.java deleted file mode 100644 index f2ebafa6690..00000000000 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeState.java +++ /dev/null @@ -1,73 +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.volume; - -import org.apache.cloudstack.storage.volume.db.VolumeVO; - -import com.cloud.utils.fsm.StateMachine2; - -public enum VolumeState { - Allocated("The volume is allocated but has not been created yet."), - Creating("The volume is being created. getPoolId() should reflect the pool where it is being created."), - Ready("The volume is ready to be used."), - Migrating("The volume is migrating to other storage pool"), - Snapshotting("There is a snapshot created on this volume, not backed up to secondary storage yet"), - Expunging("The volume is being expunging"), - Destroy("The volume is destroyed, and can't be recovered."), - UploadOp ("The volume upload operation is in progress or in short the volume is on secondary storage"); - - String _description; - - private VolumeState(String description) { - _description = description; - } - - public static StateMachine2 getStateMachine() { - return s_fsm; - } - - public String getDescription() { - return _description; - } - - private final static StateMachine2 s_fsm = new StateMachine2(); - static { - s_fsm.addTransition(Allocated, VolumeEvent.CreateRequested, Creating); - s_fsm.addTransition(Allocated, VolumeEvent.DestroyRequested, Destroy); - s_fsm.addTransition(Creating, VolumeEvent.OperationRetry, Creating); - s_fsm.addTransition(Creating, VolumeEvent.OperationFailed, Allocated); - s_fsm.addTransition(Creating, VolumeEvent.OperationSucceeded, Ready); - s_fsm.addTransition(Creating, VolumeEvent.DestroyRequested, Destroy); - s_fsm.addTransition(Creating, VolumeEvent.CreateRequested, Creating); - s_fsm.addTransition(Allocated, VolumeEvent.UploadRequested, UploadOp); - s_fsm.addTransition(UploadOp, VolumeEvent.CopyRequested, Creating);// CopyRequested for volume from sec to primary storage - s_fsm.addTransition(Creating, VolumeEvent.CopySucceeded, Ready); - s_fsm.addTransition(Creating, VolumeEvent.CopyFailed, UploadOp);// Copying volume from sec to primary failed. - s_fsm.addTransition(UploadOp, VolumeEvent.DestroyRequested, Destroy); - s_fsm.addTransition(Ready, VolumeEvent.DestroyRequested, Destroy); - s_fsm.addTransition(Destroy, VolumeEvent.ExpungingRequested, Expunging); - s_fsm.addTransition(Ready, VolumeEvent.SnapshotRequested, Snapshotting); - s_fsm.addTransition(Snapshotting, VolumeEvent.OperationSucceeded, Ready); - s_fsm.addTransition(Snapshotting, VolumeEvent.OperationFailed, Ready); - s_fsm.addTransition(Ready, VolumeEvent.MigrationRequested, Migrating); - s_fsm.addTransition(Migrating, VolumeEvent.OperationSucceeded, Ready); - s_fsm.addTransition(Migrating, VolumeEvent.OperationFailed, Ready); - s_fsm.addTransition(Destroy, VolumeEvent.OperationSucceeded, Destroy); - } -} diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao.java index 0f297278fdf..a5cd0e84fb5 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDao.java @@ -18,19 +18,19 @@ package org.apache.cloudstack.storage.volume.db; import java.util.List; -import org.apache.cloudstack.storage.volume.Volume; +import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType; import org.apache.cloudstack.storage.volume.VolumeEvent; -import org.apache.cloudstack.storage.volume.VolumeState; -import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; -import org.apache.cloudstack.storage.volume.type.VolumeType; + + import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.Storage.ImageFormat; +import com.cloud.storage.Volume; import com.cloud.utils.Pair; import com.cloud.utils.db.GenericDao; import com.cloud.utils.fsm.StateDao; -public interface VolumeDao extends GenericDao, StateDao { +public interface VolumeDao extends GenericDao, StateDao { List findDetachedByAccount(long accountId); diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDaoImpl.java index ca51bac7866..25aa2aa1750 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeDaoImpl.java @@ -25,18 +25,17 @@ import java.util.List; import javax.ejb.Local; -import org.apache.cloudstack.storage.volume.Volume; +import org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk; +import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType; import org.apache.cloudstack.storage.volume.VolumeEvent; -import org.apache.cloudstack.storage.volume.VolumeState; -import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; -import org.apache.cloudstack.storage.volume.type.RootDisk; -import org.apache.cloudstack.storage.volume.type.VolumeType; + import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.storage.Storage.ImageFormat; +import com.cloud.storage.Volume; import com.cloud.tags.dao.ResourceTagsDaoImpl; import com.cloud.utils.Pair; import com.cloud.utils.component.ComponentLocator; @@ -75,7 +74,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol public List findDetachedByAccount(long accountId) { SearchCriteria sc = DetachedAccountIdSearch.create(); sc.setParameters("accountId", accountId); - sc.setParameters("destroyed", VolumeState.Destroy); + sc.setParameters("destroyed", Volume.State.Destroy); return listBy(sc); } @@ -83,7 +82,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol public List findByAccount(long accountId) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("accountId", accountId); - sc.setParameters("state", VolumeState.Ready); + sc.setParameters("state", Volume.State.Ready); return listBy(sc); } @@ -106,7 +105,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol public List findByPoolId(long poolId) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("poolId", poolId); - sc.setParameters("notDestroyed", VolumeState.Destroy); + sc.setParameters("notDestroyed", Volume.State.Destroy); sc.setParameters("vType", new RootDisk().toString()); return listBy(sc); } @@ -115,7 +114,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol public List findCreatedByInstance(long id) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("instanceId", id); - sc.setParameters("state", VolumeState.Ready); + sc.setParameters("state", Volume.State.Ready); return listBy(sc); } @@ -123,7 +122,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol public List findUsableVolumesForInstance(long instanceId) { SearchCriteria sc = InstanceStatesSearch.create(); sc.setParameters("instance", instanceId); - sc.setParameters("states", VolumeState.Creating, VolumeState.Ready, VolumeState.Allocated); + sc.setParameters("states", Volume.State.Creating, Volume.State.Ready, Volume.State.Allocated); return listBy(sc); } @@ -140,7 +139,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol public List findByInstanceIdDestroyed(long vmId) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("instanceId", vmId); - sc.setParameters("destroyed", VolumeState.Destroy); + sc.setParameters("destroyed", Volume.State.Destroy); return listBy(sc); } @@ -148,7 +147,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol public List findReadyRootVolumesByInstance(long instanceId) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("instanceId", instanceId); - sc.setParameters("state", VolumeState.Ready); + sc.setParameters("state", Volume.State.Ready); sc.setParameters("vType", new RootDisk().toString()); return listBy(sc); } @@ -158,7 +157,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("accountId", accountId); sc.setParameters("pod", podId); - sc.setParameters("state", VolumeState.Ready); + sc.setParameters("state", Volume.State.Ready); return listIncludingRemovedBy(sc); } @@ -315,7 +314,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol public Long countAllocatedVolumesForAccount(long accountId) { SearchCriteria sc = CountByAccount.create(); sc.setParameters("account", accountId); - sc.setParameters("state", VolumeState.Destroy); + sc.setParameters("state", Volume.State.Destroy); return customSearch(sc, null).get(0); } @@ -329,14 +328,14 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol @Override public List listVolumesToBeDestroyed() { SearchCriteria sc = AllFieldsSearch.create(); - sc.setParameters("state", VolumeState.Destroy); + sc.setParameters("state", Volume.State.Destroy); return listBy(sc); } @Override - public boolean updateState(VolumeState currentState, - VolumeEvent event, VolumeState nextState, VolumeVO vo, + public boolean updateState(Volume.State currentState, + VolumeEvent event, Volume.State nextState, VolumeVO vo, Object data) { Long oldUpdated = vo.getUpdatedCount(); @@ -397,7 +396,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol public Pair getNonDestroyedCountAndTotalByPool(long poolId) { SearchCriteria sc = TotalSizeByPoolSearch.create(); sc.setParameters("poolId", poolId); - sc.setParameters("state", VolumeState.Destroy); + sc.setParameters("state", Volume.State.Destroy); List results = customSearch(sc, null); SumCount sumCount = results.get(0); return new Pair(sumCount.count, sumCount.sum); diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java index 48da123ceef..fc9dbc5b011 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/VolumeVO.java @@ -31,11 +31,12 @@ import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; -import org.apache.cloudstack.storage.volume.VolumeState; -import org.apache.cloudstack.storage.volume.disktype.Unknown; -import org.apache.cloudstack.storage.volume.type.VolumeType; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.Unknown; + + import com.cloud.api.Identity; +import com.cloud.storage.Volume; import com.cloud.storage.Storage.StoragePoolType; import com.cloud.utils.NumbersUtil; import com.cloud.utils.db.GenericDao; @@ -43,7 +44,7 @@ import com.cloud.utils.fsm.StateObject; @Entity @Table(name = "volumes") -public class VolumeVO implements Identity, StateObject{ +public class VolumeVO implements Identity, StateObject{ @Id @TableGenerator(name = "volume_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "volume_seq", allocationSize = 1) @GeneratedValue(strategy = GenerationType.TABLE) @@ -130,7 +131,7 @@ public class VolumeVO implements Identity, StateObject{ @Column(name = "state") @Enumerated(value = EnumType.STRING) - private VolumeState state; + private Volume.State state; @Column(name = "chain_info") String chainInfo; @@ -346,7 +347,7 @@ public class VolumeVO implements Identity, StateObject{ return updated; } - public VolumeState getState() { + public Volume.State getState() { return state; } diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java b/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java deleted file mode 100644 index 1832fe3483a..00000000000 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/disktype/VolumeDiskType.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.apache.cloudstack.storage.volume.disktype; - -public interface VolumeDiskType { -} diff --git a/engine/storage/test/org/apache/cloudstack/storage/test/Future2.java b/engine/storage/test/org/apache/cloudstack/storage/test/Future2.java new file mode 100644 index 00000000000..bc2fd7aaae7 --- /dev/null +++ b/engine/storage/test/org/apache/cloudstack/storage/test/Future2.java @@ -0,0 +1,114 @@ +/* + * 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.test; + +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + + +public class Future2 { + + private Callable callable; + private Callable success; + private Callable failed; + private ExecutorService executor = Executors.newFixedThreadPool(2); + private Future f; + + public class Func implements Callable { + private Callable f; + private Callable fs; + public T func() throws Exception { + return f.call(); + } + + public T success() throws Exception { + return fs.call(); + } + + public Func (Callable f, Callable s) { + this.f = f; + this.fs = s; + } + + + @Override + public T call() throws Exception { + func(); + success(); + return null; + } + + } + public Future2 (Callable callable) { + this.callable = callable; + } + + public void onSuccess(Callable s) { + this.success = s; + } + + public void go() { + Func ft = new Func(this.callable, this.success); + f = executor.submit(ft); + } + + public T get() { + try { + return this.f.get(); + } catch (InterruptedException e) { + return null; + } catch (ExecutionException e) { + // TODO Auto-generated catch block + return null; + } + } + + public void shutdown() { + this.executor.shutdown(); + } + + public static void main(String[] args) { + Callable fun = new Callable () { + + @Override + public String call() throws Exception { + System.out.println("execing"); + return "test"; + } + + }; + Future2 f2 = new Future2(fun); + f2.onSuccess(new Callable() { + + @Override + public String call() throws Exception { + Thread.sleep(1000); + System.out.println("success"); + return null; + } + }); + + f2.go(); + //f2.get(); + f2.shutdown(); + } +} diff --git a/engine/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java b/engine/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java index 8771d02543e..74967dfc0af 100644 --- a/engine/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java +++ b/engine/storage/test/org/apache/cloudstack/storage/test/volumeServiceTest.java @@ -22,9 +22,18 @@ import static org.junit.Assert.*; import java.awt.List; import java.util.LinkedList; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import javax.inject.Inject; +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.QCOW2; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VHD; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VMDK; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType; +import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskTypeHelper; +import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeTypeHelper; import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStoreImpl; import org.apache.cloudstack.storage.datastore.provider.DefaultPrimaryDatastoreProviderImpl; import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProvider; @@ -34,15 +43,8 @@ import org.apache.cloudstack.storage.image.format.ImageFormatHelper; import org.apache.cloudstack.storage.image.format.OVA; import org.apache.cloudstack.storage.image.format.Unknown; 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.QCOW2; -import org.apache.cloudstack.storage.volume.disktype.VHD; -import org.apache.cloudstack.storage.volume.disktype.VMDK; -import org.apache.cloudstack.storage.volume.disktype.VolumeDiskType; -import org.apache.cloudstack.storage.volume.disktype.VolumeDiskTypeHelper; -import org.apache.cloudstack.storage.volume.type.Iso; -import org.apache.cloudstack.storage.volume.type.VolumeTypeHelper; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -58,7 +60,6 @@ import org.mockito.Mockito.*; import com.cloud.utils.component.ComponentInject; import com.cloud.utils.db.DB; - @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="storageContext.xml") public class volumeServiceTest { @@ -93,7 +94,7 @@ public class volumeServiceTest { fail("Not yet implemented"); } - @Test + //@Test public void test1() { System.out.println(VolumeTypeHelper.getType("Root")); System.out.println(VolumeDiskTypeHelper.getDiskType("vmdk")); @@ -125,4 +126,5 @@ public class volumeServiceTest { ComponentInject.inject(dpdsi); //assertNotNull(dpdsi.volumeDao); } + }