Updated Branches:
  refs/heads/javelin 7a3ffb47e -> 23a35db95

add image motion interface


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/23a35db9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/23a35db9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/23a35db9

Branch: refs/heads/javelin
Commit: 23a35db95266ecaa42ed120408d4e0a05c674b95
Parents: 7a3ffb4
Author: Edison Su <[email protected]>
Authored: Thu Nov 15 17:52:30 2012 -0800
Committer: Edison Su <[email protected]>
Committed: Thu Nov 15 17:52:42 2012 -0800

----------------------------------------------------------------------
 .../engine/cloud/entity/api/TemplateEntity.java    |    3 +-
 .../engine/subsystem/api/storage/ImageService.java |   33 ---------
 .../api/storage/PrimaryDataStoreInfo.java          |    3 +
 .../subsystem/api/storage/type/BaseImage.java      |    7 ++
 .../storage/StorageOrchestratorImpl.java           |   28 +++++++-
 .../command/CopyTemplateToPrimaryStorage.java      |   29 ++++++++
 .../CopyTemplateToPrimaryStorageAnswer.java        |    7 ++
 .../storage/command/CreateVolumeCommand.java       |    6 +-
 .../datastore/DefaultPrimaryDataStoreImpl.java     |   16 +++-
 .../storage/datastore/PrimaryDataStore.java        |    6 +-
 .../datastore/PrimaryDataStoreInfoImpl.java        |    7 ++
 .../driver/DefaultPrimaryDataStoreDriverImpl.java  |    3 +-
 .../cloudstack/storage/image/ImageService.java     |   35 +++++++++
 .../cloudstack/storage/image/ImageServiceImpl.java |   14 ++--
 .../storage/image/TemplateEntityImpl.java          |   16 ++++
 .../image/motion/DefaultImageMotionProvider.java   |   32 --------
 .../image/motion/DefaultImageMotionStrategy.java   |   56 +++++++++++++++
 .../storage/image/motion/ImageMotionProvider.java  |   26 -------
 .../storage/image/motion/ImageMotionService.java   |    5 +-
 .../image/motion/ImageMotionServiceImpl.java       |   39 +++++++++-
 .../storage/image/motion/ImageMotionStrategy.java  |   31 ++++++++
 .../cloudstack/storage/to/ImageDataStoreTO.java    |    9 +++
 .../cloudstack/storage/to/PrimaryDataStoreTO.java  |    9 +++
 .../apache/cloudstack/storage/to/TemplateTO.java   |    9 +++
 .../org/apache/cloudstack/storage/to/VolumeTO.java |    9 +++
 .../cloudstack/storage/volume/VolumeService.java   |    7 ++-
 .../storage/volume/VolumeServiceImpl.java          |   31 +++++++--
 27 files changed, 353 insertions(+), 123 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java
----------------------------------------------------------------------
diff --git 
a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java
 
b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java
index ac01bde..f10ba5e 100755
--- 
a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java
+++ 
b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/TemplateEntity.java
@@ -23,5 +23,6 @@ import 
org.apache.cloudstack.engine.entity.api.CloudStackEntity;
 import com.cloud.template.VirtualMachineTemplate;
 
 public interface TemplateEntity extends CloudStackEntity, 
VirtualMachineTemplate {
-       
+       public long getPhysicalSize();
+       public long getVirtualSize();
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ImageService.java
----------------------------------------------------------------------
diff --git 
a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ImageService.java
 
b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ImageService.java
deleted file mode 100644
index a3dba26..0000000
--- 
a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ImageService.java
+++ /dev/null
@@ -1,33 +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.engine.subsystem.api.storage;
-
-import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
-
-public interface ImageService {
-       boolean registerTemplate(long templateId, long imageStoreId);
-       boolean deleteTemplate(long templateId);
-       long registerIso(String isoUrl, long accountId);
-       boolean deleteIso(long isoId);
-       String grantTemplateAccess(long templateId, long endpointId);
-       boolean revokeTemplateAccess(long templateId, long endpointId);
-       String grantIsoAccess(long isoId, long endpointId);
-       boolean revokeIsoAccess(long isoId, long endpointId);
-       TemplateEntity getTemplateEntity(long templateId);
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
----------------------------------------------------------------------
diff --git 
a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
 
b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
index 549a76e..88405ce 100644
--- 
a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
+++ 
b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
@@ -19,6 +19,8 @@
 package org.apache.cloudstack.engine.subsystem.api.storage;
 
 
+import java.util.List;
+
 import 
org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
 
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
@@ -29,4 +31,5 @@ public interface PrimaryDataStoreInfo {
        public boolean isVolumeDiskTypeSupported(VolumeDiskType diskType);
        public long getCapacity();
        public long getAvailableCapacity();
+       public List<EndPoint> getEndPoints();
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/BaseImage.java
----------------------------------------------------------------------
diff --git 
a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/BaseImage.java
 
b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/BaseImage.java
new file mode 100644
index 0000000..633a6d5
--- /dev/null
+++ 
b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/type/BaseImage.java
@@ -0,0 +1,7 @@
+package org.apache.cloudstack.engine.subsystem.api.storage.type;
+
+public class BaseImage extends VolumeTypeBase {
+       public BaseImage() {
+               this.type = "BaseImage";
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java 
b/engine/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
index 8d3c920..6922342 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
@@ -25,6 +25,7 @@ import 
org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
 import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity;
 import 
org.apache.cloudstack.engine.subsystem.api.storage.DataObjectBackupStorageOperationState;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.StorageOrchestrator;
 import org.apache.cloudstack.engine.subsystem.api.storage.StorageProvider;
 import org.apache.cloudstack.engine.subsystem.api.storage.TemplateProfile;
@@ -32,10 +33,15 @@ import 
org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeProfile;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeStrategy;
 import 
org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
+import org.apache.cloudstack.engine.subsystem.api.storage.type.BaseImage;
 import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType;
 import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
 import org.apache.cloudstack.storage.datastore.manager.PrimaryDataStoreManager;
 import org.apache.cloudstack.storage.image.ImageManager;
+import org.apache.cloudstack.storage.image.ImageService;
+import org.apache.cloudstack.storage.image.TemplateEntityImpl;
+import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.image.motion.ImageMotionService;
 import org.apache.cloudstack.storage.manager.BackupStorageManager;
 import org.apache.cloudstack.storage.manager.SecondaryStorageManager;
 import org.apache.cloudstack.storage.volume.VolumeEntityImpl;
@@ -92,6 +98,10 @@ public class StorageOrchestratorImpl implements 
StorageOrchestrator {
        @Inject
        VolumeService volumeService;
        @Inject
+       ImageMotionService imageMotionService;
+       @Inject
+       ImageService imageService;
+       @Inject
        PrimaryDataStoreManager primaryStorageMgr;
        
        @DB
@@ -343,12 +353,28 @@ public class StorageOrchestratorImpl implements 
StorageOrchestrator {
                return volumeService.allocateVolumeInDb(size, type, volName, 
templateId);
        }
        
+       protected VolumeInfo getVolumeInfo(VolumeEntity volume) {
+               VolumeEntityImpl vei = (VolumeEntityImpl)volume;
+               return vei.getVolumeInfo();
+       }
+       
        @Override
        public boolean createVolumeFromTemplate(VolumeEntity volume, long 
dataStoreId, VolumeDiskType diskType, TemplateEntity template) {
                PrimaryDataStore pd = 
primaryStorageMgr.getPrimaryDataStore(dataStoreId);
                boolean existsOnPrimaryStorage = 
pd.templateExists(template.getId());
                if (!existsOnPrimaryStorage) {
-                       //pd.installTemplate(template);
+                       TemplateInfo ti = 
((TemplateEntityImpl)template).getTemplateInfo();
+                       //TODO: hold lock
+                       VolumeEntity baseImage = 
volumeService.allocateVolumeInDb(template.getVirtualSize(), new BaseImage(), 
"BaseImage-" + template.getName(), template.getId());
+                       VolumeInfo vi = 
pd.createVolume(getVolumeInfo(baseImage), pd.getDefaultDiskType());
+                       volumeService.startCopying(vi);
+                       
+                       boolean copyResult = 
imageMotionService.copyTemplate(ti, vi);
+                       if (copyResult) {
+                               volumeService.copyingSucceed(vi);
+                       } else {
+                               volumeService.copyingFailed(vi);
+                       }
                }
                return false;
        }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorage.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorage.java
 
b/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorage.java
new file mode 100644
index 0000000..02ab73a
--- /dev/null
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorage.java
@@ -0,0 +1,29 @@
+package org.apache.cloudstack.storage.command;
+
+import org.apache.cloudstack.storage.to.TemplateTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+
+import com.cloud.agent.api.Command;
+
+public class CopyTemplateToPrimaryStorage extends Command {
+
+       private VolumeTO volume;
+       private TemplateTO template;
+       
+       protected CopyTemplateToPrimaryStorage() {
+               super();
+       }
+       
+       public CopyTemplateToPrimaryStorage(TemplateTO template, VolumeTO 
volume) {
+               super();
+               this.volume = volume;
+               this.template = template;
+       }
+       
+       @Override
+       public boolean executeInSequence() {
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorageAnswer.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorageAnswer.java
 
b/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorageAnswer.java
new file mode 100644
index 0000000..5a91117
--- /dev/null
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/command/CopyTemplateToPrimaryStorageAnswer.java
@@ -0,0 +1,7 @@
+package org.apache.cloudstack.storage.command;
+
+import com.cloud.agent.api.Answer;
+
+public class CopyTemplateToPrimaryStorageAnswer extends Answer {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeCommand.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeCommand.java
 
b/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeCommand.java
index e7ae083..70d1611 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeCommand.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/command/CreateVolumeCommand.java
@@ -18,13 +18,13 @@
  */
 package org.apache.cloudstack.storage.command;
 
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.to.VolumeTO;
 
 import com.cloud.agent.api.Command;
 
 public class CreateVolumeCommand extends Command {
-       protected VolumeInfo volumeInfo;
-       public CreateVolumeCommand(VolumeInfo volumeInfo) {
+       protected VolumeTO volumeInfo;
+       public CreateVolumeCommand(VolumeTO volumeInfo) {
                super();
                this.volumeInfo = volumeInfo;
        }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java
----------------------------------------------------------------------
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 0ca3565..13584e7 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java
@@ -14,6 +14,7 @@ import 
org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskTyp
 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.image.TemplateInfo;
 import org.apache.cloudstack.storage.image.TemplateObject;
 
 import org.apache.cloudstack.storage.volume.VolumeEntityImpl;
@@ -120,11 +121,11 @@ public class DefaultPrimaryDataStoreImpl implements 
PrimaryDataStore {
        }
 
        @Override
-       public VolumeObject createVolume(VolumeObject vo, VolumeDiskType 
diskType) {
+       public VolumeObject createVolume(VolumeInfo vi, VolumeDiskType 
diskType) {
                if (!pdsInfo.isVolumeDiskTypeSupported(diskType)) {
                        return null;
                }
-
+               VolumeObject vo = (VolumeObject)vi;
                vo.setVolumeDiskType(diskType);
                this.driver.createVolume(vo);
                return vo;
@@ -143,8 +144,15 @@ public class DefaultPrimaryDataStoreImpl implements 
PrimaryDataStore {
        }
 
        @Override
-       public boolean installTemplate(TemplateObject template) {
-               // TODO Auto-generated method stub
+       public boolean installTemplate(TemplateInfo template) {
+               
+               
                return false;
        }
+
+       @Override
+       public VolumeDiskType getDefaultDiskType() {
+               // TODO Auto-generated method stub
+               return null;
+       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/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 4917fc3..1f05b0f 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
@@ -25,6 +25,7 @@ import 
org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import 
org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
+import org.apache.cloudstack.storage.image.TemplateInfo;
 import org.apache.cloudstack.storage.image.TemplateObject;
 import org.apache.cloudstack.storage.volume.VolumeObject;
 
@@ -33,10 +34,11 @@ public interface PrimaryDataStore extends 
PrimaryDataStoreInfo {
        VolumeInfo getVolume(long id);
        List<VolumeInfo> getVolumes();
        boolean deleteVolume(long id);
-       VolumeObject createVolume(VolumeObject vo, VolumeDiskType diskType);
+       VolumeInfo createVolume(VolumeInfo vo, VolumeDiskType diskType);
        List<EndPoint> getEndPoints();
        PrimaryDataStoreInfo getDataStoreInfo();
        boolean exists(VolumeInfo vi);
        boolean templateExists(long templateId);
-       boolean installTemplate(TemplateObject template);
+       boolean installTemplate(TemplateInfo template);
+       VolumeDiskType getDefaultDiskType();
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreInfoImpl.java
----------------------------------------------------------------------
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 b11e922..283d1ae 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreInfoImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreInfoImpl.java
@@ -20,6 +20,7 @@ package org.apache.cloudstack.storage.datastore;
 
 import java.util.List;
 
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
 import 
org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
 
@@ -65,4 +66,10 @@ public class PrimaryDataStoreInfoImpl implements 
PrimaryDataStoreInfo {
        public long getAvailableCapacity() {
                return this.avail;
        }
+
+       @Override
+       public List<EndPoint> getEndPoints() {
+               // TODO Auto-generated method stub
+               return null;
+       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
----------------------------------------------------------------------
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 1bb6ee7..66d7967 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
@@ -7,6 +7,7 @@ import 
org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.storage.command.CreateVolumeAnswer;
 import org.apache.cloudstack.storage.command.CreateVolumeCommand;
+import org.apache.cloudstack.storage.to.VolumeTO;
 import org.apache.cloudstack.storage.volume.VolumeObject;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
@@ -23,7 +24,7 @@ public class DefaultPrimaryDataStoreDriverImpl implements
                List<EndPoint> endPoints = vol.getDataStore().getEndPoints();
                int retries = 3;
                VolumeInfo volInfo = vol;
-               CreateVolumeCommand createCmd = new 
CreateVolumeCommand(volInfo);
+               CreateVolumeCommand createCmd = new CreateVolumeCommand(new 
VolumeTO(volInfo));
                Answer answer = null;
                int i = 0;
                boolean result = false;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/image/ImageService.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/image/ImageService.java 
b/engine/storage/src/org/apache/cloudstack/storage/image/ImageService.java
new file mode 100644
index 0000000..78153f1
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/ImageService.java
@@ -0,0 +1,35 @@
+/*
+ * 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.image;
+
+import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
+
+
+public interface ImageService {
+       boolean registerTemplate(long templateId, long imageStoreId);
+       boolean deleteTemplate(long templateId);
+       long registerIso(String isoUrl, long accountId);
+       boolean deleteIso(long isoId);
+       String grantTemplateAccess(TemplateInfo template, EndPoint endpointId);
+       boolean revokeTemplateAccess(long templateId, long endpointId);
+       String grantIsoAccess(long isoId, long endpointId);
+       boolean revokeIsoAccess(long isoId, long endpointId);
+       TemplateEntity getTemplateEntity(long templateId);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/image/ImageServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/image/ImageServiceImpl.java 
b/engine/storage/src/org/apache/cloudstack/storage/image/ImageServiceImpl.java
index 1f765fc..35f77b2 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/image/ImageServiceImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/image/ImageServiceImpl.java
@@ -21,7 +21,7 @@ package org.apache.cloudstack.storage.image;
 import javax.inject.Inject;
 
 import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
-import org.apache.cloudstack.engine.subsystem.api.storage.ImageService;
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.storage.image.downloader.ImageDownloader;
 import org.apache.cloudstack.storage.image.manager.ImageDataStoreManager;
 import 
org.apache.cloudstack.storage.image.provider.ImageDataStoreProviderManager;
@@ -63,12 +63,6 @@ public class ImageServiceImpl implements ImageService {
        }
 
        @Override
-       public String grantTemplateAccess(long templateId, long endpointId) {
-               ImageDataStore ids = 
imageStoreProviderMgr.getDataStoreFromTemplateId(templateId);
-               return ids.grantAccess(templateId, endpointId);
-       }
-
-       @Override
        public boolean revokeTemplateAccess(long templateId, long endpointId) {
                // TODO Auto-generated method stub
                return false;
@@ -91,4 +85,10 @@ public class ImageServiceImpl implements ImageService {
                TemplateObject to = 
imageStoreProviderMgr.getTemplate(templateId);
                return new TemplateEntityImpl(to);
        }
+
+       @Override
+       public String grantTemplateAccess(TemplateInfo template, EndPoint 
endpointId) {
+               // TODO Auto-generated method stub
+               return null;
+       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/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 f514fab..8783804 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
@@ -46,6 +46,10 @@ public class TemplateEntityImpl implements TemplateEntity {
     public long getImageDataStoreId() {
        return getImageDataStore().getImageDataStoreId();
     }
+    
+    public TemplateInfo getTemplateInfo() {
+       return this.templateInfo;
+    }
 
        @Override
        public String getUuid() {
@@ -275,4 +279,16 @@ public class TemplateEntityImpl implements TemplateEntity {
                return 0;
        }
 
+       @Override
+       public long getPhysicalSize() {
+               // TODO Auto-generated method stub
+               return 0;
+       }
+
+       @Override
+       public long getVirtualSize() {
+               // TODO Auto-generated method stub
+               return 0;
+       }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionProvider.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionProvider.java
 
b/engine/storage/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionProvider.java
deleted file mode 100644
index 3fddd74..0000000
--- 
a/engine/storage/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionProvider.java
+++ /dev/null
@@ -1,32 +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.image.motion;
-
-import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
-import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-
-public class DefaultImageMotionProvider implements ImageMotionProvider {
-
-       @Override
-       public boolean canHandle(TemplateEntity template, PrimaryDataStore 
dataStoe) {
-               // TODO Auto-generated method stub
-               return false;
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
 
b/engine/storage/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
new file mode 100644
index 0000000..d4671db
--- /dev/null
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
@@ -0,0 +1,56 @@
+/*
+ * 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.image.motion;
+
+import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.command.CopyTemplateToPrimaryStorage;
+import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.to.TemplateTO;
+import org.apache.cloudstack.storage.to.VolumeTO;
+
+public class DefaultImageMotionStrategy implements ImageMotionStrategy {
+
+       @Override
+       public boolean canHandle(TemplateInfo template, VolumeInfo volume) {
+               // TODO Auto-generated method stub
+               return true;
+       }
+
+       //For default strategy, we will use one of endpoint in volume's 
datastore
+       @Override
+       public EndPoint getEndPoint(TemplateInfo template, VolumeInfo volume) {
+               PrimaryDataStoreInfo pdi = volume.getDataStore();
+               return pdi.getEndPoints().get(0);
+       }
+
+       @Override
+       public boolean copyTemplate(TemplateInfo template, VolumeInfo volume,
+                       EndPoint ep) {
+               VolumeTO vt = new VolumeTO(volume);
+               TemplateTO tt = new TemplateTO(template);
+               CopyTemplateToPrimaryStorage copyCommand = new 
CopyTemplateToPrimaryStorage(tt, vt);
+               ep.sendMessage(copyCommand);
+               return true;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionProvider.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionProvider.java
 
b/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionProvider.java
deleted file mode 100644
index 342ebe6..0000000
--- 
a/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionProvider.java
+++ /dev/null
@@ -1,26 +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.image.motion;
-
-import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
-import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-
-public interface ImageMotionProvider {
-   public boolean canHandle(TemplateEntity template, PrimaryDataStore 
dataStoe);                                                                      
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                               
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
-}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/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 a98be67..5baf84c 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
@@ -19,9 +19,12 @@
 package org.apache.cloudstack.storage.image.motion;
 
 import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.image.TemplateInfo;
 
 public interface ImageMotionService {
-       boolean copyTemplate(TemplateEntity template, PrimaryDataStoreInfo 
dataStore);
+       boolean copyTemplate(TemplateInfo template, VolumeInfo baseImage);
        boolean copyIso(String isoUri, String destIsoUri);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
 
b/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
index 1b4db58..ddea4c0 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
@@ -18,11 +18,28 @@
  */
 package org.apache.cloudstack.storage.image.motion;
 
+import java.util.List;
+
+import javax.inject.Inject;
+
 import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
 import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
 import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.image.ImageService;
+import org.apache.cloudstack.storage.image.TemplateInfo;
+import org.apache.cloudstack.storage.volume.VolumeService;
+
+import com.cloud.utils.exception.CloudRuntimeException;
 
 public class ImageMotionServiceImpl implements ImageMotionService {
+       @Inject
+       List<ImageMotionStrategy> motionStrategies;
+       @Inject
+       VolumeService volumeService;
+       @Inject
+       ImageService imageService;
        @Override
        public boolean copyIso(String isoUri, String destIsoUri) {
                // TODO Auto-generated method stub
@@ -30,9 +47,23 @@ public class ImageMotionServiceImpl implements 
ImageMotionService {
        }
 
        @Override
-       public boolean copyTemplate(TemplateEntity template, 
PrimaryDataStoreInfo dataStore) {
-               // TODO Auto-generated method stub
-               return false;
+       public boolean copyTemplate(TemplateInfo template, VolumeInfo volume) {
+               ImageMotionStrategy ims = null;
+               for (ImageMotionStrategy strategy : motionStrategies) {
+                       if (strategy.canHandle(template, volume)) {
+                               ims = strategy;
+                               break;
+                       }
+               }
+               
+               if (ims == null) {
+                       throw new CloudRuntimeException("Can't find proper 
image motion strategy");
+               }
+               
+               EndPoint ep = ims.getEndPoint(template, volume);
+               
+               volumeService.grantAccess(volume, ep);
+               imageService.grantTemplateAccess(template, ep);
+               return ims.copyTemplate(template, volume, ep);
        }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionStrategy.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionStrategy.java
 
b/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionStrategy.java
new file mode 100644
index 0000000..d072fff
--- /dev/null
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/image/motion/ImageMotionStrategy.java
@@ -0,0 +1,31 @@
+/*
+ * 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.image.motion;
+
+import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.image.TemplateInfo;
+
+public interface ImageMotionStrategy {
+   public boolean canHandle(TemplateInfo template, VolumeInfo volume);      
+   public EndPoint getEndPoint(TemplateInfo template, VolumeInfo volume);
+   public boolean copyTemplate(TemplateInfo template, VolumeInfo volume, 
EndPoint ep);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/to/ImageDataStoreTO.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/to/ImageDataStoreTO.java 
b/engine/storage/src/org/apache/cloudstack/storage/to/ImageDataStoreTO.java
new file mode 100644
index 0000000..1b4c083
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/ImageDataStoreTO.java
@@ -0,0 +1,9 @@
+package org.apache.cloudstack.storage.to;
+
+import org.apache.cloudstack.storage.image.store.ImageDataStoreInfo;
+
+public class ImageDataStoreTO {
+       public ImageDataStoreTO(ImageDataStoreInfo dataStore) {
+               
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java 
b/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
new file mode 100644
index 0000000..bb264df
--- /dev/null
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/to/PrimaryDataStoreTO.java
@@ -0,0 +1,9 @@
+package org.apache.cloudstack.storage.to;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+
+public class PrimaryDataStoreTO {
+       public PrimaryDataStoreTO(PrimaryDataStoreInfo dataStore) {
+               
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/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
new file mode 100644
index 0000000..0c9d53f
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/TemplateTO.java
@@ -0,0 +1,9 @@
+package org.apache.cloudstack.storage.to;
+
+import org.apache.cloudstack.storage.image.TemplateInfo;
+
+public class TemplateTO {
+       public TemplateTO(TemplateInfo template) {
+               
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/to/VolumeTO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/to/VolumeTO.java 
b/engine/storage/src/org/apache/cloudstack/storage/to/VolumeTO.java
new file mode 100644
index 0000000..28150f1
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/to/VolumeTO.java
@@ -0,0 +1,9 @@
+package org.apache.cloudstack.storage.to;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+
+public class VolumeTO {
+       public VolumeTO(VolumeInfo volume) {
+               
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java 
b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
index fe4aba0..2037966 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeService.java
@@ -19,6 +19,7 @@
 package org.apache.cloudstack.storage.volume;
 
 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.VolumeInfo;
 import 
org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
 import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType;
@@ -60,12 +61,14 @@ public interface VolumeService {
     /**
      * 
      */
-    String grantAccess(long volumeId, long endpointId);
+    String grantAccess(VolumeInfo volume, EndPoint endpointId);
     
     /**
      * 
      */
     boolean rokeAccess(long volumeId, long endpointId);
-    
+    VolumeInfo startCopying(VolumeInfo volume);
+    VolumeInfo copyingSucceed(VolumeInfo volume);
+    VolumeInfo copyingFailed(VolumeInfo volume);
     VolumeEntity getVolumeEntity(long volumeId);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/23a35db9/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
----------------------------------------------------------------------
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 40c270f..16dfe3f 100644
--- 
a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
+++ 
b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
@@ -21,6 +21,7 @@ package org.apache.cloudstack.storage.volume;
 import javax.inject.Inject;
 
 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.VolumeInfo;
 import 
org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
 import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType;
@@ -87,12 +88,6 @@ public class VolumeServiceImpl implements VolumeService {
        }
 
        @Override
-       public String grantAccess(long volumeId, long endpointId) {
-               // TODO Auto-generated method stub
-               return null;
-       }
-
-       @Override
        public boolean rokeAccess(long volumeId, long endpointId) {
                // TODO Auto-generated method stub
                return false;
@@ -118,4 +113,28 @@ public class VolumeServiceImpl implements VolumeService {
                        return new 
VolumeEntityImpl(dataStore.getVolume(volumeId));
                }
        }
+
+       @Override
+       public String grantAccess(VolumeInfo volume, EndPoint endpointId) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public VolumeInfo startCopying(VolumeInfo volume) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public VolumeInfo copyingSucceed(VolumeInfo volume) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public VolumeInfo copyingFailed(VolumeInfo volume) {
+               // TODO Auto-generated method stub
+               return null;
+       }
 }

Reply via email to