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 2013/04/10 01:36:27 UTC
[2/2] git commit: updated refs/heads/object_store to 3897590
Add check in addImageStoreCmd to guarantee our assumption of homogeneous
image stores.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3897590b
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3897590b
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3897590b
Branch: refs/heads/object_store
Commit: 3897590bb16bd68f3e2e3f2d421f19236697ff11
Parents: b2d5535
Author: Min Chen <mi...@citrix.com>
Authored: Tue Apr 9 16:36:02 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Tue Apr 9 16:36:02 2013 -0700
----------------------------------------------------------------------
.../command/admin/storage/AddImageStoreCmd.java | 14 ++----
.../subsystem/api/storage/DataStoreManager.java | 3 +-
.../subsystem/api/storage/DataStoreProvider.java | 5 ++-
.../subsystem/api/storage/ImageStoreProvider.java | 3 +
.../storage/datastore/db/ImageStoreDao.java | 6 +++
.../manager/ImageStoreProviderManagerImpl.java | 29 +++++++++++-
.../snapshot/strategy/AncientSnapshotStrategy.java | 2 +-
.../storage/datastore/DataStoreManagerImpl.java | 12 ++++-
.../provider/DataStoreProviderManagerImpl.java | 6 +-
.../image/datastore/ImageStoreProviderManager.java | 5 ++-
.../storage/image/db/ImageStoreDaoImpl.java | 34 ++++++++++++---
.../provider/CloudStackImageStoreProviderImpl.java | 11 ++++-
.../provider/S3ImageStoreProviderImpl.java | 10 ++++-
.../provider/SampleImageStoreProviderImpl.java | 10 ++++
.../provider/SwiftImageStoreProviderImpl.java | 10 ++++-
.../src/com/cloud/storage/StorageManagerImpl.java | 26 +++++++----
.../com/cloud/template/TemplateManagerImpl.java | 4 +-
17 files changed, 146 insertions(+), 44 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/api/src/org/apache/cloudstack/api/command/admin/storage/AddImageStoreCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/AddImageStoreCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/AddImageStoreCmd.java
index c5a8c4a..7221f4e 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/storage/AddImageStoreCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/storage/AddImageStoreCmd.java
@@ -48,17 +48,15 @@ public class AddImageStoreCmd extends BaseCmd {
description="the Zone ID for the image store")
private Long zoneId;
+ @Parameter(name=ApiConstants.PROVIDER, type=CommandType.STRING,
+ required=true, description="the image store provider name")
+ private String providerName;
+
@Parameter(name=ApiConstants.DETAILS, type=CommandType.MAP, description="the details for the image store")
private Map<String, String> details;
- @Parameter(name=ApiConstants.SCOPE, type=CommandType.STRING,
- required=false, description="the scope of the image store: zone or region")
- private String scope;
- @Parameter(name=ApiConstants.PROVIDER, type=CommandType.STRING,
- required=false, description="the image store provider name")
- private String providerName;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@@ -76,10 +74,6 @@ public class AddImageStoreCmd extends BaseCmd {
return details;
}
- public String getScope() {
- return this.scope;
- }
-
public String getProviderName() {
return this.providerName;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/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 15e49e1..f940e8e 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
@@ -26,6 +26,7 @@ public interface DataStoreManager {
public DataStore getDataStore(long storeId, DataStoreRole role);
public DataStore getPrimaryDataStore(long storeId);
public DataStore getDataStore(String uuid, DataStoreRole role);
- public List<DataStore> getImageStores(Scope scope);
+ public List<DataStore> getImageStoresByScope(Scope scope);
+ public List<DataStore> getImageStoresByProvider(String provider);
public DataStore registerDataStore(Map<String, String> params, String providerUuid);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProvider.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProvider.java
index 115a52f..083c7d3 100644
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProvider.java
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreProvider.java
@@ -22,6 +22,8 @@ import java.util.Map;
import java.util.Set;
+
+
public interface DataStoreProvider {
public static enum DataStoreProviderType {
PRIMARY,
@@ -33,5 +35,6 @@ public interface DataStoreProvider {
public String getName();
public boolean configure(Map<String, Object> params);
public Set<DataStoreProviderType> getTypes();
-
+
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ImageStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ImageStoreProvider.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ImageStoreProvider.java
index 9a1f69f..9b4b937 100644
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ImageStoreProvider.java
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ImageStoreProvider.java
@@ -18,7 +18,10 @@
*/
package org.apache.cloudstack.engine.subsystem.api.storage;
+import com.cloud.storage.ScopeType;
+
public interface ImageStoreProvider extends DataStoreProvider {
+ public boolean isScopeSupported(ScopeType scope);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/engine/api/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java b/engine/api/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java
index 595e498..fbd0988 100644
--- a/engine/api/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java
+++ b/engine/api/src/org/apache/cloudstack/storage/datastore/db/ImageStoreDao.java
@@ -18,9 +18,15 @@
*/
package org.apache.cloudstack.storage.datastore.db;
+import java.util.List;
+
+
+import com.cloud.storage.ScopeType;
import com.cloud.utils.db.GenericDao;
public interface ImageStoreDao extends GenericDao<ImageStoreVO, Long> {
public ImageStoreVO findByName(String name);
+ public List<ImageStoreVO> findByProvider(String provider);
+ public List<ImageStoreVO> findByScope(ScopeType scope);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageStoreProviderManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageStoreProviderManagerImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageStoreProviderManagerImpl.java
index 9694a4c..642821f 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageStoreProviderManagerImpl.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageStoreProviderManagerImpl.java
@@ -29,6 +29,7 @@ import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager;
import org.apache.cloudstack.engine.subsystem.api.storage.ImageStoreProvider;
+import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
import org.apache.cloudstack.storage.image.ImageStoreDriver;
@@ -53,13 +54,13 @@ public class ImageStoreProviderManagerImpl implements ImageStoreProviderManager
public void config() {
driverMaps = new HashMap<String, ImageStoreDriver>();
}
-
+
@Override
public ImageStoreEntity getImageStore(long dataStoreId) {
ImageStoreVO dataStore = dataStoreDao.findById(dataStoreId);
String providerName = dataStore.getProviderName();
ImageStoreProvider provider = (ImageStoreProvider)providerManager.getDataStoreProvider(providerName);
- ImageStoreEntity imgStore = ImageStoreImpl.getDataStore(dataStore,
+ ImageStoreEntity imgStore = ImageStoreImpl.getDataStore(dataStore,
driverMaps.get(provider.getName()), provider
);
// TODO Auto-generated method stub
@@ -82,7 +83,7 @@ public class ImageStoreProviderManagerImpl implements ImageStoreProviderManager
}
@Override
- public List<DataStore> getList() {
+ public List<DataStore> listImageStores() {
List<ImageStoreVO> stores = dataStoreDao.listAll();
List<DataStore> imageStores = new ArrayList<DataStore>();
for (ImageStoreVO store : stores) {
@@ -91,4 +92,26 @@ public class ImageStoreProviderManagerImpl implements ImageStoreProviderManager
return imageStores;
}
+ @Override
+ public List<DataStore> listImageStoresByScope(Scope scope) {
+ List<ImageStoreVO> stores = dataStoreDao.findByScope(scope.getScopeType());
+ List<DataStore> imageStores = new ArrayList<DataStore>();
+ for (ImageStoreVO store : stores) {
+ imageStores.add(getImageStore(store.getId()));
+ }
+ return imageStores;
+ }
+
+ @Override
+ public List<DataStore> listImageStoreByProvider(String provider) {
+ List<ImageStoreVO> stores = dataStoreDao.findByProvider(provider);
+ List<DataStore> imageStores = new ArrayList<DataStore>();
+ for (ImageStoreVO store : stores) {
+ imageStores.add(getImageStore(store.getId()));
+ }
+ return imageStores;
+ }
+
+
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/AncientSnapshotStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/AncientSnapshotStrategy.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/AncientSnapshotStrategy.java
index 9e666d2..3863481 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/AncientSnapshotStrategy.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/AncientSnapshotStrategy.java
@@ -406,7 +406,7 @@ public class AncientSnapshotStrategy implements SnapshotStrategy {
snapObj.processEvent(Snapshot.Event.BackupToSecondary);
ZoneScope scope = new ZoneScope(snapshot.getDataCenterId());
- List<DataStore> stores = this.dataStoreMgr.getImageStores(scope);
+ List<DataStore> stores = this.dataStoreMgr.getImageStoresByScope(scope);
if (stores.size() != 1) {
throw new CloudRuntimeException("find out more than one image stores");
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/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 8c22767..8f8d3c9 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
@@ -62,10 +62,18 @@ public class DataStoreManagerImpl implements DataStoreManager {
}
throw new CloudRuntimeException("un recognized type" + role);
}
+
+ @Override
+ public List<DataStore> getImageStoresByScope(Scope scope) {
+ return imageDataStoreMgr.listImageStoresByScope(scope);
+ }
+
+
@Override
- public List<DataStore> getImageStores(Scope scope) {
- return imageDataStoreMgr.getList();
+ public List<DataStore> getImageStoresByProvider(String provider) {
+ return imageDataStoreMgr.listImageStoreByProvider(provider);
}
+
@Override
public DataStore getPrimaryDataStore(long storeId) {
return primaryStorMgr.getPrimaryDataStore(storeId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
index 624c7c7..b7ed53d 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
@@ -65,7 +65,7 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto
return null;
}
- public List<StorageProviderResponse> getPrimayrDataStoreProviders() {
+ public List<StorageProviderResponse> getPrimaryDataStoreProviders() {
List<StorageProviderResponse> providers = new ArrayList<StorageProviderResponse>();
for (DataStoreProvider provider : providerMap.values()) {
if (provider instanceof PrimaryDataStoreProvider) {
@@ -139,7 +139,7 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto
@Override
public DataStoreProvider getDefaultImageDataStoreProvider() {
- return this.getDataStoreProvider("cloudstack image store provider");
+ return this.getDataStoreProvider("CloudStack ImageStore Provider");
}
@Override
@@ -148,7 +148,7 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto
throw new InvalidParameterValueException("Invalid parameter, need to specify type: either primary or image");
}
if (type.equalsIgnoreCase(DataStoreProvider.DataStoreProviderType.PRIMARY.toString())) {
- return this.getPrimayrDataStoreProviders();
+ return this.getPrimaryDataStoreProviders();
} else if (type.equalsIgnoreCase(DataStoreProvider.DataStoreProviderType.IMAGE.toString())) {
return this.getImageDataStoreProviders();
} else {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreProviderManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreProviderManager.java b/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreProviderManager.java
index d9a733d..bb5e20f 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreProviderManager.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/datastore/ImageStoreProviderManager.java
@@ -21,11 +21,14 @@ package org.apache.cloudstack.storage.image.datastore;
import java.util.List;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
import org.apache.cloudstack.storage.image.ImageStoreDriver;
public interface ImageStoreProviderManager {
ImageStoreEntity getImageStore(long dataStoreId);
ImageStoreEntity getImageStore(String uuid);
- List<DataStore> getList();
+ List<DataStore> listImageStores();
+ List<DataStore> listImageStoresByScope(Scope scope);
+ List<DataStore> listImageStoreByProvider(String provider);
boolean registerDriver(String uuid, ImageStoreDriver driver);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageStoreDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageStoreDaoImpl.java
index 605ac5b..ab41a4b 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageStoreDaoImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageStoreDaoImpl.java
@@ -18,31 +18,29 @@
*/
package org.apache.cloudstack.storage.image.db;
+import java.util.List;
import java.util.Map;
import javax.naming.ConfigurationException;
+
import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
-import org.apache.cloudstack.storage.datastore.db.SnapshotDataStoreVO;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
-import com.cloud.storage.ImageStore;
-import com.cloud.user.AccountVO;
-import com.cloud.utils.db.DB;
+import com.cloud.storage.ScopeType;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.SearchCriteria2;
-import com.cloud.utils.db.SearchCriteriaService;
-import com.cloud.utils.db.SearchCriteria.Op;
@Component
public class ImageStoreDaoImpl extends GenericDaoBase<ImageStoreVO, Long> implements ImageStoreDao {
private static final Logger s_logger = Logger.getLogger(ImageStoreDaoImpl.class);
private SearchBuilder<ImageStoreVO> nameSearch;
+ private SearchBuilder<ImageStoreVO> providerSearch;
+ private SearchBuilder<ImageStoreVO> scopeSearch;
@Override
@@ -53,6 +51,14 @@ public class ImageStoreDaoImpl extends GenericDaoBase<ImageStoreVO, Long> implem
nameSearch.and("name", nameSearch.entity().getName(), SearchCriteria.Op.EQ);
nameSearch.done();
+ providerSearch = createSearchBuilder();
+ providerSearch.and("providerName", providerSearch.entity().getProviderName(), SearchCriteria.Op.EQ);
+ providerSearch.done();
+
+ scopeSearch = createSearchBuilder();
+ scopeSearch.and("scope", scopeSearch.entity().getScope(), SearchCriteria.Op.EQ);
+ scopeSearch.done();
+
return true;
}
@@ -63,5 +69,19 @@ public class ImageStoreDaoImpl extends GenericDaoBase<ImageStoreVO, Long> implem
return findOneBy(sc);
}
+ @Override
+ public List<ImageStoreVO> findByProvider(String provider) {
+ SearchCriteria<ImageStoreVO> sc = providerSearch.create();
+ sc.setParameters("providerName", provider);
+ return listBy(sc);
+ }
+
+ @Override
+ public List<ImageStoreVO> findByScope(ScopeType scope) {
+ SearchCriteria<ImageStoreVO> sc = scopeSearch.create();
+ sc.setParameters("scope", scope);
+ return listBy(sc);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/provider/CloudStackImageStoreProviderImpl.java
----------------------------------------------------------------------
diff --git a/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/provider/CloudStackImageStoreProviderImpl.java b/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/provider/CloudStackImageStoreProviderImpl.java
index 058dd27..e025cf4 100644
--- a/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/provider/CloudStackImageStoreProviderImpl.java
+++ b/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/provider/CloudStackImageStoreProviderImpl.java
@@ -35,12 +35,13 @@ import org.apache.cloudstack.storage.image.datastore.ImageStoreProviderManager;
import org.apache.cloudstack.storage.image.store.lifecycle.ImageStoreLifeCycle;
import org.springframework.stereotype.Component;
+import com.cloud.storage.ScopeType;
import com.cloud.utils.component.ComponentContext;
@Component
public class CloudStackImageStoreProviderImpl implements ImageStoreProvider {
- private final String providerName = "cloudstack image store provider";
+ private final String providerName = "CloudStack ImageStore Provider";
protected ImageStoreLifeCycle lifeCycle;
protected ImageStoreDriver driver;
@Inject
@@ -85,4 +86,12 @@ public class CloudStackImageStoreProviderImpl implements ImageStoreProvider {
return types;
}
+ @Override
+ public boolean isScopeSupported(ScopeType scope) {
+ if ( scope == ScopeType.ZONE)
+ return true;
+ return false;
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/provider/S3ImageStoreProviderImpl.java
----------------------------------------------------------------------
diff --git a/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/provider/S3ImageStoreProviderImpl.java b/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/provider/S3ImageStoreProviderImpl.java
index 820882d..ba27d61 100644
--- a/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/provider/S3ImageStoreProviderImpl.java
+++ b/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/provider/S3ImageStoreProviderImpl.java
@@ -44,7 +44,7 @@ import com.cloud.utils.component.ComponentContext;
@Component
public class S3ImageStoreProviderImpl implements ImageStoreProvider {
- private final String providerName = "S3 image store provider";
+ private final String providerName = "S3";
protected ImageStoreLifeCycle lifeCycle;
protected ImageStoreDriver driver;
@Inject
@@ -87,4 +87,12 @@ public class S3ImageStoreProviderImpl implements ImageStoreProvider {
return types;
}
+ @Override
+ public boolean isScopeSupported(ScopeType scope) {
+ if ( scope == ScopeType.REGION )
+ return true;
+ return false;
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/plugins/storage/image/sample/src/org/apache/cloudstack/storage/datastore/provider/SampleImageStoreProviderImpl.java
----------------------------------------------------------------------
diff --git a/plugins/storage/image/sample/src/org/apache/cloudstack/storage/datastore/provider/SampleImageStoreProviderImpl.java b/plugins/storage/image/sample/src/org/apache/cloudstack/storage/datastore/provider/SampleImageStoreProviderImpl.java
index 073a157..eadb01d 100644
--- a/plugins/storage/image/sample/src/org/apache/cloudstack/storage/datastore/provider/SampleImageStoreProviderImpl.java
+++ b/plugins/storage/image/sample/src/org/apache/cloudstack/storage/datastore/provider/SampleImageStoreProviderImpl.java
@@ -34,6 +34,7 @@ import org.apache.cloudstack.storage.image.ImageStoreDriver;
import org.apache.cloudstack.storage.image.datastore.ImageStoreProviderManager;
import org.apache.cloudstack.storage.image.store.lifecycle.ImageStoreLifeCycle;
+import com.cloud.storage.ScopeType;
import com.cloud.utils.component.ComponentContext;
public class SampleImageStoreProviderImpl implements ImageStoreProvider {
@@ -79,4 +80,13 @@ public class SampleImageStoreProviderImpl implements ImageStoreProvider {
public HypervisorHostListener getHostListener() {
return null;
}
+
+ @Override
+ public boolean isScopeSupported(ScopeType scope) {
+ if ( scope == ScopeType.ZONE)
+ return true;
+ return false;
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/provider/SwiftImageStoreProviderImpl.java
----------------------------------------------------------------------
diff --git a/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/provider/SwiftImageStoreProviderImpl.java b/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/provider/SwiftImageStoreProviderImpl.java
index 625fcff..09f09c4 100644
--- a/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/provider/SwiftImageStoreProviderImpl.java
+++ b/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/provider/SwiftImageStoreProviderImpl.java
@@ -44,7 +44,7 @@ import com.cloud.utils.component.ComponentContext;
@Component
public class SwiftImageStoreProviderImpl implements ImageStoreProvider {
- private final String providerName = "Swift image store provider";
+ private final String providerName = "Swift";
protected ImageStoreLifeCycle lifeCycle;
protected ImageStoreDriver driver;
@Inject
@@ -89,4 +89,12 @@ public class SwiftImageStoreProviderImpl implements ImageStoreProvider {
return types;
}
+ @Override
+ public boolean isScopeSupported(ScopeType scope) {
+ if ( scope == ScopeType.REGION )
+ return true;
+ return false;
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java
index ca4c636..7724968 100755
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@ -56,6 +56,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole;
import org.apache.cloudstack.engine.subsystem.api.storage.HostScope;
import org.apache.cloudstack.engine.subsystem.api.storage.HypervisorHostListener;
import org.apache.cloudstack.engine.subsystem.api.storage.ImageDataFactory;
+import org.apache.cloudstack.engine.subsystem.api.storage.ImageStoreProvider;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
@@ -1922,18 +1923,23 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
Long dcId = cmd.getZoneId();
String url = cmd.getUrl();
Map details = cmd.getDetails();
+ ScopeType scopeType = ScopeType.ZONE;
+ if ( dcId == null ){
+ scopeType = ScopeType.REGION;
+ }
- ScopeType scopeType = null;
- String scope = cmd.getScope();
- if (scope != null) {
- try {
- scopeType = Enum.valueOf(ScopeType.class, scope.toUpperCase());
- } catch (Exception e) {
- throw new InvalidParameterValueException("invalid scope" + scope);
- }
+ // check if scope is supported by store provider
+ if ( !((ImageStoreProvider)storeProvider).isScopeSupported(scopeType)){
+ throw new InvalidParameterValueException("Image store provider " + providerName + " does not support scope " + scopeType);
}
- if (scopeType == ScopeType.ZONE && dcId == null) {
- throw new InvalidParameterValueException("zone id can't be null, if scope is zone");
+
+ // check if we have already image stores from other different providers, we currently are not supporting image stores from different
+ // providers co-existing
+ List<ImageStoreVO> imageStores = _imageStoreDao.listAll();
+ for ( ImageStoreVO store : imageStores){
+ if (!store.getProviderName().equalsIgnoreCase(providerName)){
+ throw new InvalidParameterValueException("You can only add new image stores from the same provider " + store.getProviderName() + " already added");
+ }
}
if (dcId != null) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3897590b/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 2892e00..f4ad36e 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -325,7 +325,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
if (storeUuid != null) {
imageStore = this.dataStoreMgr.getDataStore(storeUuid, DataStoreRole.Image);
} else {
- List<DataStore> stores = this.dataStoreMgr.getImageStores(new ZoneScope(zoneId));
+ 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");
}
@@ -1718,7 +1718,7 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
TemplateInfo tmplInfo = this.tmplFactory.getTemplate(templateId);
snapshot = _snapshotDao.findById(snapshotId);
ZoneScope scope = new ZoneScope(snapshot.getDataCenterId());
- List<DataStore> store = this.dataStoreMgr.getImageStores(scope);
+ List<DataStore> store = this.dataStoreMgr.getImageStoresByScope(scope);
if (store.size() > 1) {
throw new CloudRuntimeException("muliple image data store, don't know which one to use");
}