You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2014/01/10 01:24:48 UTC

git commit: updated refs/heads/4.2 to 9f03150

Updated Branches:
  refs/heads/4.2 3af4cf448 -> 9f03150a4


CLOUDSTACK-5653:S3 object store as Secondary Storage, the template
created from different zone is not available for the other zones.

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

Branch: refs/heads/4.2
Commit: 9f03150a4ff4269ef992b8271c2e30eb23802e8f
Parents: 3af4cf4
Author: Min Chen <mi...@citrix.com>
Authored: Thu Jan 9 16:12:16 2014 -0800
Committer: Min Chen <mi...@citrix.com>
Committed: Thu Jan 9 16:12:16 2014 -0800

----------------------------------------------------------------------
 .../engine/subsystem/api/storage/DataStoreManager.java  |  2 ++
 .../engine/subsystem/api/storage/TemplateService.java   |  2 ++
 .../cloudstack/storage/image/TemplateServiceImpl.java   |  3 ++-
 .../storage/datastore/DataStoreManagerImpl.java         |  9 +++++++++
 server/src/com/cloud/template/TemplateManagerImpl.java  | 12 +++++++++---
 5 files changed, 24 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9f03150a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreManager.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreManager.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreManager.java
index 0884453..febce40 100644
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreManager.java
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreManager.java
@@ -37,4 +37,6 @@ public interface DataStoreManager {
     DataStore getImageCacheStore(long zoneId);
 
     List<DataStore> listImageStores();
+    
+    boolean isRegionStore(DataStore store);    
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9f03150a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java
index 4950597..72c3374 100644
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/TemplateService.java
@@ -62,5 +62,7 @@ public interface TemplateService {
 
     void addSystemVMTemplatesToSecondary(DataStore store);
     
+    void associateTemplateToZone(long templateId, Long zoneId);    
+    
     void associateCrosszoneTemplatesToZone(long dcId);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9f03150a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
index 0113bc0..07cd59f 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
@@ -465,7 +465,8 @@ public class TemplateServiceImpl implements TemplateService {
     // persist entry in template_zone_ref table. zoneId can be empty for
     // region-wide image store, in that case,
     // we will associate the template to all the zones.
-    private void associateTemplateToZone(long templateId, Long zoneId) {
+    @Override
+    public void associateTemplateToZone(long templateId, Long zoneId) {
         List<Long> dcs = new ArrayList<Long>();
         if (zoneId != null) {
             dcs.add(zoneId);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9f03150a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
index 00d08d7..4bb8e54 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
@@ -19,6 +19,7 @@
 package org.apache.cloudstack.storage.datastore;
 
 import com.cloud.storage.DataStoreRole;
+import com.cloud.storage.ScopeType;
 import com.cloud.utils.exception.CloudRuntimeException;
 import edu.emory.mathcs.backport.java.util.Collections;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
@@ -80,6 +81,14 @@ public class DataStoreManagerImpl implements DataStoreManager {
     }
 
     @Override
+    public boolean isRegionStore(DataStore store) {
+        if (store.getScope().getScopeType() == ScopeType.ZONE && store.getScope().getScopeId() == null)
+            return true;
+        else
+            return false;
+    }
+    
+    @Override
     public DataStore getPrimaryDataStore(long storeId) {
         return primaryStoreMgr.getPrimaryDataStore(storeId);
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9f03150a/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java
index 3a05882..396ae61 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -1400,9 +1400,15 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
                     throw new CloudRuntimeException("Failed to create template" + result.getResult());
                 }
 
-                VMTemplateZoneVO templateZone = new VMTemplateZoneVO(zoneId, templateId, new Date());
-                this._tmpltZoneDao.persist(templateZone);
-
+                // create entries in template_zone_ref table
+                if (_dataStoreMgr.isRegionStore(store)) {
+                    // template created on region store
+                    _tmpltSvr.associateTemplateToZone(templateId, null);
+                } else {
+                    VMTemplateZoneVO templateZone = new VMTemplateZoneVO(zoneId, templateId, new Date());
+                    _tmpltZoneDao.persist(templateZone);
+                }
+                
                 privateTemplate = this._tmpltDao.findById(templateId);
                 if (snapshotId != null) {
                     //getting the prent volume