From f1134da8df122aeb95cb59f3aa47438709efd30f Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Wed, 26 Jun 2013 18:59:59 +0530 Subject: [PATCH] Group storage subsystem components for spring Breaking down storage components among oss, nonoss and simulator contexts. The default components are loaded by OSS - applicationContext + componentContext NonOSS - applicationContext + nonossComponentContext Simulator - applicationContext + simulatorComponentContext provider beans are are selectively overridden for simpler configuration. Where possible beans are loaded by local reference. does not unfortunately work perfectly for bean merging the providers causing a bit of bloat. Explore for later. Signed-off-by: Prasanna Santhanam --- client/pom.xml | 7 +- client/tomcatconf/applicationContext.xml.in | 181 ++++++++++++------ client/tomcatconf/componentContext.xml.in | 27 ++- .../tomcatconf/nonossComponentContext.xml.in | 31 ++- .../simulatorComponentContext.xml.in | 49 ++--- developer/pom.xml | 6 + .../storage/motion/DataMotionServiceImpl.java | 18 +- .../test/resource/storageContext.xml | 3 +- .../datastore/DataStoreManagerImpl.java | 29 +-- .../DataStoreProviderManagerImpl.java | 36 ++-- 10 files changed, 256 insertions(+), 131 deletions(-) diff --git a/client/pom.xml b/client/pom.xml index d1eeb3b0e52..222c5208534 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -273,7 +273,12 @@ org.apache.cloudstack cloud-plugin-storage-image-swift ${project.version} - + + + org.apache.cloudstack + cloud-plugin-storage-image-simulator + ${project.version} + org.apache.cloudstack cloud-plugin-syslog-alerts diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in index 5c61b4e2529..3d5d4fab16c 100644 --- a/client/tomcatconf/applicationContext.xml.in +++ b/client/tomcatconf/applicationContext.xml.in @@ -17,16 +17,14 @@ under the License. --> @@ -613,7 +611,96 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -622,15 +709,15 @@ - + - - + + - + @@ -638,7 +725,7 @@ - + @@ -653,7 +740,7 @@ - + @@ -664,9 +751,9 @@ - + - + @@ -685,7 +772,7 @@ - + @@ -724,17 +811,14 @@ + + - - - - - @@ -747,46 +831,24 @@ - - - - - - + + - - - - - - - - - - - - + + - - - - - + - - - - @@ -796,21 +858,18 @@ + + + + + + + - - - - - - - - - - diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in index d2c2dee83dd..a149327f601 100644 --- a/client/tomcatconf/componentContext.xml.in +++ b/client/tomcatconf/componentContext.xml.in @@ -18,9 +18,9 @@ under the License. --> + + +--> + + + + + + + + + + + + + + + diff --git a/client/tomcatconf/nonossComponentContext.xml.in b/client/tomcatconf/nonossComponentContext.xml.in index 7b65e71e39d..4ea1d31b684 100644 --- a/client/tomcatconf/nonossComponentContext.xml.in +++ b/client/tomcatconf/nonossComponentContext.xml.in @@ -80,7 +80,6 @@ - +--> + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/tomcatconf/simulatorComponentContext.xml.in b/client/tomcatconf/simulatorComponentContext.xml.in index cfe0a9af4b0..74312fe5c5e 100644 --- a/client/tomcatconf/simulatorComponentContext.xml.in +++ b/client/tomcatconf/simulatorComponentContext.xml.in @@ -18,17 +18,8 @@ --> + http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> - - - @@ -47,6 +34,23 @@ + + + + + + + + + + + + + + + @@ -85,7 +89,6 @@ - @@ -124,10 +127,6 @@ - - @@ -175,9 +174,6 @@ - @@ -206,11 +202,6 @@ - @@ -218,7 +209,8 @@ - + + @@ -244,5 +236,4 @@ - diff --git a/developer/pom.xml b/developer/pom.xml index a680b8aa98e..e9284f44109 100644 --- a/developer/pom.xml +++ b/developer/pom.xml @@ -58,6 +58,12 @@ ${project.version} compile + + org.apache.cloudstack + cloud-plugin-storage-image-simulator + ${project.version} + compile + install diff --git a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java index 22de0b25279..c1cbdc772cc 100644 --- a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java +++ b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/DataMotionServiceImpl.java @@ -18,11 +18,9 @@ */ package org.apache.cloudstack.storage.motion; -import java.util.List; -import java.util.Map; - -import javax.inject.Inject; - +import com.cloud.agent.api.to.VirtualMachineTO; +import com.cloud.host.Host; +import com.cloud.utils.exception.CloudRuntimeException; import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult; import org.apache.cloudstack.engine.subsystem.api.storage.DataMotionService; import org.apache.cloudstack.engine.subsystem.api.storage.DataMotionStrategy; @@ -32,9 +30,9 @@ import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; import org.apache.cloudstack.framework.async.AsyncCompletionCallback; import org.springframework.stereotype.Component; -import com.cloud.agent.api.to.VirtualMachineTO; -import com.cloud.host.Host; -import com.cloud.utils.exception.CloudRuntimeException; +import javax.inject.Inject; +import java.util.List; +import java.util.Map; @Component public class DataMotionServiceImpl implements DataMotionService { @@ -72,4 +70,8 @@ public class DataMotionServiceImpl implements DataMotionService { } throw new CloudRuntimeException("can't find strategy to move data"); } + + public void setStrategies(List strategies) { + this.strategies = strategies; + } } diff --git a/engine/storage/integration-test/test/resource/storageContext.xml b/engine/storage/integration-test/test/resource/storageContext.xml index 9f4f102edec..f9c891a036f 100644 --- a/engine/storage/integration-test/test/resource/storageContext.xml +++ b/engine/storage/integration-test/test/resource/storageContext.xml @@ -81,7 +81,8 @@ - + + 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 b92f92f655e..71df262dc85 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java @@ -18,11 +18,9 @@ */ package org.apache.cloudstack.storage.datastore; -import java.util.List; -import java.util.Map; - -import javax.inject.Inject; - +import com.cloud.storage.DataStoreRole; +import com.cloud.utils.exception.CloudRuntimeException; +import edu.emory.mathcs.backport.java.util.Collections; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.cloudstack.engine.subsystem.api.storage.Scope; @@ -30,22 +28,20 @@ import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope; import org.apache.cloudstack.storage.image.datastore.ImageStoreProviderManager; import org.springframework.stereotype.Component; -import com.cloud.storage.DataStoreRole; -import com.cloud.utils.exception.CloudRuntimeException; - -import edu.emory.mathcs.backport.java.util.Collections; +import javax.inject.Inject; +import java.util.List; @Component public class DataStoreManagerImpl implements DataStoreManager { @Inject - PrimaryDataStoreProviderManager primaryStorMgr; + PrimaryDataStoreProviderManager primaryStoreMgr; @Inject ImageStoreProviderManager imageDataStoreMgr; @Override public DataStore getDataStore(long storeId, DataStoreRole role) { if (role == DataStoreRole.Primary) { - return primaryStorMgr.getPrimaryDataStore(storeId); + return primaryStoreMgr.getPrimaryDataStore(storeId); } else if (role == DataStoreRole.Image) { return imageDataStoreMgr.getImageStore(storeId); } else if (role == DataStoreRole.ImageCache) { @@ -57,7 +53,7 @@ public class DataStoreManagerImpl implements DataStoreManager { @Override public DataStore getDataStore(String uuid, DataStoreRole role) { if (role == DataStoreRole.Primary) { - return primaryStorMgr.getPrimaryDataStore(uuid); + return primaryStoreMgr.getPrimaryDataStore(uuid); } else if (role == DataStoreRole.Image) { return imageDataStoreMgr.getImageStore(uuid); } @@ -81,7 +77,7 @@ public class DataStoreManagerImpl implements DataStoreManager { @Override public DataStore getPrimaryDataStore(long storeId) { - return primaryStorMgr.getPrimaryDataStore(storeId); + return primaryStoreMgr.getPrimaryDataStore(storeId); } @Override @@ -94,4 +90,11 @@ public class DataStoreManagerImpl implements DataStoreManager { return imageDataStoreMgr.listImageStores(); } + public void setPrimaryStoreMgr(PrimaryDataStoreProviderManager primaryStoreMgr) { + this.primaryStoreMgr = primaryStoreMgr; + } + + public void setImageDataStoreMgr(ImageStoreProviderManager imageDataStoreMgr) { + this.imageDataStoreMgr = imageDataStoreMgr; + } } 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 50238a89a70..92b4e7a5479 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 @@ -18,15 +18,8 @@ */ package org.apache.cloudstack.storage.datastore.provider; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.inject.Inject; -import javax.naming.ConfigurationException; - +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.utils.component.ManagerBase; import org.apache.cloudstack.api.response.StorageProviderResponse; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider.DataStoreProviderType; @@ -38,8 +31,13 @@ import org.apache.cloudstack.storage.image.datastore.ImageStoreProviderManager; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.utils.component.ManagerBase; +import javax.inject.Inject; +import javax.naming.ConfigurationException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; @Component public class DataStoreProviderManagerImpl extends ManagerBase implements DataStoreProviderManager { @@ -50,7 +48,7 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto @Inject PrimaryDataStoreProviderManager primaryDataStoreProviderMgr; @Inject - ImageStoreProviderManager imageDataStoreProviderMgr; + ImageStoreProviderManager imageStoreProviderMgr; @Override public DataStoreProvider getDataStoreProvider(String name) { @@ -125,7 +123,7 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto (PrimaryDataStoreDriver) provider.getDataStoreDriver()); primaryDataStoreProviderMgr.registerHostListener(provider.getName(), provider.getHostListener()); } else if (types.contains(DataStoreProviderType.IMAGE)) { - imageDataStoreProviderMgr.registerDriver(provider.getName(), + imageStoreProviderMgr.registerDriver(provider.getName(), (ImageStoreDriver) provider.getDataStoreDriver()); } } catch (Exception e) { @@ -168,4 +166,16 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto throw new InvalidParameterValueException("Invalid parameter: " + type); } } + + public void setProviders(List providers) { + this.providers = providers; + } + + public void setPrimaryDataStoreProviderMgr(PrimaryDataStoreProviderManager primaryDataStoreProviderMgr) { + this.primaryDataStoreProviderMgr = primaryDataStoreProviderMgr; + } + + public void setImageStoreProviderMgr(ImageStoreProviderManager imageDataStoreProviderMgr) { + this.imageStoreProviderMgr = imageDataStoreProviderMgr; + } }