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 2013/01/10 19:27:25 UTC
git commit: refactor the motion service api
Updated Branches:
refs/heads/javelin 0bcebd33b -> a03d83bba
refactor the motion service api
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/a03d83bb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/a03d83bb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/a03d83bb
Branch: refs/heads/javelin
Commit: a03d83bba965a9d060c3a3ee8ad05dd08647e40d
Parents: 0bcebd3
Author: Edison Su <ed...@citrix.com>
Authored: Thu Jan 10 10:27:05 2013 -0800
Committer: Edison Su <ed...@citrix.com>
Committed: Thu Jan 10 10:27:05 2013 -0800
----------------------------------------------------------------------
.../cloudstack/storage/image/TemplateObject.java | 2 +-
.../storage/image/driver/ImageDataStoreDriver.java | 4 +-
.../image/driver/ImageDataStoreDriverImpl.java | 7 +-
.../storage/image/store/ImageDataStore.java | 6 +-
.../storage/image/store/ImageDataStoreImpl.java | 61 +++++++--
.../image/motion/DefaultImageMotionStrategy.java | 31 ++---
.../image/motion/ImageMotionServiceImpl.java | 36 +----
.../storage/image/motion/ImageMotionStrategy.java | 12 +-
.../apache/cloudstack/storage/command/CopyCmd.java | 30 ++++
.../command/CopyTemplateToPrimaryStorageCmd.java | 30 ----
.../command/CreateVolumeFromBaseImageCommand.java | 4 +-
.../cloudstack/storage/datastore/DataStore.java | 17 +++
.../datastore/ObjectInDataStoreManager.java | 17 +++
.../datastore/ObjectInDataStoreManagerImpl.java | 65 +++++++++
.../storage/datastore/PrimaryDataStore.java | 4 +-
.../storage/datastore/TemplateInDataStore.java | 42 ++++++
.../storage/db/ObjectInDataStoreDao.java | 9 ++
.../storage/db/ObjectInDataStoreDaoImpl.java | 20 +++
.../cloudstack/storage/db/ObjectInDataStoreVO.java | 108 +++++++++++++++
.../storage/image/TemplateEntityImpl.java | 2 +-
.../cloudstack/storage/image/TemplateInfo.java | 4 +-
.../storage/image/motion/ImageMotionService.java | 6 +-
.../storage/image/store/ImageDataStoreInfo.java | 4 +-
.../apache/cloudstack/storage/to/TemplateTO.java | 3 +-
.../volume/ObjectInDataStoreStateMachine.java | 48 +++++++
.../TemplateOnPrimaryDataStoreStateMachine.java | 48 -------
.../volume/db/TemplatePrimaryDataStoreDao.java | 4 +-
.../volume/db/TemplatePrimaryDataStoreDaoImpl.java | 8 +-
.../volume/db/TemplatePrimaryDataStoreVO.java | 10 +-
.../storage/datastore/DefaultPrimaryDataStore.java | 50 ++++++-
.../driver/DefaultPrimaryDataStoreDriverImpl.java | 7 +-
.../datastore/driver/PrimaryDataStoreDriver.java | 2 +-
.../volume/TemplateOnPrimaryDataStoreObject.java | 6 +-
.../volume/TemplatePrimaryDataStoreManager.java | 4 +-
.../TemplatePrimaryDataStoreManagerImpl.java | 22 ++--
.../storage/volume/VolumeServiceImpl.java | 33 +++--
.../xen/resource/XenServerStorageResource.java | 10 +-
37 files changed, 555 insertions(+), 221 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateObject.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateObject.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateObject.java
index 5d65a3a..367302d 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateObject.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateObject.java
@@ -33,7 +33,7 @@ public class TemplateObject implements TemplateInfo {
}
@Override
- public ImageDataStoreInfo getImageDataStore() {
+ public ImageDataStoreInfo getDataStore() {
return this.dataStore;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/ImageDataStoreDriver.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/ImageDataStoreDriver.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/ImageDataStoreDriver.java
index 42e52e5..a968c9c 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/ImageDataStoreDriver.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/ImageDataStoreDriver.java
@@ -18,12 +18,14 @@
*/
package org.apache.cloudstack.storage.image.driver;
+import org.apache.cloudstack.storage.EndPoint;
import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.image.TemplateObject;
public interface ImageDataStoreDriver {
boolean registerTemplate(TemplateInfo template);
- String grantAccess(long templateId, long endPointId);
+ String grantAccess(TemplateObject template, EndPoint endPointId);
boolean revokeAccess(long templateId, long endPointId);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/ImageDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/ImageDataStoreDriverImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/ImageDataStoreDriverImpl.java
index e395cf1..cae57c0 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/ImageDataStoreDriverImpl.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/ImageDataStoreDriverImpl.java
@@ -18,7 +18,9 @@
*/
package org.apache.cloudstack.storage.image.driver;
+import org.apache.cloudstack.storage.EndPoint;
import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.image.TemplateObject;
public class ImageDataStoreDriverImpl implements ImageDataStoreDriver {
@@ -32,9 +34,8 @@ public class ImageDataStoreDriverImpl implements ImageDataStoreDriver {
}
@Override
- public String grantAccess(long templateId, long endPointId) {
- // TODO Auto-generated method stub
- return null;
+ public String grantAccess(TemplateObject template, EndPoint endPointId) {
+ return template.getPath();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java
index 4a9240e..b1fabc7 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageDataStore.java
@@ -18,15 +18,11 @@
*/
package org.apache.cloudstack.storage.image.store;
+import org.apache.cloudstack.storage.datastore.DataStore;
import org.apache.cloudstack.storage.image.TemplateObject;
public interface ImageDataStore extends ImageDataStoreInfo {
TemplateObject registerTemplate(long templateId);
-
- String grantAccess(long templateId, long endPointId);
-
- boolean revokeAccess(long templateId, long endPointId);
-
boolean deleteTemplate(long templateId);
boolean needDownloadToCacheStorage();
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageDataStoreImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageDataStoreImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageDataStoreImpl.java
index 68ad317..355f793 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageDataStoreImpl.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageDataStoreImpl.java
@@ -20,11 +20,15 @@ package org.apache.cloudstack.storage.image.store;
import javax.inject.Inject;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.EndPoint;
+import org.apache.cloudstack.storage.image.TemplateInfo;
import org.apache.cloudstack.storage.image.TemplateObject;
import org.apache.cloudstack.storage.image.db.ImageDataDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
import org.apache.cloudstack.storage.image.db.ImageDataVO;
import org.apache.cloudstack.storage.image.driver.ImageDataStoreDriver;
+import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
public class ImageDataStoreImpl implements ImageDataStore {
@Inject
@@ -48,18 +52,6 @@ public class ImageDataStoreImpl implements ImageDataStore {
*/
@Override
- public String grantAccess(long templateId, long endPointId) {
- ImageDataVO idv = imageDao.findById(templateId);
- return idv.getUrl();
- }
-
- @Override
- public boolean revokeAccess(long templateId, long endPointId) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
public boolean deleteTemplate(long templateId) {
// TODO Auto-generated method stub
return false;
@@ -103,4 +95,49 @@ public class ImageDataStoreImpl implements ImageDataStore {
return null;
}
+ @Override
+ public String grantAccess(VolumeInfo volume, EndPoint ep) {
+ return null;
+ }
+
+ @Override
+ public boolean revokeAccess(VolumeInfo volume, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public String grantAccess(TemplateInfo template, EndPoint ep) {
+ return this.driver.grantAccess((TemplateObject)template, ep);
+ }
+
+ @Override
+ public boolean revokeAccess(TemplateInfo template, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public String grantAccess(SnapshotInfo snapshot, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean revokeAccess(SnapshotInfo snapshot, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public String getRole() {
+ return "imageStore";
+ }
+
+ @Override
+ public long getId() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java b/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
index 91cacdb..fd6f193 100644
--- a/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
+++ b/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
@@ -23,9 +23,10 @@ import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.framework.async.AsyncRpcConext;
import org.apache.cloudstack.storage.EndPoint;
import org.apache.cloudstack.storage.command.CommandResult;
-import org.apache.cloudstack.storage.command.CopyTemplateToPrimaryStorageCmd;
+import org.apache.cloudstack.storage.command.CopyCmd;
import org.apache.cloudstack.storage.command.CopyTemplateToPrimaryStorageAnswer;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.image.TemplateInfo;
import org.apache.cloudstack.storage.to.ImageOnPrimayDataStoreTO;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
import org.springframework.stereotype.Component;
@@ -36,24 +37,12 @@ import com.cloud.agent.api.Answer;
public class DefaultImageMotionStrategy implements ImageMotionStrategy {
@Override
- public boolean canHandle(TemplateOnPrimaryDataStoreInfo templateStore) {
+ public boolean canHandle(TemplateInfo templateStore) {
// TODO Auto-generated method stub
return true;
}
- @Override
- public EndPoint getEndPoint(TemplateOnPrimaryDataStoreInfo templateStore) {
- PrimaryDataStore pdi = templateStore.getPrimaryDataStore();
- return pdi.getEndPoints().get(0);
- }
- @Override
- public boolean copyTemplate(TemplateOnPrimaryDataStoreInfo templateStore, EndPoint ep) {
- ImageOnPrimayDataStoreTO imageTo = new ImageOnPrimayDataStoreTO(templateStore);
- CopyTemplateToPrimaryStorageCmd copyCommand = new CopyTemplateToPrimaryStorageCmd(imageTo);
- ep.sendMessage(copyCommand);
- return true;
- }
private class CreateTemplateContext<T> extends AsyncRpcConext<T> {
private final TemplateOnPrimaryDataStoreInfo template;
@@ -69,10 +58,10 @@ public class DefaultImageMotionStrategy implements ImageMotionStrategy {
}
@Override
- public void copyTemplateAsync(TemplateOnPrimaryDataStoreInfo templateStore, EndPoint ep, AsyncCompletionCallback<CommandResult> callback) {
- ImageOnPrimayDataStoreTO imageTo = new ImageOnPrimayDataStoreTO(templateStore);
- CopyTemplateToPrimaryStorageCmd copyCommand = new CopyTemplateToPrimaryStorageCmd(imageTo);
- CreateTemplateContext<CommandResult> context = new CreateTemplateContext<CommandResult>(callback, templateStore);
+ public void copyTemplateAsync(String destUri, String srcUri, EndPoint ep, AsyncCompletionCallback<CommandResult> callback) {
+
+ CopyCmd copyCommand = new CopyCmd(destUri, srcUri);
+ CreateTemplateContext<CommandResult> context = new CreateTemplateContext<CommandResult>(callback, null);
AsyncCallbackDispatcher<DefaultImageMotionStrategy, Answer> caller = AsyncCallbackDispatcher.create(this);
caller.setCallback(caller.getTarget().copyTemplateCallBack(null, null))
.setContext(context);
@@ -98,4 +87,10 @@ public class DefaultImageMotionStrategy implements ImageMotionStrategy {
return null;
}
+ @Override
+ public EndPoint getEndPoint(TemplateInfo destTemplate,
+ TemplateInfo srcTemplate) {
+ return null;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java b/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
index feb9880..0d007ed 100644
--- a/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
+++ b/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
@@ -25,6 +25,7 @@ import javax.inject.Inject;
import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.storage.EndPoint;
import org.apache.cloudstack.storage.command.CommandResult;
+import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
import org.apache.cloudstack.storage.image.ImageService;
import org.apache.cloudstack.storage.image.TemplateInfo;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
@@ -48,33 +49,13 @@ public class ImageMotionServiceImpl implements ImageMotionService {
return false;
}
- @Override
- public boolean copyTemplate(TemplateOnPrimaryDataStoreInfo templateStore) {
- ImageMotionStrategy ims = null;
- for (ImageMotionStrategy strategy : motionStrategies) {
- if (strategy.canHandle(templateStore)) {
- ims = strategy;
- break;
- }
- }
-
- if (ims == null) {
- throw new CloudRuntimeException("Can't find proper image motion strategy");
- }
-
- EndPoint ep = ims.getEndPoint(templateStore);
-
- volumeService.grantAccess(templateStore, ep);
- TemplateInfo template = templateStore.getTemplate();
- imageService.grantTemplateAccess(template, ep);
- return ims.copyTemplate(templateStore, ep);
- }
+
@Override
- public void copyTemplateAsync(TemplateOnPrimaryDataStoreInfo templateStore, AsyncCompletionCallback<CommandResult> callback) {
+ public void copyTemplateAsync(TemplateInfo destTemplate, TemplateInfo srcTemplate, AsyncCompletionCallback<CommandResult> callback) {
ImageMotionStrategy ims = null;
for (ImageMotionStrategy strategy : motionStrategies) {
- if (strategy.canHandle(templateStore)) {
+ if (strategy.canHandle(srcTemplate)) {
ims = strategy;
break;
}
@@ -84,12 +65,11 @@ public class ImageMotionServiceImpl implements ImageMotionService {
throw new CloudRuntimeException("Can't find proper image motion strategy");
}
- EndPoint ep = ims.getEndPoint(templateStore);
- volumeService.grantAccess(templateStore, ep);
- TemplateInfo template = templateStore.getTemplate();
- imageService.grantTemplateAccess(template, ep);
+ EndPoint ep = ims.getEndPoint(destTemplate, srcTemplate);
+ String srcUri = srcTemplate.getDataStore().grantAccess(srcTemplate, ep);
+ String destUri = destTemplate.getDataStore().grantAccess(destTemplate, ep);
- ims.copyTemplateAsync(templateStore, ep, callback);
+ ims.copyTemplateAsync(destUri, srcUri, ep, callback);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionStrategy.java b/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionStrategy.java
index f1f4c7b..037005d 100644
--- a/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionStrategy.java
+++ b/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionStrategy.java
@@ -22,13 +22,11 @@ import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.storage.EndPoint;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
import org.apache.cloudstack.storage.command.CommandResult;
+import org.apache.cloudstack.storage.datastore.DataStore;
+import org.apache.cloudstack.storage.image.TemplateInfo;
public interface ImageMotionStrategy {
- public boolean canHandle(TemplateOnPrimaryDataStoreInfo templateStore);
-
- public EndPoint getEndPoint(TemplateOnPrimaryDataStoreInfo templateStore);
-
- public boolean copyTemplate(TemplateOnPrimaryDataStoreInfo templateStore, EndPoint ep);
-
- public void copyTemplateAsync(TemplateOnPrimaryDataStoreInfo templateStore, EndPoint ep, AsyncCompletionCallback<CommandResult> callback);
+ public boolean canHandle(TemplateInfo templateStore);
+ public EndPoint getEndPoint(TemplateInfo destTemplate, TemplateInfo srcTemplate);
+ public void copyTemplateAsync(String destUri, String sourceUri, EndPoint ep, AsyncCompletionCallback<CommandResult> callback);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/command/CopyCmd.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/command/CopyCmd.java b/engine/storage/src/org/apache/cloudstack/storage/command/CopyCmd.java
new file mode 100644
index 0000000..42eaa2f
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/command/CopyCmd.java
@@ -0,0 +1,30 @@
+package org.apache.cloudstack.storage.command;
+
+import org.apache.cloudstack.storage.to.ImageOnPrimayDataStoreTO;
+
+import com.cloud.agent.api.Command;
+
+public class CopyCmd extends Command implements StorageSubSystemCommand {
+
+ private ImageOnPrimayDataStoreTO imageTO;
+
+ protected CopyCmd() {
+ super();
+ }
+
+ public CopyCmd(String destUri, String srcUri) {
+ super();
+ // this.imageTO = image;
+ }
+
+ public ImageOnPrimayDataStoreTO getImage() {
+ return this.imageTO;
+ }
+
+ @Override
+ public boolean executeInSequence() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorageCmd.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorageCmd.java b/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorageCmd.java
deleted file mode 100644
index dd2030d..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorageCmd.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.apache.cloudstack.storage.command;
-
-import org.apache.cloudstack.storage.to.ImageOnPrimayDataStoreTO;
-
-import com.cloud.agent.api.Command;
-
-public class CopyTemplateToPrimaryStorageCmd extends Command implements StorageSubSystemCommand {
-
- private ImageOnPrimayDataStoreTO imageTO;
-
- protected CopyTemplateToPrimaryStorageCmd() {
- super();
- }
-
- public CopyTemplateToPrimaryStorageCmd(ImageOnPrimayDataStoreTO image) {
- super();
- this.imageTO = image;
- }
-
- public ImageOnPrimayDataStoreTO getImage() {
- return this.imageTO;
- }
-
- @Override
- public boolean executeInSequence() {
- // TODO Auto-generated method stub
- return false;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeFromBaseImageCommand.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeFromBaseImageCommand.java b/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeFromBaseImageCommand.java
index 4780e00..f4be067 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeFromBaseImageCommand.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeFromBaseImageCommand.java
@@ -27,9 +27,9 @@ public class CreateVolumeFromBaseImageCommand extends Command implements Storage
private final VolumeTO volume;
private final ImageOnPrimayDataStoreTO image;
- public CreateVolumeFromBaseImageCommand(VolumeTO volume, ImageOnPrimayDataStoreTO image) {
+ public CreateVolumeFromBaseImageCommand(VolumeTO volume, String image) {
this.volume = volume;
- this.image = image;
+ this.image = null;
}
public VolumeTO getVolume() {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStore.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStore.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStore.java
new file mode 100644
index 0000000..df21b6e
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStore.java
@@ -0,0 +1,17 @@
+package org.apache.cloudstack.storage.datastore;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.EndPoint;
+import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
+
+public interface DataStore {
+ String grantAccess(VolumeInfo volume, EndPoint ep);
+ boolean revokeAccess(VolumeInfo volume, EndPoint ep);
+ String grantAccess(TemplateInfo template, EndPoint ep);
+ boolean revokeAccess(TemplateInfo template, EndPoint ep);
+ String grantAccess(SnapshotInfo snapshot, EndPoint ep);
+ boolean revokeAccess(SnapshotInfo snapshot, EndPoint ep);
+ String getRole();
+ long getId();
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java
new file mode 100644
index 0000000..7bca13b
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java
@@ -0,0 +1,17 @@
+package org.apache.cloudstack.storage.datastore;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
+import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine;
+
+public interface ObjectInDataStoreManager {
+ public TemplateInfo create(TemplateInfo template, DataStore dataStore);
+ public ObjectInDataStoreVO create(VolumeInfo volume, DataStore dataStore);
+ public ObjectInDataStoreVO create(SnapshotInfo snapshot, DataStore dataStore);
+ public TemplateInfo findTemplate(TemplateInfo template, DataStore dataStore);
+ public VolumeInfo findVolume(VolumeInfo volume, DataStore dataStore);
+ public SnapshotInfo findSnapshot(SnapshotInfo snapshot, DataStore dataStore);
+ public boolean update(TemplateInfo vo, ObjectInDataStoreStateMachine.Event event);
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
new file mode 100644
index 0000000..2cc72dd
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
@@ -0,0 +1,65 @@
+package org.apache.cloudstack.storage.datastore;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.db.ObjectInDataStoreDao;
+import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
+import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event;
+import org.springframework.stereotype.Component;
+
+import com.cloud.utils.component.Inject;
+
+@Component
+public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager {
+ @Inject
+ ObjectInDataStoreDao objectDataStoreDao;
+ @Override
+ public TemplateInfo create(TemplateInfo template, DataStore dataStore) {
+ ObjectInDataStoreVO vo = new ObjectInDataStoreVO();
+ vo.setDataStoreId(dataStore.getId());
+ vo.setDataStoreType(dataStore.getRole());
+ vo.setObjectId(template.getId());
+ vo.setObjectType("template");
+ vo = objectDataStoreDao.persist(vo);
+ TemplateInDataStore tmpl = new TemplateInDataStore(template, dataStore, vo);
+ return tmpl;
+ }
+
+ @Override
+ public ObjectInDataStoreVO create(VolumeInfo volume, DataStore dataStore) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ObjectInDataStoreVO create(SnapshotInfo snapshot, DataStore dataStore) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public TemplateInfo findTemplate(TemplateInfo template, DataStore dataStore) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public VolumeInfo findVolume(VolumeInfo volume, DataStore dataStore) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public SnapshotInfo findSnapshot(SnapshotInfo snapshot, DataStore dataStore) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean update(TemplateInfo vo, Event event) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
index 51c8696..cf4f879 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
@@ -31,7 +31,7 @@ import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
import org.apache.cloudstack.storage.to.VolumeTO;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
-public interface PrimaryDataStore extends PrimaryDataStoreInfo {
+public interface PrimaryDataStore extends DataStore, PrimaryDataStoreInfo {
VolumeInfo getVolume(long id);
List<VolumeInfo> getVolumes();
@@ -42,7 +42,7 @@ public interface PrimaryDataStore extends PrimaryDataStoreInfo {
VolumeInfo createVoluemFromBaseImage(VolumeInfo volume, TemplateOnPrimaryDataStoreInfo templateStore);
- void createVoluemFromBaseImageAsync(VolumeInfo volume, TemplateOnPrimaryDataStoreInfo templateStore, AsyncCompletionCallback<CommandResult> callback);
+ void createVoluemFromBaseImageAsync(VolumeInfo volume, TemplateInfo templateStore, AsyncCompletionCallback<CommandResult> callback);
List<EndPoint> getEndPoints();
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/datastore/TemplateInDataStore.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/TemplateInDataStore.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/TemplateInDataStore.java
new file mode 100644
index 0000000..f3697cf
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/TemplateInDataStore.java
@@ -0,0 +1,42 @@
+package org.apache.cloudstack.storage.datastore;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
+import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
+import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.image.store.ImageDataStoreInfo;
+
+public class TemplateInDataStore implements TemplateInfo {
+ public TemplateInDataStore(TemplateInfo template, DataStore dataStore, ObjectInDataStoreVO obj) {
+
+ }
+ @Override
+ public ImageDataStoreInfo getDataStore() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public long getId() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public VolumeDiskType getDiskType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getPath() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getUuid() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java
new file mode 100644
index 0000000..13d8132
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java
@@ -0,0 +1,9 @@
+package org.apache.cloudstack.storage.db;
+
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine;
+import com.cloud.utils.db.GenericDao;
+import com.cloud.utils.fsm.StateDao;
+
+public interface ObjectInDataStoreDao extends GenericDao<ObjectInDataStoreVO, Long>, StateDao<ObjectInDataStoreStateMachine.State, ObjectInDataStoreStateMachine.Event, ObjectInDataStoreVO> {
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java
new file mode 100644
index 0000000..9932b48
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDaoImpl.java
@@ -0,0 +1,20 @@
+package org.apache.cloudstack.storage.db;
+
+
+
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.State;
+
+import com.cloud.utils.db.GenericDaoBase;
+
+
+public class ObjectInDataStoreDaoImpl extends GenericDaoBase<ObjectInDataStoreVO, Long> implements ObjectInDataStoreDao {
+
+ @Override
+ public boolean updateState(State currentState, Event event,
+ State nextState, ObjectInDataStoreVO vo, Object data) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java
new file mode 100644
index 0000000..2b92f6d
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreVO.java
@@ -0,0 +1,108 @@
+package org.apache.cloudstack.storage.db;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
+import com.cloud.utils.db.GenericDaoBase;
+
+@Entity
+@Table(name = "object_datastore_ref")
+public class ObjectInDataStoreVO {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ long id;
+
+ @Column(name = "datastore_id")
+ private long dataStoreId;
+
+ @Column(name = "datastore_type")
+ private String dataStoreType;
+
+ @Column(name = "ojbect_id")
+ long objectId;
+
+ @Column(name = "object_type")
+ String objectType;
+
+ @Column(name = GenericDaoBase.CREATED_COLUMN)
+ Date created = null;
+
+ @Column(name = "last_updated")
+ @Temporal(value = TemporalType.TIMESTAMP)
+ Date lastUpdated = null;
+
+ @Column(name = "download_pct")
+ int downloadPercent;
+
+ @Column(name = "download_state")
+ @Enumerated(EnumType.STRING)
+ Status downloadState;
+
+ @Column(name = "local_path")
+ String localDownloadPath;
+
+ @Column(name = "error_str")
+ String errorString;
+
+ @Column(name = "job_id")
+ String jobId;
+
+ @Column(name = "install_path")
+ String installPath;
+
+ @Column(name = "size")
+ long size;
+
+ @Column(name = "state")
+ String state;
+
+ @Column(name="update_count", updatable = true, nullable=false)
+ protected long updatedCount;
+
+ public long getId() {
+ return this.id;
+ }
+
+ public long getDataStoreId() {
+ return this.dataStoreId;
+ }
+
+ public void setDataStoreId(long id) {
+ this.dataStoreId = id;
+ }
+
+ public String getDataStoreType() {
+ return this.dataStoreType;
+ }
+
+ public void setDataStoreType(String type) {
+ this.dataStoreType = type;
+ }
+
+ public long getObjectId() {
+ return this.objectId;
+ }
+
+ public void setObjectId(long id) {
+ this.objectId = id;
+ }
+
+ public String getObjectType() {
+ return this.objectType;
+ }
+
+ public void setObjectType(String type) {
+ this.objectType = type;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
index d9eceb3..a9998ae 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
@@ -38,7 +38,7 @@ public class TemplateEntityImpl implements TemplateEntity {
}
public ImageDataStoreInfo getImageDataStore() {
- return templateInfo.getImageDataStore();
+ return (ImageDataStoreInfo)templateInfo.getDataStore();
}
public long getImageDataStoreId() {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/image/TemplateInfo.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/TemplateInfo.java b/engine/storage/src/org/apache/cloudstack/storage/image/TemplateInfo.java
index 0e11f3e..45fb515 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/TemplateInfo.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/TemplateInfo.java
@@ -22,8 +22,8 @@ import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskTyp
import org.apache.cloudstack.storage.image.store.ImageDataStoreInfo;
public interface TemplateInfo {
- ImageDataStoreInfo getImageDataStore();
-
+ ImageDataStoreInfo getDataStore();
+
long getId();
VolumeDiskType getDiskType();
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionService.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionService.java b/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionService.java
index 1f60e4a..89de552 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionService.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionService.java
@@ -20,11 +20,11 @@ package org.apache.cloudstack.storage.image.motion;
import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.storage.command.CommandResult;
+import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
+import org.apache.cloudstack.storage.image.TemplateInfo;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
public interface ImageMotionService {
- boolean copyTemplate(TemplateOnPrimaryDataStoreInfo templateStore);
-
- void copyTemplateAsync(TemplateOnPrimaryDataStoreInfo templateStore, AsyncCompletionCallback<CommandResult> callback);
+ void copyTemplateAsync(TemplateInfo destTemplate, TemplateInfo srcTemplate, AsyncCompletionCallback<CommandResult> callback);
boolean copyIso(String isoUri, String destIsoUri);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStoreInfo.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStoreInfo.java b/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStoreInfo.java
index 1756477..4c55c08 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStoreInfo.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStoreInfo.java
@@ -18,7 +18,9 @@
*/
package org.apache.cloudstack.storage.image.store;
-public interface ImageDataStoreInfo {
+import org.apache.cloudstack.storage.datastore.DataStore;
+
+public interface ImageDataStoreInfo extends DataStore {
public long getImageDataStoreId();
public String getType();
public String getUri();
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java b/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java
index f565712..e0d18db 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java
@@ -2,6 +2,7 @@ package org.apache.cloudstack.storage.to;
import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.image.store.ImageDataStoreInfo;
public class TemplateTO {
private final String path;
@@ -13,7 +14,7 @@ public class TemplateTO {
this.path = template.getPath();
this.uuid = template.getUuid();
this.diskType = template.getDiskType();
- this.imageDataStore = new ImageDataStoreTO(template.getImageDataStore());
+ this.imageDataStore = new ImageDataStoreTO((ImageDataStoreInfo)template.getDataStore());
}
public String getPath() {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/volume/ObjectInDataStoreStateMachine.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/ObjectInDataStoreStateMachine.java b/engine/storage/src/org/apache/cloudstack/storage/volume/ObjectInDataStoreStateMachine.java
new file mode 100644
index 0000000..11cf2ef
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/ObjectInDataStoreStateMachine.java
@@ -0,0 +1,48 @@
+/*
+ * 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 com.cloud.utils.fsm.StateObject;
+
+public interface ObjectInDataStoreStateMachine extends StateObject<ObjectInDataStoreStateMachine.State> {
+ enum State {
+ Allocated("The initial state"),
+ Creating("The template is being downloading to data store"),
+ Ready("Template downloading is complished"),
+ Destroying("Template is destroying"),
+ Destroyed("Template is destroyed"),
+ Failed("Failed to download template");
+ String _description;
+
+ private State(String description) {
+ _description = description;
+ }
+
+ public String getDescription() {
+ return _description;
+ }
+ }
+
+ enum Event {
+ CreateRequested,
+ DestroyRequested,
+ OperationSuccessed,
+ OperationFailed,
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreStateMachine.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreStateMachine.java b/engine/storage/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreStateMachine.java
deleted file mode 100644
index 7f0cd9b..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreStateMachine.java
+++ /dev/null
@@ -1,48 +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 com.cloud.utils.fsm.StateObject;
-
-public interface TemplateOnPrimaryDataStoreStateMachine extends StateObject<TemplateOnPrimaryDataStoreStateMachine.State> {
- enum State {
- Allocated("The initial state"),
- Creating("The template is being downloading to data store"),
- Ready("Template downloading is complished"),
- Destroying("Template is destroying"),
- Destroyed("Template is destroyed"),
- Failed("Failed to download template");
- String _description;
-
- private State(String description) {
- _description = description;
- }
-
- public String getDescription() {
- return _description;
- }
- }
-
- enum Event {
- CreateRequested,
- DestroyRequested,
- OperationSuccessed,
- OperationFailed,
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDao.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDao.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDao.java
index 3f8f71d..45ff1ec 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDao.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDao.java
@@ -18,12 +18,12 @@
*/
package org.apache.cloudstack.storage.volume.db;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreStateMachine;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine;
import com.cloud.utils.db.GenericDao;
import com.cloud.utils.fsm.StateDao;
-public interface TemplatePrimaryDataStoreDao extends GenericDao<TemplatePrimaryDataStoreVO, Long>, StateDao<TemplateOnPrimaryDataStoreStateMachine.State, TemplateOnPrimaryDataStoreStateMachine.Event, TemplatePrimaryDataStoreVO> {
+public interface TemplatePrimaryDataStoreDao extends GenericDao<TemplatePrimaryDataStoreVO, Long>, StateDao<ObjectInDataStoreStateMachine.State, ObjectInDataStoreStateMachine.Event, TemplatePrimaryDataStoreVO> {
public TemplatePrimaryDataStoreVO findByTemplateIdAndPoolId(long templateId, long poolId);
public TemplatePrimaryDataStoreVO findByTemplateIdAndPoolIdAndReady(long templateId, long poolId);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java
index 00732e1..b47f088 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreDaoImpl.java
@@ -20,9 +20,9 @@ package org.apache.cloudstack.storage.volume.db;
import java.util.Date;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreStateMachine;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreStateMachine.Event;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreStateMachine.State;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.State;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@@ -58,7 +58,7 @@ public class TemplatePrimaryDataStoreDaoImpl extends GenericDaoBase<TemplatePrim
SearchCriteriaService<TemplatePrimaryDataStoreVO, TemplatePrimaryDataStoreVO> sc = SearchCriteria2.create(TemplatePrimaryDataStoreVO.class);
sc.addAnd(sc.getEntity().getTemplateId(), Op.EQ, templateId);
sc.addAnd(sc.getEntity().getPoolId(), Op.EQ, poolId);
- sc.addAnd(sc.getEntity().getState(), Op.EQ, TemplateOnPrimaryDataStoreStateMachine.State.Ready);
+ sc.addAnd(sc.getEntity().getState(), Op.EQ, ObjectInDataStoreStateMachine.State.Ready);
return sc.find();
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreVO.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreVO.java
index ffaa6f7..2d355df 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreVO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/TemplatePrimaryDataStoreVO.java
@@ -32,13 +32,13 @@ import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreStateMachine;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.fsm.StateObject;
@Entity
@Table(name = "template_spool_ref")
-public class TemplatePrimaryDataStoreVO implements StateObject<TemplateOnPrimaryDataStoreStateMachine.State> {
+public class TemplatePrimaryDataStoreVO implements StateObject<ObjectInDataStoreStateMachine.State> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
long id;
@@ -83,7 +83,7 @@ public class TemplatePrimaryDataStoreVO implements StateObject<TemplateOnPrimary
@Column(name = "state")
@Enumerated(EnumType.STRING)
- TemplateOnPrimaryDataStoreStateMachine.State state;
+ ObjectInDataStoreStateMachine.State state;
@Column(name="update_count", updatable = true, nullable=false)
protected long updatedCount;
@@ -165,7 +165,7 @@ public class TemplatePrimaryDataStoreVO implements StateObject<TemplateOnPrimary
this.poolId = poolId;
this.templateId = templateId;
this.downloadState = Status.NOT_DOWNLOADED;
- this.state = TemplateOnPrimaryDataStoreStateMachine.State.Allocated;
+ this.state = ObjectInDataStoreStateMachine.State.Allocated;
this.markedForGC = false;
}
@@ -246,7 +246,7 @@ public class TemplatePrimaryDataStoreVO implements StateObject<TemplateOnPrimary
}
@Override
- public TemplateOnPrimaryDataStoreStateMachine.State getState() {
+ public ObjectInDataStoreStateMachine.State getState() {
return this.state;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
index 571f227..7cca8bc 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
@@ -20,6 +20,7 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
import org.apache.cloudstack.storage.to.VolumeTO;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
@@ -221,11 +222,11 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
}
@Override
- public void createVoluemFromBaseImageAsync(VolumeInfo volume, TemplateOnPrimaryDataStoreInfo templateStore, AsyncCompletionCallback<CommandResult> callback) {
+ public void createVoluemFromBaseImageAsync(VolumeInfo volume, TemplateInfo templateStore, AsyncCompletionCallback<CommandResult> callback) {
VolumeObject vo = (VolumeObject) volume;
- vo.setVolumeDiskType(templateStore.getTemplate().getDiskType());
-
- this.driver.createVolumeFromBaseImageAsync(vo, templateStore, callback);
+ vo.setVolumeDiskType(templateStore.getDiskType());
+ String templateUri = templateStore.getDataStore().grantAccess(templateStore, this.getEndPoints().get(0));
+ this.driver.createVolumeFromBaseImageAsync(vo, templateUri, callback);
}
@Override
@@ -264,5 +265,46 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
return this.provider;
}
+ @Override
+ public String grantAccess(VolumeInfo volume, EndPoint ep) {
+ return this.driver.grantAccess((VolumeObject)volume, ep);
+ }
+
+ @Override
+ public boolean revokeAccess(VolumeInfo volume, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public String grantAccess(TemplateInfo template, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean revokeAccess(TemplateInfo template, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public String grantAccess(SnapshotInfo snapshot, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean revokeAccess(SnapshotInfo snapshot, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public String getRole() {
+ // TODO Auto-generated method stub
+ return "volumeStore";
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
index 5567037..ee0bcc3 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
@@ -134,11 +134,10 @@ public class DefaultPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver
}
@Override
- public void createVolumeFromBaseImageAsync(VolumeObject volume, TemplateOnPrimaryDataStoreInfo template, AsyncCompletionCallback<CommandResult> callback) {
+ public void createVolumeFromBaseImageAsync(VolumeObject volume, String template, AsyncCompletionCallback<CommandResult> callback) {
VolumeTO vol = this.dataStore.getVolumeTO(volume);
- ImageOnPrimayDataStoreTO image = new ImageOnPrimayDataStoreTO(template);
- CreateVolumeFromBaseImageCommand cmd = new CreateVolumeFromBaseImageCommand(vol, image);
- List<EndPoint> endPoints = template.getPrimaryDataStore().getEndPoints();
+ CreateVolumeFromBaseImageCommand cmd = new CreateVolumeFromBaseImageCommand(vol, template);
+ List<EndPoint> endPoints = this.dataStore.getEndPoints();
EndPoint ep = endPoints.get(0);
CreateVolumeFromBaseImageContext<CommandResult> context = new CreateVolumeFromBaseImageContext<CommandResult>(callback, volume);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java
index eca7d79..57b3a30 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java
@@ -12,7 +12,7 @@ import org.apache.cloudstack.storage.volume.VolumeObject;
public interface PrimaryDataStoreDriver {
void createVolumeAsync(VolumeObject vol, AsyncCompletionCallback<CommandResult> callback);
- void createVolumeFromBaseImageAsync(VolumeObject volume, TemplateOnPrimaryDataStoreInfo template, AsyncCompletionCallback<CommandResult> callback);
+ void createVolumeFromBaseImageAsync(VolumeObject volume, String template, AsyncCompletionCallback<CommandResult> callback);
void deleteVolumeAsync(VolumeObject vo, AsyncCompletionCallback<CommandResult> callback);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreObject.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreObject.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreObject.java
index 0ae45e3..9221fb4 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreObject.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplateOnPrimaryDataStoreObject.java
@@ -20,8 +20,8 @@ package org.apache.cloudstack.storage.volume;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
import org.apache.cloudstack.storage.image.TemplateInfo;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreStateMachine.Event;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreStateMachine.State;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.State;
import org.apache.cloudstack.storage.volume.db.TemplatePrimaryDataStoreDao;
import org.apache.cloudstack.storage.volume.db.TemplatePrimaryDataStoreVO;
@@ -74,7 +74,7 @@ public class TemplateOnPrimaryDataStoreObject implements TemplateOnPrimaryDataSt
vo = templateStoreDao.findById(vo.getId());
}
- public void stateTransit(TemplateOnPrimaryDataStoreStateMachine.Event event) {
+ public void stateTransit(ObjectInDataStoreStateMachine.Event event) {
try {
this.stateMachine.transitTo(vo, event, null, templateStoreDao);
vo = templateStoreDao.findById(vo.getId());
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManager.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManager.java
index 4c08fee..5978424 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManager.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManager.java
@@ -20,8 +20,8 @@ package org.apache.cloudstack.storage.volume;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
import org.apache.cloudstack.storage.image.TemplateInfo;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreStateMachine.Event;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreStateMachine.State;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.State;
import org.apache.cloudstack.storage.volume.db.TemplatePrimaryDataStoreVO;
import com.cloud.utils.fsm.StateMachine2;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManagerImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManagerImpl.java
index d1cac97..fc4e4fd 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManagerImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManagerImpl.java
@@ -23,8 +23,8 @@ import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
import org.apache.cloudstack.storage.image.TemplateInfo;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreStateMachine.Event;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreStateMachine.State;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event;
+import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.State;
import org.apache.cloudstack.storage.volume.db.TemplatePrimaryDataStoreDao;
import org.apache.cloudstack.storage.volume.db.TemplatePrimaryDataStoreVO;
import org.springframework.stereotype.Component;
@@ -45,14 +45,14 @@ public class TemplatePrimaryDataStoreManagerImpl implements TemplatePrimaryDataS
protected StateMachine2<State, Event, TemplatePrimaryDataStoreVO> stateMachines;
public TemplatePrimaryDataStoreManagerImpl() {
stateMachines = new StateMachine2<State, Event, TemplatePrimaryDataStoreVO>();
- stateMachines.addTransition(TemplateOnPrimaryDataStoreStateMachine.State.Allocated, Event.CreateRequested, TemplateOnPrimaryDataStoreStateMachine.State.Creating);
- stateMachines.addTransition(TemplateOnPrimaryDataStoreStateMachine.State.Creating, Event.OperationSuccessed, TemplateOnPrimaryDataStoreStateMachine.State.Ready);
- stateMachines.addTransition(TemplateOnPrimaryDataStoreStateMachine.State.Creating, Event.OperationFailed, TemplateOnPrimaryDataStoreStateMachine.State.Failed);
- stateMachines.addTransition(TemplateOnPrimaryDataStoreStateMachine.State.Failed, Event.CreateRequested, TemplateOnPrimaryDataStoreStateMachine.State.Creating);
- stateMachines.addTransition(TemplateOnPrimaryDataStoreStateMachine.State.Ready, Event.DestroyRequested, TemplateOnPrimaryDataStoreStateMachine.State.Destroying);
- stateMachines.addTransition(TemplateOnPrimaryDataStoreStateMachine.State.Destroying, Event.OperationSuccessed, TemplateOnPrimaryDataStoreStateMachine.State.Destroyed);
- stateMachines.addTransition(TemplateOnPrimaryDataStoreStateMachine.State.Destroying, Event.OperationFailed, TemplateOnPrimaryDataStoreStateMachine.State.Destroying);
- stateMachines.addTransition(TemplateOnPrimaryDataStoreStateMachine.State.Destroying, Event.DestroyRequested, TemplateOnPrimaryDataStoreStateMachine.State.Destroying);
+ stateMachines.addTransition(ObjectInDataStoreStateMachine.State.Allocated, Event.CreateRequested, ObjectInDataStoreStateMachine.State.Creating);
+ stateMachines.addTransition(ObjectInDataStoreStateMachine.State.Creating, Event.OperationSuccessed, ObjectInDataStoreStateMachine.State.Ready);
+ stateMachines.addTransition(ObjectInDataStoreStateMachine.State.Creating, Event.OperationFailed, ObjectInDataStoreStateMachine.State.Failed);
+ stateMachines.addTransition(ObjectInDataStoreStateMachine.State.Failed, Event.CreateRequested, ObjectInDataStoreStateMachine.State.Creating);
+ stateMachines.addTransition(ObjectInDataStoreStateMachine.State.Ready, Event.DestroyRequested, ObjectInDataStoreStateMachine.State.Destroying);
+ stateMachines.addTransition(ObjectInDataStoreStateMachine.State.Destroying, Event.OperationSuccessed, ObjectInDataStoreStateMachine.State.Destroyed);
+ stateMachines.addTransition(ObjectInDataStoreStateMachine.State.Destroying, Event.OperationFailed, ObjectInDataStoreStateMachine.State.Destroying);
+ stateMachines.addTransition(ObjectInDataStoreStateMachine.State.Destroying, Event.DestroyRequested, ObjectInDataStoreStateMachine.State.Destroying);
}
private TemplatePrimaryDataStoreVO waitingForTemplateDownload(TemplateInfo template, PrimaryDataStoreInfo dataStore) {
@@ -98,7 +98,7 @@ public class TemplatePrimaryDataStoreManagerImpl implements TemplatePrimaryDataS
}
//If it's not a fresh template downloading, waiting for other people downloading finished.
- if (!freshNewTemplate && templateStoreVO.getState() != TemplateOnPrimaryDataStoreStateMachine.State.Ready) {
+ if (!freshNewTemplate && templateStoreVO.getState() != ObjectInDataStoreStateMachine.State.Ready) {
templateStoreVO = waitingForTemplateDownload(template, dataStore);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
index fa047e8..afe985b 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
@@ -30,8 +30,10 @@ import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.framework.async.AsyncRpcConext;
import org.apache.cloudstack.storage.EndPoint;
import org.apache.cloudstack.storage.command.CommandResult;
+import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
import org.apache.cloudstack.storage.datastore.manager.PrimaryDataStoreManager;
+import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
import org.apache.cloudstack.storage.image.TemplateInfo;
import org.apache.cloudstack.storage.image.motion.ImageMotionService;
import org.apache.cloudstack.storage.volume.VolumeService.VolumeApiResult;
@@ -54,7 +56,7 @@ public class VolumeServiceImpl implements VolumeService {
@Inject
PrimaryDataStoreManager dataStoreMgr;
@Inject
- TemplatePrimaryDataStoreManager templatePrimaryStoreMgr;
+ ObjectInDataStoreManager objectInDataStoreMgr;
@Inject
ImageMotionService imageMotion;
@@ -238,9 +240,9 @@ public class VolumeServiceImpl implements VolumeService {
private class CreateBaseImageContext<T> extends AsyncRpcConext<T> {
private final VolumeInfo volume;
private final PrimaryDataStore dataStore;
- private final TemplateOnPrimaryDataStoreObject template;
+ private final TemplateInfo template;
private final AsyncCallFuture<VolumeApiResult> future;
- public CreateBaseImageContext(AsyncCompletionCallback<T> callback, VolumeInfo volume, PrimaryDataStore datastore, TemplateOnPrimaryDataStoreObject template,
+ public CreateBaseImageContext(AsyncCompletionCallback<T> callback, VolumeInfo volume, PrimaryDataStore datastore, TemplateInfo template,
AsyncCallFuture<VolumeApiResult> future) {
super(callback);
this.volume = volume;
@@ -257,7 +259,7 @@ public class VolumeServiceImpl implements VolumeService {
return this.dataStore;
}
- public TemplateOnPrimaryDataStoreObject getTemplate() {
+ public TemplateInfo getTemplate() {
return this.template;
}
@@ -268,15 +270,15 @@ public class VolumeServiceImpl implements VolumeService {
}
@DB
protected void createBaseImageAsync(VolumeInfo volume, PrimaryDataStore dataStore, TemplateInfo template, AsyncCallFuture<VolumeApiResult> future) {
- TemplateOnPrimaryDataStoreObject templateOnPrimaryStoreObj = (TemplateOnPrimaryDataStoreObject) templatePrimaryStoreMgr.createTemplateOnPrimaryDataStore(template, dataStore);
- templateOnPrimaryStoreObj.stateTransit(TemplateOnPrimaryDataStoreStateMachine.Event.CreateRequested);
+ TemplateInfo templateOnPrimaryStoreObj = objectInDataStoreMgr.create(template, dataStore);
+ /*templateOnPrimaryStoreObj.stateTransit(ObjectInDataStoreStateMachine.Event.CreateRequested);
templateOnPrimaryStoreObj.updateStatus(Status.CREATING);
try {
dataStore.installTemplate(templateOnPrimaryStoreObj);
templateOnPrimaryStoreObj.updateStatus(Status.CREATED);
} catch (Exception e) {
templateOnPrimaryStoreObj.updateStatus(Status.ABANDONED);
- templateOnPrimaryStoreObj.stateTransit(TemplateOnPrimaryDataStoreStateMachine.Event.OperationFailed);
+ templateOnPrimaryStoreObj.stateTransit(ObjectInDataStoreStateMachine.Event.OperationFailed);
VolumeApiResult result = new VolumeApiResult(volume);
result.setResult(e.toString());
future.complete(result);
@@ -284,29 +286,30 @@ public class VolumeServiceImpl implements VolumeService {
}
templateOnPrimaryStoreObj.updateStatus(Status.DOWNLOAD_IN_PROGRESS);
-
+ */
CreateBaseImageContext<VolumeApiResult> context = new CreateBaseImageContext<VolumeApiResult>(null, volume, dataStore, templateOnPrimaryStoreObj, future);
AsyncCallbackDispatcher<VolumeServiceImpl, CommandResult> caller = AsyncCallbackDispatcher.create(this);
caller.setCallback(caller.getTarget().createBaseImageCallback(null, null))
.setContext(context);
+
+ objectInDataStoreMgr.update(templateOnPrimaryStoreObj, ObjectInDataStoreStateMachine.Event.CreateRequested);
- imageMotion.copyTemplateAsync(templateOnPrimaryStoreObj, caller);
+ imageMotion.copyTemplateAsync(templateOnPrimaryStoreObj, template, caller);
}
@DB
protected Void createBaseImageCallback(AsyncCallbackDispatcher<VolumeServiceImpl, CommandResult> callback, CreateBaseImageContext<VolumeApiResult> context) {
CommandResult result = callback.getResult();
- TemplateOnPrimaryDataStoreObject templateOnPrimaryStoreObj = context.getTemplate();
+ TemplateInfo templateOnPrimaryStoreObj = context.getTemplate();
if (result.isSuccess()) {
- templateOnPrimaryStoreObj.stateTransit(TemplateOnPrimaryDataStoreStateMachine.Event.OperationSuccessed);
+ objectInDataStoreMgr.update(templateOnPrimaryStoreObj, ObjectInDataStoreStateMachine.Event.OperationSuccessed);
} else {
- templateOnPrimaryStoreObj.stateTransit(TemplateOnPrimaryDataStoreStateMachine.Event.OperationFailed);
+ objectInDataStoreMgr.update(templateOnPrimaryStoreObj, ObjectInDataStoreStateMachine.Event.OperationFailed);
}
AsyncCallFuture<VolumeApiResult> future = context.getFuture();
VolumeInfo volume = context.getVolume();
PrimaryDataStore pd = context.getDataStore();
-
createVolumeFromBaseImageAsync(volume, templateOnPrimaryStoreObj, pd, future);
return null;
}
@@ -330,7 +333,7 @@ public class VolumeServiceImpl implements VolumeService {
}
@DB
- protected void createVolumeFromBaseImageAsync(VolumeInfo volume, TemplateOnPrimaryDataStoreInfo templateOnPrimaryStore, PrimaryDataStore pd, AsyncCallFuture<VolumeApiResult> future) {
+ protected void createVolumeFromBaseImageAsync(VolumeInfo volume, TemplateInfo templateOnPrimaryStore, PrimaryDataStore pd, AsyncCallFuture<VolumeApiResult> future) {
VolumeObject vo = (VolumeObject) volume;
try {
vo.stateTransit(Volume.Event.CreateRequested);
@@ -379,7 +382,7 @@ public class VolumeServiceImpl implements VolumeService {
return future;
}
- createVolumeFromBaseImageAsync(volume, templateOnPrimaryStore, pd, future);
+ createVolumeFromBaseImageAsync(volume, template, pd, future);
return future;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/a03d83bb/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java
index 7322e02..009ed7b 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageResource.java
@@ -30,7 +30,7 @@ import java.util.UUID;
import org.apache.cloudstack.storage.command.AttachPrimaryDataStoreAnswer;
import org.apache.cloudstack.storage.command.AttachPrimaryDataStoreCmd;
-import org.apache.cloudstack.storage.command.CopyTemplateToPrimaryStorageCmd;
+import org.apache.cloudstack.storage.command.CopyCmd;
import org.apache.cloudstack.storage.command.CopyTemplateToPrimaryStorageAnswer;
import org.apache.cloudstack.storage.command.CreatePrimaryDataStoreCmd;
import org.apache.cloudstack.storage.command.CreateVolumeAnswer;
@@ -88,8 +88,8 @@ public class XenServerStorageResource {
}
public Answer handleStorageCommands(StorageSubSystemCommand command) {
- if (command instanceof CopyTemplateToPrimaryStorageCmd) {
- return this.execute((CopyTemplateToPrimaryStorageCmd)command);
+ if (command instanceof CopyCmd) {
+ return this.execute((CopyCmd)command);
} else if (command instanceof AttachPrimaryDataStoreCmd) {
return this.execute((AttachPrimaryDataStoreCmd)command);
} else if (command instanceof CreatePrimaryDataStoreCmd) {
@@ -472,7 +472,7 @@ public class XenServerStorageResource {
}
- protected Answer directDownloadHttpTemplate(CopyTemplateToPrimaryStorageCmd cmd, TemplateTO template, PrimaryDataStoreTO primarDataStore) {
+ protected Answer directDownloadHttpTemplate(CopyCmd cmd, TemplateTO template, PrimaryDataStoreTO primarDataStore) {
String primaryStoreUuid = primarDataStore.getUuid();
Connection conn = hypervisorResource.getConnection();
SR poolsr = null;
@@ -570,7 +570,7 @@ public class XenServerStorageResource {
}
}
- protected Answer execute(CopyTemplateToPrimaryStorageCmd cmd) {
+ protected Answer execute(CopyCmd cmd) {
ImageOnPrimayDataStoreTO imageTO = cmd.getImage();
TemplateTO template = imageTO.getTemplate();
if (template.getPath().startsWith("http")) {