Updated Branches:
  refs/heads/master f673167d0 -> f28a28dc7

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<[email protected]>


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

Branch: refs/heads/master
Commit: f28a28dc779bd6c7f6598b6944056249eb677904
Parents: f673167
Author: Nitin Mehta <[email protected]>
Authored: Mon Aug 5 17:12:52 2013 +0530
Committer: Nitin Mehta <[email protected]>
Committed: Mon Aug 5 17:43:57 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/f28a28dc/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 13d19d3..fcbc5c9 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/f28a28dc/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/f28a28dc/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 fa591a0..2b52d76 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -360,11 +360,10 @@ public class TemplateManagerImpl extends ManagerBase 
implements TemplateManager,
         if (storeUuid != null) {
             imageStore = _dataStoreMgr.getDataStore(storeUuid, 
DataStoreRole.Image);
         } else {
-            List<DataStore> stores = _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;

Reply via email to