You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ni...@apache.org on 2013/08/05 14:02:37 UTC

git commit: updated refs/heads/4.2 to ddf9122

Updated Branches:
  refs/heads/4.2 465bfbadb -> ddf91226e


CLOUDSTACK-3913
Private templates would now get copied to only one of image  storage chosen randamly as was the case earlier. Dont throw an exception for uploading volumes when there are multiple image stores, instead choose one of them randomly
Signed off by : nitin mehta<ni...@citrix.com>


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

Branch: refs/heads/4.2
Commit: ddf91226ea228632b86ef5be0a7029d246cb5e1b
Parents: 465bfba
Author: Nitin Mehta <ni...@citrix.com>
Authored: Mon Aug 5 17:12:52 2013 +0530
Committer: Nitin Mehta <ni...@citrix.com>
Committed: Mon Aug 5 17:32:21 2013 +0530

----------------------------------------------------------------------
 .../cloudstack/storage/image/BaseImageStoreDriverImpl.java    | 3 ++-
 server/src/com/cloud/template/HypervisorTemplateAdapter.java  | 6 ++++++
 server/src/com/cloud/template/TemplateManagerImpl.java        | 7 +++----
 3 files changed, 11 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ddf91226/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
index c8d4e45..2905f08 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java
@@ -106,7 +106,8 @@ public abstract class BaseImageStoreDriverImpl implements ImageStoreDriver {
     }
 
     @Override
-    public void createAsync(DataStore dataStore, DataObject data, AsyncCompletionCallback<CreateCmdResult> callback) {
+    public void
+    createAsync(DataStore dataStore, DataObject data, AsyncCompletionCallback<CreateCmdResult> callback) {
         CreateContext<CreateCmdResult> context = new CreateContext<CreateCmdResult>(callback, data);
         AsyncCallbackDispatcher<BaseImageStoreDriverImpl, DownloadAnswer> caller = AsyncCallbackDispatcher
                 .create(this);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ddf91226/server/src/com/cloud/template/HypervisorTemplateAdapter.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
index 21a0f6e..de0ed7e 100755
--- a/server/src/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
@@ -18,6 +18,7 @@ package com.cloud.template;
 
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 
@@ -180,6 +181,8 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
         if ( imageStores == null || imageStores.size() == 0 ){
             throw new CloudRuntimeException("Unable to find image store to download template "+ profile.getTemplate());
         }
+
+        Collections.shuffle(imageStores);// For private templates choose a random store. TODO - Have a better algorithm based on size, no. of objects, load etc.
         for (DataStore imageStore : imageStores) {
             TemplateInfo tmpl = this.imageFactory.getTemplate(template.getId(), imageStore);
             CreateTemplateContext<TemplateApiResult> context = new CreateTemplateContext<TemplateApiResult>(null, tmpl);
@@ -187,6 +190,9 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
             caller.setCallback(caller.getTarget().createTemplateAsyncCallBack(null, null));
             caller.setContext(context);
             this.imageService.createTemplateAsync(tmpl, imageStore, caller);
+            if( !(profile.getIsPublic() || profile.getFeatured()) ){  // If private template then break
+                break;
+            }
         }
         _resourceLimitMgr.incrementResourceCount(profile.getAccountId(), ResourceType.template);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ddf91226/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 91917a0..d2b2afe 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -349,11 +349,10 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
         if (storeUuid != null) {
             imageStore = this._dataStoreMgr.getDataStore(storeUuid, DataStoreRole.Image);
         } else {
-            List<DataStore> stores = this._dataStoreMgr.getImageStoresByScope(new ZoneScope(zoneId));
-            if (stores.size() > 1) {
-                throw new CloudRuntimeException("multiple image stores, don't know which one to use");
+            imageStore = this._dataStoreMgr.getImageStore(zoneId);
+            if (imageStore == null) {
+                throw new CloudRuntimeException("cannot find an image store for zone " + zoneId);
             }
-            imageStore = stores.get(0);
         }
 
         return imageStore;