You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2013/02/21 20:15:16 UTC
[31/45] squash changes into one giant patch
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/AncientImageDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/AncientImageDataStoreDriverImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/AncientImageDataStoreDriverImpl.java
new file mode 100644
index 0000000..2c19c7f
--- /dev/null
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/AncientImageDataStoreDriverImpl.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.image.driver;
+
+import java.util.List;
+import java.util.Set;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult;
+import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
+import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
+import org.apache.cloudstack.framework.async.AsyncRpcConext;
+import org.apache.cloudstack.storage.image.ImageDataStoreDriver;
+import org.apache.log4j.Logger;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.storage.DeleteVolumeCommand;
+import com.cloud.host.HostVO;
+import com.cloud.host.dao.HostDao;
+import com.cloud.storage.RegisterVolumePayload;
+import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.storage.VMTemplateStorageResourceAssoc;
+import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.VMTemplateZoneVO;
+import com.cloud.storage.VolumeHostVO;
+import com.cloud.storage.VolumeVO;
+import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.storage.dao.VMTemplateHostDao;
+import com.cloud.storage.dao.VMTemplateZoneDao;
+import com.cloud.storage.dao.VolumeDao;
+import com.cloud.storage.dao.VolumeHostDao;
+import com.cloud.storage.download.DownloadMonitor;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+public class AncientImageDataStoreDriverImpl implements ImageDataStoreDriver {
+ private static final Logger s_logger = Logger
+ .getLogger(AncientImageDataStoreDriverImpl.class);
+ @Inject
+ VMTemplateZoneDao templateZoneDao;
+ @Inject
+ VMTemplateDao templateDao;
+ @Inject DownloadMonitor _downloadMonitor;
+ @Inject
+ VMTemplateHostDao _vmTemplateHostDao;
+ @Inject VolumeDao volumeDao;
+ @Inject VolumeHostDao volumeHostDao;
+ @Inject HostDao hostDao;
+ @Inject AgentManager agentMgr;
+ @Override
+ public String grantAccess(DataObject data, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean revokeAccess(DataObject data, EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public Set<DataObject> listObjects(DataStore store) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ class CreateContext<T> extends AsyncRpcConext<T> {
+ final DataObject data;
+ public CreateContext(AsyncCompletionCallback<T> callback, DataObject data) {
+ super(callback);
+ this.data = data;
+ }
+ }
+
+ @Override
+ public void createAsync(DataObject data,
+ AsyncCompletionCallback<CreateCmdResult> callback) {
+ if (data.getType() == DataObjectType.TEMPLATE) {
+ List<VMTemplateZoneVO> templateZones = this.templateZoneDao.listByTemplateId(data.getId());
+ for (VMTemplateZoneVO templateZone : templateZones) {
+ VMTemplateVO template = this.templateDao.findById(data.getId());
+ _downloadMonitor.downloadTemplateToStorage(template, templateZone.getZoneId());
+ }
+ } else if (data.getType() == DataObjectType.VOLUME) {
+ VolumeVO vol = this.volumeDao.findById(data.getId());
+ VolumeInfo volInfo = (VolumeInfo)data;
+ RegisterVolumePayload payload = (RegisterVolumePayload)volInfo.getpayload();
+ _downloadMonitor.downloadVolumeToStorage(vol, vol.getDataCenterId(), payload.getUrl(),
+ payload.getChecksum(), ImageFormat.valueOf(payload.getFormat().toUpperCase()));
+ }
+
+ CreateCmdResult result = new CreateCmdResult(null, null);
+ callback.complete(result);
+ }
+
+ private void deleteVolume(DataObject data, AsyncCompletionCallback<CommandResult> callback) {
+ // TODO Auto-generated method stub
+ VolumeVO vol = volumeDao.findById(data.getId());
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Expunging " + vol);
+ }
+
+ // Find out if the volume is present on secondary storage
+ VolumeHostVO volumeHost = volumeHostDao.findByVolumeId(vol.getId());
+ if (volumeHost != null) {
+ if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
+ HostVO ssHost = hostDao.findById(volumeHost.getHostId());
+ DeleteVolumeCommand dtCommand = new DeleteVolumeCommand(
+ ssHost.getStorageUrl(), volumeHost.getInstallPath());
+ Answer answer = agentMgr.sendToSecStorage(ssHost, dtCommand);
+ if (answer == null || !answer.getResult()) {
+ s_logger.debug("Failed to delete "
+ + volumeHost
+ + " due to "
+ + ((answer == null) ? "answer is null" : answer
+ .getDetails()));
+ return;
+ }
+ } else if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS) {
+ s_logger.debug("Volume: " + vol.getName()
+ + " is currently being uploaded; cant' delete it.");
+ throw new CloudRuntimeException(
+ "Please specify a volume that is not currently being uploaded.");
+ }
+ volumeHostDao.remove(volumeHost.getId());
+ volumeDao.remove(vol.getId());
+ CommandResult result = new CommandResult();
+ callback.complete(result);
+ return;
+ }
+ }
+
+ private void deleteTemplate(DataObject data, AsyncCompletionCallback<CommandResult> callback) {
+
+ }
+
+ @Override
+ public void deleteAsync(DataObject data,
+ AsyncCompletionCallback<CommandResult> callback) {
+ if (data.getType() == DataObjectType.VOLUME) {
+ deleteVolume(data, callback);
+ } else if (data.getType() == DataObjectType.TEMPLATE) {
+ deleteTemplate(data, callback);
+ }
+
+
+
+ }
+
+ @Override
+ public void copyAsync(DataObject srcdata, DataObject destData,
+ AsyncCompletionCallback<CopyCommandResult> callback) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public boolean canCopy(DataObject srcData, DataObject destData) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/DefaultImageDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/DefaultImageDataStoreDriverImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/DefaultImageDataStoreDriverImpl.java
index dce5a93..1a506fa 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/DefaultImageDataStoreDriverImpl.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/driver/DefaultImageDataStoreDriverImpl.java
@@ -34,15 +34,15 @@ import org.apache.cloudstack.storage.command.CreateObjectAnswer;
import org.apache.cloudstack.storage.command.CreateObjectCommand;
import org.apache.cloudstack.storage.endpoint.EndPointSelector;
import org.apache.cloudstack.storage.image.ImageDataStoreDriver;
-import org.apache.cloudstack.storage.image.db.ImageDataDao;
-import org.apache.cloudstack.storage.image.db.ImageDataVO;
+
+import com.cloud.storage.dao.VMTemplateDao;
//http-read-only based image store
public class DefaultImageDataStoreDriverImpl implements ImageDataStoreDriver {
@Inject
EndPointSelector selector;
@Inject
- ImageDataDao imageDataDao;
+ VMTemplateDao imageDataDao;
public DefaultImageDataStoreDriverImpl() {
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataManager.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataManager.java
index e5a6863..e1fd46b 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataManager.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataManager.java
@@ -18,13 +18,13 @@
*/
package org.apache.cloudstack.storage.image.manager;
-import org.apache.cloudstack.storage.image.TemplateEvent;
-import org.apache.cloudstack.storage.image.TemplateState;
-import org.apache.cloudstack.storage.image.db.ImageDataVO;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateEvent;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState;
+import com.cloud.storage.VMTemplateVO;
import com.cloud.utils.fsm.StateMachine2;
public interface ImageDataManager {
- StateMachine2<TemplateState, TemplateEvent, ImageDataVO> getStateMachine();
+ StateMachine2<TemplateState, TemplateEvent, VMTemplateVO> getStateMachine();
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataManagerImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataManagerImpl.java
index d90f2b6..83e9887 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataManagerImpl.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataManagerImpl.java
@@ -18,17 +18,17 @@
*/
package org.apache.cloudstack.storage.image.manager;
-import org.apache.cloudstack.storage.image.TemplateEvent;
-import org.apache.cloudstack.storage.image.TemplateState;
-import org.apache.cloudstack.storage.image.db.ImageDataVO;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateEvent;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState;
import org.springframework.stereotype.Component;
+import com.cloud.storage.VMTemplateVO;
import com.cloud.utils.fsm.StateMachine2;
@Component
public class ImageDataManagerImpl implements ImageDataManager {
- private final StateMachine2<TemplateState, TemplateEvent, ImageDataVO>
- stateMachine = new StateMachine2<TemplateState, TemplateEvent, ImageDataVO>();
+ private final StateMachine2<TemplateState, TemplateEvent, VMTemplateVO>
+ stateMachine = new StateMachine2<TemplateState, TemplateEvent, VMTemplateVO>();
public ImageDataManagerImpl() {
stateMachine.addTransition(TemplateState.Allocated, TemplateEvent.CreateRequested, TemplateState.Creating);
@@ -44,7 +44,7 @@ public class ImageDataManagerImpl implements ImageDataManager {
}
@Override
- public StateMachine2<TemplateState, TemplateEvent, ImageDataVO> getStateMachine() {
+ public StateMachine2<TemplateState, TemplateEvent, VMTemplateVO> getStateMachine() {
return stateMachine;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataStoreManagerImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataStoreManagerImpl.java
index 68a2770..2771f78 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataStoreManagerImpl.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/manager/ImageDataStoreManagerImpl.java
@@ -18,38 +18,48 @@
*/
package org.apache.cloudstack.storage.image.manager;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import javax.annotation.PostConstruct;
import javax.inject.Inject;
-import org.apache.cloudstack.storage.datastore.provider.DataStoreProviderManager;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager;
import org.apache.cloudstack.storage.datastore.provider.ImageDataStoreProvider;
import org.apache.cloudstack.storage.image.ImageDataStoreDriver;
import org.apache.cloudstack.storage.image.datastore.ImageDataStore;
import org.apache.cloudstack.storage.image.datastore.ImageDataStoreManager;
-import org.apache.cloudstack.storage.image.db.ImageDataDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
-import org.apache.cloudstack.storage.image.store.HttpDataStoreImpl;
+import org.apache.cloudstack.storage.image.store.DefaultImageDataStoreImpl;
import org.springframework.stereotype.Component;
+import com.cloud.storage.dao.VMTemplateDao;
+
@Component
public class ImageDataStoreManagerImpl implements ImageDataStoreManager {
@Inject
ImageDataStoreDao dataStoreDao;
@Inject
- ImageDataDao imageDataDao;
+ VMTemplateDao imageDataDao;
@Inject
DataStoreProviderManager providerManager;
- Map<String, ImageDataStoreDriver> driverMaps = new HashMap<String, ImageDataStoreDriver>();
+ Map<String, ImageDataStoreDriver> driverMaps;
+ @PostConstruct
+ public void config() {
+ driverMaps = new HashMap<String, ImageDataStoreDriver>();
+ }
+
@Override
public ImageDataStore getImageDataStore(long dataStoreId) {
ImageDataStoreVO dataStore = dataStoreDao.findById(dataStoreId);
long providerId = dataStore.getProvider();
ImageDataStoreProvider provider = (ImageDataStoreProvider)providerManager.getDataStoreProviderById(providerId);
- ImageDataStore imgStore = HttpDataStoreImpl.getDataStore(dataStore,
+ ImageDataStore imgStore = DefaultImageDataStoreImpl.getDataStore(dataStore,
driverMaps.get(provider.getUuid()), provider
);
// TODO Auto-generated method stub
@@ -65,4 +75,20 @@ public class ImageDataStoreManagerImpl implements ImageDataStoreManager {
return true;
}
+ @Override
+ public ImageDataStore getImageDataStore(String uuid) {
+ ImageDataStoreVO dataStore = dataStoreDao.findByUuid(uuid);
+ return getImageDataStore(dataStore.getId());
+ }
+
+ @Override
+ public List<DataStore> getList() {
+ List<ImageDataStoreVO> stores = dataStoreDao.listAll();
+ List<DataStore> imageStores = new ArrayList<DataStore>();
+ for (ImageDataStoreVO store : stores) {
+ imageStores.add(getImageDataStore(store.getId()));
+ }
+ return imageStores;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/image/src/org/apache/cloudstack/storage/image/store/AncientImageDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/AncientImageDataStoreProvider.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/AncientImageDataStoreProvider.java
new file mode 100644
index 0000000..b2ee9ab
--- /dev/null
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/AncientImageDataStoreProvider.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.image.store;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreLifeCycle;
+import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType;
+import org.apache.cloudstack.storage.datastore.provider.ImageDataStoreProvider;
+import org.apache.cloudstack.storage.image.ImageDataStoreDriver;
+import org.apache.cloudstack.storage.image.datastore.ImageDataStoreHelper;
+import org.apache.cloudstack.storage.image.datastore.ImageDataStoreManager;
+import org.apache.cloudstack.storage.image.driver.AncientImageDataStoreDriverImpl;
+import org.apache.cloudstack.storage.image.store.lifecycle.DefaultImageDataStoreLifeCycle;
+import org.apache.cloudstack.storage.image.store.lifecycle.ImageDataStoreLifeCycle;
+import org.springframework.stereotype.Component;
+
+import com.cloud.utils.component.ComponentContext;
+
+@Component
+public class AncientImageDataStoreProvider implements ImageDataStoreProvider {
+
+ private final String name = "ancient image data store";
+ protected ImageDataStoreLifeCycle lifeCycle;
+ protected ImageDataStoreDriver driver;
+ @Inject
+ ImageDataStoreManager storeMgr;
+ @Inject
+ ImageDataStoreHelper helper;
+ long id;
+ String uuid;
+ @Override
+ public DataStoreLifeCycle getLifeCycle() {
+ return lifeCycle;
+ }
+
+ @Override
+ public String getName() {
+ return this.name;
+ }
+
+ @Override
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ @Override
+ public long getId() {
+ return this.id;
+ }
+
+ @Override
+ public boolean configure(Map<String, Object> params) {
+ lifeCycle = ComponentContext.inject(DefaultImageDataStoreLifeCycle.class);
+ driver = ComponentContext.inject(AncientImageDataStoreDriverImpl.class);
+ uuid = (String)params.get("uuid");
+ id = (Long)params.get("id");
+ storeMgr.registerDriver(uuid, driver);
+
+ Map<String, Object> infos = new HashMap<String, Object>();
+ String dataStoreName = UUID.nameUUIDFromBytes(this.name.getBytes()).toString();
+ infos.put("name", dataStoreName);
+ infos.put("uuid", dataStoreName);
+ infos.put("protocol", "http");
+ infos.put("scope", ScopeType.GLOBAL);
+ infos.put("provider", this.getId());
+ DataStoreLifeCycle lifeCycle = this.getLifeCycle();
+ lifeCycle.initialize(infos);
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/image/src/org/apache/cloudstack/storage/image/store/DefaultImageDataStoreImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/DefaultImageDataStoreImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/DefaultImageDataStoreImpl.java
new file mode 100644
index 0000000..d159f74
--- /dev/null
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/DefaultImageDataStoreImpl.java
@@ -0,0 +1,145 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.image.store;
+
+import java.util.Set;
+
+import javax.inject.Inject;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole;
+import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
+import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
+import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
+import org.apache.cloudstack.storage.datastore.provider.ImageDataStoreProvider;
+import org.apache.cloudstack.storage.image.ImageDataStoreDriver;
+import org.apache.cloudstack.storage.image.datastore.ImageDataStore;
+import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
+
+import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.utils.component.ComponentContext;
+import com.cloud.utils.storage.encoding.EncodingType;
+
+
+public class DefaultImageDataStoreImpl implements ImageDataStore {
+ @Inject
+ VMTemplateDao imageDao;
+ @Inject
+ private ObjectInDataStoreManager objectInStoreMgr;
+ protected ImageDataStoreDriver driver;
+ protected ImageDataStoreVO imageDataStoreVO;
+ protected ImageDataStoreProvider provider;
+ boolean needDownloadToCacheStorage = false;
+
+ protected DefaultImageDataStoreImpl() {
+
+ }
+
+ protected void configure(ImageDataStoreVO dataStoreVO, ImageDataStoreDriver imageDataStoreDriver,
+ ImageDataStoreProvider provider) {
+ this.driver = imageDataStoreDriver;
+ this.imageDataStoreVO = dataStoreVO;
+ this.provider = provider;
+ }
+
+ public static ImageDataStore getDataStore(ImageDataStoreVO dataStoreVO, ImageDataStoreDriver imageDataStoreDriver,
+ ImageDataStoreProvider provider) {
+ DefaultImageDataStoreImpl instance = (DefaultImageDataStoreImpl)ComponentContext.inject(DefaultImageDataStoreImpl.class);
+ instance.configure(dataStoreVO, imageDataStoreDriver, provider);
+ return instance;
+ }
+
+ @Override
+ public Set<TemplateInfo> listTemplates() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public DataStoreDriver getDriver() {
+ // TODO Auto-generated method stub
+ return this.driver;
+ }
+
+ @Override
+ public DataStoreRole getRole() {
+ // TODO Auto-generated method stub
+ return DataStoreRole.Image;
+ }
+ @Override
+ public long getId() {
+ // TODO Auto-generated method stub
+ return this.imageDataStoreVO.getId();
+ }
+
+ @Override
+ public String getUri() {
+ return this.imageDataStoreVO.getProtocol() + "://" + "?" + EncodingType.ROLE + "=" + this.getRole();
+ }
+
+ @Override
+ public Scope getScope() {
+ return new ZoneScope(imageDataStoreVO.getDcId());
+ }
+
+ @Override
+ public TemplateInfo getTemplate(long templateId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public VolumeInfo getVolume(long volumeId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public SnapshotInfo getSnapshot(long snapshotId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean exists(DataObject object) {
+ return (objectInStoreMgr.findObject(object,
+ this) != null) ? true : false;
+ }
+
+ @Override
+ public String getUuid() {
+ return this.imageDataStoreVO.getUuid();
+ }
+
+ @Override
+ public DataObject create(DataObject obj) {
+ DataObject object = objectInStoreMgr.create(obj, this);
+ return object;
+ }
+
+ @Override
+ public boolean delete(DataObject obj) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/image/src/org/apache/cloudstack/storage/image/store/DefaultImageDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/DefaultImageDataStoreProvider.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/DefaultImageDataStoreProvider.java
index 3569fe8..efbb999 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/DefaultImageDataStoreProvider.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/DefaultImageDataStoreProvider.java
@@ -29,11 +29,9 @@ import org.apache.cloudstack.storage.image.datastore.ImageDataStoreManager;
import org.apache.cloudstack.storage.image.driver.DefaultImageDataStoreDriverImpl;
import org.apache.cloudstack.storage.image.store.lifecycle.DefaultImageDataStoreLifeCycle;
import org.apache.cloudstack.storage.image.store.lifecycle.ImageDataStoreLifeCycle;
-import org.springframework.stereotype.Component;
import com.cloud.utils.component.ComponentContext;
-@Component
public class DefaultImageDataStoreProvider implements ImageDataStoreProvider {
private final String name = "default image data store";
protected ImageDataStoreLifeCycle lifeCycle;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/image/src/org/apache/cloudstack/storage/image/store/HttpDataStoreImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/HttpDataStoreImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/HttpDataStoreImpl.java
deleted file mode 100644
index 34b4ff2..0000000
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/HttpDataStoreImpl.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.cloudstack.storage.image.store;
-
-import java.util.Set;
-
-import javax.inject.Inject;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole;
-import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
-import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
-import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
-import org.apache.cloudstack.storage.datastore.provider.ImageDataStoreProvider;
-import org.apache.cloudstack.storage.image.ImageDataStoreDriver;
-import org.apache.cloudstack.storage.image.TemplateInfo;
-import org.apache.cloudstack.storage.image.datastore.ImageDataStore;
-import org.apache.cloudstack.storage.image.db.ImageDataDao;
-import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
-import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
-
-import com.cloud.utils.component.ComponentContext;
-import com.cloud.utils.storage.encoding.EncodingType;
-
-
-public class HttpDataStoreImpl implements ImageDataStore {
- @Inject
- ImageDataDao imageDao;
- @Inject
- private ObjectInDataStoreManager objectInStoreMgr;
- protected ImageDataStoreDriver driver;
- protected ImageDataStoreVO imageDataStoreVO;
- protected ImageDataStoreProvider provider;
- boolean needDownloadToCacheStorage = false;
-
- protected HttpDataStoreImpl() {
-
- }
-
- protected void configure(ImageDataStoreVO dataStoreVO, ImageDataStoreDriver imageDataStoreDriver,
- ImageDataStoreProvider provider) {
- this.driver = imageDataStoreDriver;
- this.imageDataStoreVO = dataStoreVO;
- this.provider = provider;
- }
-
- public static HttpDataStoreImpl getDataStore(ImageDataStoreVO dataStoreVO, ImageDataStoreDriver imageDataStoreDriver,
- ImageDataStoreProvider provider) {
- HttpDataStoreImpl instance = (HttpDataStoreImpl)ComponentContext.inject(HttpDataStoreImpl.class);
- instance.configure(dataStoreVO, imageDataStoreDriver, provider);
- return instance;
- }
-
- @Override
- public Set<TemplateInfo> listTemplates() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public DataStoreDriver getDriver() {
- // TODO Auto-generated method stub
- return this.driver;
- }
-
-
-
- @Override
- public DataStoreRole getRole() {
- // TODO Auto-generated method stub
- return DataStoreRole.Image;
- }
-
-
-
- @Override
- public long getId() {
- // TODO Auto-generated method stub
- return this.imageDataStoreVO.getId();
- }
-
-
-
- @Override
- public String getUri() {
- return this.imageDataStoreVO.getProtocol() + "://" + "?" + EncodingType.ROLE + "=" + this.getRole();
- }
-
- @Override
- public Scope getScope() {
- // TODO Auto-generated method stub
- return new ZoneScope(imageDataStoreVO.getDcId());
- }
-
-
-
- @Override
- public TemplateInfo getTemplate(long templateId) {
- // TODO Auto-generated method stub
- return null;
- }
-
-
-
- @Override
- public VolumeInfo getVolume(long volumeId) {
- // TODO Auto-generated method stub
- return null;
- }
-
-
-
- @Override
- public SnapshotInfo getSnapshot(long snapshotId) {
- // TODO Auto-generated method stub
- return null;
- }
-
-
-
- @Override
- public boolean exists(DataObject object) {
- return (objectInStoreMgr.findObject(object.getId(), object.getType(),
- this.getId(), this.getRole()) != null) ? true : false;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
index 1b0661c..85bc0c1 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/TemplateObject.java
@@ -20,44 +20,48 @@ package org.apache.cloudstack.storage.image.store;
import javax.inject.Inject;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateEvent;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat;
import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
-import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
-import org.apache.cloudstack.storage.image.TemplateEvent;
-import org.apache.cloudstack.storage.image.TemplateInfo;
-import org.apache.cloudstack.storage.image.db.ImageDataDao;
-import org.apache.cloudstack.storage.image.db.ImageDataVO;
import org.apache.cloudstack.storage.image.manager.ImageDataManager;
-import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine;
import org.apache.log4j.Logger;
+import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.storage.dao.VMTemplatePoolDao;
import com.cloud.utils.component.ComponentContext;
+import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.fsm.NoTransitionException;
import com.cloud.utils.storage.encoding.EncodingType;
public class TemplateObject implements TemplateInfo {
private static final Logger s_logger = Logger
.getLogger(TemplateObject.class);
- private ImageDataVO imageVO;
+ private VMTemplateVO imageVO;
private DataStore dataStore;
@Inject
ImageDataManager imageMgr;
@Inject
- ImageDataDao imageDao;
+ VMTemplateDao imageDao;
@Inject
ObjectInDataStoreManager ojbectInStoreMgr;
+ @Inject VMTemplatePoolDao templatePoolDao;
protected TemplateObject() {
}
- protected void configure(ImageDataVO template, DataStore dataStore) {
+ protected void configure(VMTemplateVO template, DataStore dataStore) {
this.imageVO = template;
this.dataStore = dataStore;
}
- public static TemplateObject getTemplate(ImageDataVO vo, DataStore store) {
+ public static TemplateObject getTemplate(VMTemplateVO vo, DataStore store) {
TemplateObject to = ComponentContext.inject(TemplateObject.class);
to.configure(vo, store);
return to;
@@ -66,12 +70,12 @@ public class TemplateObject implements TemplateInfo {
public void setImageStoreId(long id) {
this.imageVO.setImageDataStoreId(id);
}
-
+
public void setSize(Long size) {
this.imageVO.setSize(size);
}
- public ImageDataVO getImage() {
+ public VMTemplateVO getImage() {
return this.imageVO;
}
@@ -87,23 +91,20 @@ public class TemplateObject implements TemplateInfo {
@Override
public String getUuid() {
- // TODO Auto-generated method stub
- return null;
+ return this.imageVO.getUuid();
}
@Override
public String getUri() {
- ImageDataVO image = imageDao.findById(this.imageVO.getId());
+ VMTemplateVO image = imageDao.findById(this.imageVO.getId());
if (this.dataStore == null) {
return image.getUrl();
} else {
- ObjectInDataStoreVO obj = ojbectInStoreMgr.findObject(
- this.imageVO.getId(), DataObjectType.TEMPLATE,
- this.dataStore.getId(), this.dataStore.getRole());
+ DataObjectInStore obj = ojbectInStoreMgr.findObject(this, this.dataStore);
StringBuilder builder = new StringBuilder();
if (obj.getState() == ObjectInDataStoreStateMachine.State.Ready
|| obj.getState() == ObjectInDataStoreStateMachine.State.Copying) {
-
+
builder.append(this.dataStore.getUri());
builder.append("&" + EncodingType.OBJTYPE + "=" + DataObjectType.TEMPLATE);
builder.append("&" + EncodingType.PATH + "=" + obj.getInstallPath());
@@ -124,10 +125,33 @@ public class TemplateObject implements TemplateInfo {
if (this.dataStore == null) {
return this.imageVO.getSize();
}
- ObjectInDataStoreVO obj = ojbectInStoreMgr.findObject(
- this.imageVO.getId(), DataObjectType.TEMPLATE,
- this.dataStore.getId(), this.dataStore.getRole());
- return obj.getSize();
+
+ /*
+
+// If the template that was passed into this allocator is not installed in the storage pool,
+ // add 3 * (template size on secondary storage) to the running total
+ VMTemplateHostVO templateHostVO = _storageMgr.findVmTemplateHost(templateForVmCreation.getId(), null);
+
+ if (templateHostVO == null) {
+ VMTemplateSwiftVO templateSwiftVO = _swiftMgr.findByTmpltId(templateForVmCreation.getId());
+ if (templateSwiftVO != null) {
+ long templateSize = templateSwiftVO.getPhysicalSize();
+ if (templateSize == 0) {
+ templateSize = templateSwiftVO.getSize();
+ }
+ totalAllocatedSize += (templateSize + _extraBytesPerVolume);
+ }
+ } else {
+ long templateSize = templateHostVO.getPhysicalSize();
+ if ( templateSize == 0 ){
+ templateSize = templateHostVO.getSize();
+ }
+ totalAllocatedSize += (templateSize + _extraBytesPerVolume);
+ }
+
+ */
+ VMTemplateVO image = imageDao.findById(this.imageVO.getId());
+ return image.getSize();
}
@Override
@@ -137,7 +161,7 @@ public class TemplateObject implements TemplateInfo {
@Override
public DiskFormat getFormat() {
- return DiskFormat.getFormat(this.imageVO.getFormat());
+ return DiskFormat.valueOf(this.imageVO.getFormat().toString());
}
public boolean stateTransit(TemplateEvent e) throws NoTransitionException {
@@ -146,4 +170,14 @@ public class TemplateObject implements TemplateInfo {
this.imageVO = imageDao.findById(this.imageVO.getId());
return result;
}
+
+ @Override
+ public void processEvent(Event event) {
+ try {
+ ojbectInStoreMgr.update(this, event);
+ } catch (NoTransitionException e) {
+ s_logger.debug("failed to update state", e);
+ throw new CloudRuntimeException("Failed to update state" + e.toString());
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/image/src/org/apache/cloudstack/storage/image/store/lifecycle/DefaultImageDataStoreLifeCycle.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/lifecycle/DefaultImageDataStoreLifeCycle.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/lifecycle/DefaultImageDataStoreLifeCycle.java
index 07d52b4..17aabca 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/store/lifecycle/DefaultImageDataStoreLifeCycle.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/store/lifecycle/DefaultImageDataStoreLifeCycle.java
@@ -22,12 +22,15 @@ import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.HostScope;
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
import org.apache.cloudstack.storage.image.datastore.ImageDataStoreHelper;
import org.apache.cloudstack.storage.image.datastore.ImageDataStoreManager;
import org.apache.cloudstack.storage.image.db.ImageDataStoreDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
+import com.cloud.agent.api.StoragePoolInfo;
+
public class DefaultImageDataStoreLifeCycle implements ImageDataStoreLifeCycle {
@Inject
protected ImageDataStoreDao imageStoreDao;
@@ -40,7 +43,7 @@ public class DefaultImageDataStoreLifeCycle implements ImageDataStoreLifeCycle {
@Override
- public DataStore initialize(Map<String, String> dsInfos) {
+ public DataStore initialize(Map<String, Object> dsInfos) {
ImageDataStoreVO ids = imageStoreHelper.createImageDataStore(dsInfos);
return imageStoreMgr.getImageDataStore(ids.getId());
}
@@ -54,6 +57,14 @@ public class DefaultImageDataStoreLifeCycle implements ImageDataStoreLifeCycle {
@Override
+ public boolean attachHost(DataStore store, HostScope scope,
+ StoragePoolInfo existingInfo) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+
+ @Override
public boolean attachZone(DataStore dataStore, ZoneScope scope) {
// TODO Auto-generated method stub
return false;
@@ -75,23 +86,27 @@ public class DefaultImageDataStoreLifeCycle implements ImageDataStoreLifeCycle {
@Override
- public boolean maintain() {
+ public boolean maintain(long storeId) {
// TODO Auto-generated method stub
return false;
}
@Override
- public boolean cancelMaintain() {
+ public boolean cancelMaintain(long storeId) {
// TODO Auto-generated method stub
return false;
}
@Override
- public boolean deleteDataStore() {
+ public boolean deleteDataStore(long storeId) {
// TODO Auto-generated method stub
return false;
}
+
+
+
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java b/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
index 390b0fd..561c1cb 100644
--- a/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
+++ b/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/DefaultImageMotionStrategy.java
@@ -23,7 +23,6 @@ import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher;
import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
@@ -32,12 +31,11 @@ import org.apache.cloudstack.storage.command.CopyCmd;
import org.apache.cloudstack.storage.command.CopyCmdAnswer;
import org.apache.cloudstack.storage.endpoint.EndPointSelector;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
-import org.springframework.stereotype.Component;
import com.cloud.agent.api.Answer;
//At least one of datastore is coming from image store or image cache store
-@Component
+
public class DefaultImageMotionStrategy implements ImageMotionStrategy {
@Inject
EndPointSelector selector;
@@ -86,14 +84,15 @@ public class DefaultImageMotionStrategy implements ImageMotionStrategy {
@Override
public boolean canHandle(DataObject srcData, DataObject destData) {
+ /*
DataStore destStore = destData.getDataStore();
DataStore srcStore = srcData.getDataStore();
if (destStore.getRole() == DataStoreRole.Image || destStore.getRole() == DataStoreRole.ImageCache
|| srcStore.getRole() == DataStoreRole.Image
|| srcStore.getRole() == DataStoreRole.ImageCache) {
return true;
- }
- return true;
+ }*/
+ return false;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java b/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
index 0e3636e..93ba4a5 100644
--- a/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
+++ b/engine/storage/imagemotion/src/org/apache/cloudstack/storage/image/motion/ImageMotionServiceImpl.java
@@ -23,18 +23,12 @@ import java.util.List;
import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult;
-import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
+import org.apache.cloudstack.engine.subsystem.api.storage.ImageService;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
-import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
-import org.apache.cloudstack.storage.image.ImageService;
-import org.apache.cloudstack.storage.image.TemplateInfo;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
-import org.apache.cloudstack.storage.volume.VolumeService;
-import org.springframework.stereotype.Component;
-import com.cloud.utils.exception.CloudRuntimeException;
-@Component
public class ImageMotionServiceImpl implements ImageMotionService {
@Inject
List<ImageMotionStrategy> motionStrategies;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
index 9c30a2e..2ad5215 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/ChildTestConfiguration.java
@@ -16,14 +16,25 @@
// under the License.
package org.apache.cloudstack.storage.test;
+import java.io.IOException;
+
import org.apache.cloudstack.acl.APIChecker;
import org.apache.cloudstack.engine.service.api.OrchestrationService;
import org.apache.cloudstack.storage.HostEndpointRpcServer;
import org.apache.cloudstack.storage.endpoint.EndPointSelector;
+import org.apache.cloudstack.storage.test.ChildTestConfiguration.Library;
import org.mockito.Mockito;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.ComponentScan.Filter;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.core.type.classreading.MetadataReader;
+import org.springframework.core.type.classreading.MetadataReaderFactory;
+import org.springframework.core.type.filter.TypeFilter;
import com.cloud.agent.AgentManager;
+import com.cloud.alert.AlertManager;
import com.cloud.cluster.ClusteredAgentRebalanceService;
import com.cloud.cluster.agentlb.dao.HostTransferMapDao;
import com.cloud.cluster.agentlb.dao.HostTransferMapDaoImpl;
@@ -50,11 +61,35 @@ import com.cloud.host.dao.HostTagsDaoImpl;
import com.cloud.server.auth.UserAuthenticator;
import com.cloud.storage.dao.StoragePoolHostDao;
import com.cloud.storage.dao.StoragePoolHostDaoImpl;
+import com.cloud.storage.dao.VMTemplateDaoImpl;
import com.cloud.storage.dao.VMTemplateDetailsDao;
import com.cloud.storage.dao.VMTemplateDetailsDaoImpl;
+import com.cloud.storage.dao.VMTemplateHostDaoImpl;
+import com.cloud.storage.dao.VMTemplatePoolDaoImpl;
import com.cloud.storage.dao.VMTemplateZoneDao;
import com.cloud.storage.dao.VMTemplateZoneDaoImpl;
-
+import com.cloud.storage.dao.VolumeDaoImpl;
+import com.cloud.storage.dao.VolumeHostDaoImpl;
+import com.cloud.storage.snapshot.SnapshotManager;
+import com.cloud.tags.dao.ResourceTagsDaoImpl;
+import com.cloud.utils.component.SpringComponentScanUtils;
+import com.cloud.vm.dao.NicDaoImpl;
+import com.cloud.vm.dao.VMInstanceDaoImpl;
+@Configuration
+@ComponentScan(basePackageClasses={
+ NicDaoImpl.class,
+ VMInstanceDaoImpl.class,
+ VMTemplateHostDaoImpl.class,
+ VolumeHostDaoImpl.class,
+ VolumeDaoImpl.class,
+ VMTemplatePoolDaoImpl.class,
+ ResourceTagsDaoImpl.class,
+ VMTemplateDaoImpl.class,
+ MockStorageMotionStrategy.class
+},
+includeFilters={@Filter(value=Library.class, type=FilterType.CUSTOM)},
+useDefaultFilters=false
+)
public class ChildTestConfiguration extends TestConfiguration {
@Override
@@ -148,6 +183,27 @@ public class ChildTestConfiguration extends TestConfiguration {
public APIChecker apiChecker() {
return Mockito.mock(APIChecker.class);
}
+
+ @Bean
+ public SnapshotManager snapshotMgr() {
+ return Mockito.mock(SnapshotManager.class);
+ }
+
+ @Bean
+ public AlertManager alertMgr() {
+ return Mockito.mock(AlertManager.class);
+ }
+
+ public static class Library implements TypeFilter {
+
+ @Override
+ public boolean match(MetadataReader mdr, MetadataReaderFactory arg1) throws IOException {
+ mdr.getClassMetadata().getClassName();
+ ComponentScan cs = ChildTestConfiguration.class.getAnnotation(ComponentScan.class);
+ return SpringComponentScanUtils.includedInBasePackageClasses(mdr.getClassMetadata().getClassName(), cs);
+ }
+
+ }
/* @Override
@Bean
public PrimaryDataStoreDao primaryDataStoreDao() {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockStorageMotionStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockStorageMotionStrategy.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockStorageMotionStrategy.java
new file mode 100644
index 0000000..e2e8f94
--- /dev/null
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/MockStorageMotionStrategy.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.test;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
+import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
+import org.apache.cloudstack.storage.motion.DataMotionStrategy;
+
+public class MockStorageMotionStrategy implements DataMotionStrategy {
+
+ @Override
+ public boolean canHandle(DataObject srcData, DataObject destData) {
+ // TODO Auto-generated method stub
+ return true;
+ }
+
+ @Override
+ public Void copyAsync(DataObject srcData, DataObject destData,
+ AsyncCompletionCallback<CopyCommandResult> callback) {
+ CopyCommandResult result = new CopyCommandResult("something");
+ callback.complete(result);
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
index 0e88f73..85421a5 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
@@ -28,33 +28,30 @@ import java.util.UUID;
import java.util.concurrent.ExecutionException;
import javax.inject.Inject;
-import javax.naming.ConfigurationException;
import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreLifeCycle;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
+import org.apache.cloudstack.engine.subsystem.api.storage.ImageDataFactory;
+import org.apache.cloudstack.engine.subsystem.api.storage.ImageService;
import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType;
+import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeService.VolumeApiResult;
import org.apache.cloudstack.engine.subsystem.api.storage.type.RootDisk;
import org.apache.cloudstack.framework.async.AsyncCallFuture;
import org.apache.cloudstack.storage.HypervisorHostEndPoint;
-import org.apache.cloudstack.storage.datastore.VolumeDataFactory;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
-import org.apache.cloudstack.storage.datastore.provider.DataStoreProvider;
-import org.apache.cloudstack.storage.datastore.provider.DataStoreProviderManager;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.cloudstack.storage.endpoint.EndPointSelector;
-import org.apache.cloudstack.storage.image.ImageDataFactory;
-import org.apache.cloudstack.storage.image.ImageService;
-import org.apache.cloudstack.storage.image.TemplateInfo;
-import org.apache.cloudstack.storage.image.db.ImageDataDao;
-import org.apache.cloudstack.storage.image.db.ImageDataVO;
-import org.apache.cloudstack.storage.volume.VolumeService;
-import org.apache.cloudstack.storage.volume.VolumeService.VolumeApiResult;
import org.apache.cloudstack.storage.volume.db.VolumeDao2;
import org.apache.cloudstack.storage.volume.db.VolumeVO;
import org.mockito.Mockito;
@@ -78,7 +75,11 @@ import com.cloud.org.Cluster.ClusterType;
import com.cloud.org.Managed.ManagedState;
import com.cloud.resource.ResourceState;
import com.cloud.storage.Storage;
+import com.cloud.storage.Storage.StoragePoolType;
import com.cloud.storage.Storage.TemplateType;
+import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.utils.component.ComponentContext;
@ContextConfiguration(locations={"classpath:/storageContext.xml"})
public class volumeServiceTest extends CloudStackTestNGBase {
@@ -89,7 +90,7 @@ public class volumeServiceTest extends CloudStackTestNGBase {
@Inject
VolumeService volumeService;
@Inject
- ImageDataDao imageDataDao;
+ VMTemplateDao imageDataDao;
@Inject
VolumeDao2 volumeDao;
@Inject
@@ -121,12 +122,13 @@ public class volumeServiceTest extends CloudStackTestNGBase {
@Test(priority = -1)
public void setUp() {
- try {
+ ComponentContext.initComponentsLifeCycle();
+ /* try {
dataStoreProviderMgr.configure(null, new HashMap<String, Object>());
} catch (ConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
- }
+ }*/
host = hostDao.findByGuid(this.getHostGuid());
if (host != null) {
dcId = host.getDataCenterId();
@@ -205,18 +207,17 @@ public class volumeServiceTest extends CloudStackTestNGBase {
Mockito.when(selector.select(Mockito.any(DataObject.class), Mockito.any(DataObject.class))).thenReturn(eps.get(0));
}
- private ImageDataVO createImageData() {
- ImageDataVO image = new ImageDataVO();
+ private VMTemplateVO createImageData() {
+ VMTemplateVO image = new VMTemplateVO();
image.setTemplateType(TemplateType.USER);
image.setUrl(this.getTemplateUrl());
image.setUniqueName(UUID.randomUUID().toString());
image.setName(UUID.randomUUID().toString());
image.setPublicTemplate(true);
image.setFeatured(true);
- image.setRequireHvm(true);
+ image.setRequiresHvm(true);
image.setBits(64);
- image.setFormat(Storage.ImageFormat.VHD.toString());
- image.setAccountId(1);
+ image.setFormat(Storage.ImageFormat.VHD);
image.setEnablePassword(true);
image.setEnableSshKey(true);
image.setGuestOSId(1);
@@ -234,13 +235,13 @@ public class volumeServiceTest extends CloudStackTestNGBase {
private TemplateInfo createTemplate() {
try {
DataStore store = createImageStore();
- ImageDataVO image = createImageData();
+ VMTemplateVO image = createImageData();
TemplateInfo template = imageDataFactory.getTemplate(image.getId(), store);
AsyncCallFuture<CommandResult> future = imageService.createTemplateAsync(template, store);
future.get();
template = imageDataFactory.getTemplate(image.getId(), store);
/*imageProviderMgr.configure("image Provider", new HashMap<String, Object>());
- ImageDataVO image = createImageData();
+ VMTemplateVO image = createImageData();
ImageDataStoreProvider defaultProvider = imageProviderMgr.getProvider("DefaultProvider");
ImageDataStoreLifeCycle lifeCycle = defaultProvider.getLifeCycle();
ImageDataStore store = lifeCycle.registerDataStore("defaultHttpStore", new HashMap<String, String>());
@@ -262,7 +263,7 @@ public class volumeServiceTest extends CloudStackTestNGBase {
@Test
public void testCreatePrimaryStorage() {
DataStoreProvider provider = dataStoreProviderMgr.getDataStoreProvider("default primary data store provider");
- Map<String, String> params = new HashMap<String, String>();
+ Map<String, Object> params = new HashMap<String, Object>();
URI uri = null;
try {
uri = new URI(this.getPrimaryStorageUrl());
@@ -273,7 +274,7 @@ public class volumeServiceTest extends CloudStackTestNGBase {
params.put("url", this.getPrimaryStorageUrl());
params.put("server", uri.getHost());
params.put("path", uri.getPath());
- params.put("protocol", uri.getScheme());
+ params.put("protocol", StoragePoolType.NetworkFilesystem);
params.put("dcId", dcId.toString());
params.put("clusterId", clusterId.toString());
params.put("name", this.primaryName);
@@ -290,7 +291,7 @@ public class volumeServiceTest extends CloudStackTestNGBase {
private DataStore createImageStore() {
DataStoreProvider provider = dataStoreProviderMgr.getDataStoreProvider("default image data store");
- Map<String, String> params = new HashMap<String, String>();
+ Map<String, Object> params = new HashMap<String, Object>();
String name = UUID.randomUUID().toString();
params.put("name", name);
params.put("uuid", name);
@@ -310,12 +311,12 @@ public class volumeServiceTest extends CloudStackTestNGBase {
public DataStore createPrimaryDataStore() {
try {
DataStoreProvider provider = dataStoreProviderMgr.getDataStoreProvider("default primary data store provider");
- Map<String, String> params = new HashMap<String, String>();
+ Map<String, Object> params = new HashMap<String, Object>();
URI uri = new URI(this.getPrimaryStorageUrl());
params.put("url", this.getPrimaryStorageUrl());
params.put("server", uri.getHost());
params.put("path", uri.getPath());
- params.put("protocol", uri.getScheme());
+ params.put("protocol", Storage.StoragePoolType.NetworkFilesystem);
params.put("dcId", dcId.toString());
params.put("clusterId", clusterId.toString());
params.put("name", this.primaryName);
@@ -390,7 +391,7 @@ public class volumeServiceTest extends CloudStackTestNGBase {
DataStore primaryStore = this.primaryStore;
VolumeVO volume = createVolume(null, primaryStore.getId());
VolumeInfo vol = volumeFactory.getVolume(volume.getId(), primaryStore);
- AsyncCallFuture<VolumeApiResult> future = volumeService.createVolumeAsync(vol, primaryStore.getId());
+ AsyncCallFuture<VolumeApiResult> future = volumeService.createVolumeAsync(vol, primaryStore);
try {
future.get();
} catch (InterruptedException e) {
@@ -407,7 +408,7 @@ public class volumeServiceTest extends CloudStackTestNGBase {
DataStore primaryStore = this.primaryStore;
VolumeVO volume = createVolume(null, primaryStore.getId());
VolumeInfo vol = volumeFactory.getVolume(volume.getId(), primaryStore);
- AsyncCallFuture<VolumeApiResult> future = volumeService.createVolumeAsync(vol, primaryStore.getId());
+ AsyncCallFuture<VolumeApiResult> future = volumeService.createVolumeAsync(vol, primaryStore);
try {
future.get();
} catch (InterruptedException e) {
@@ -420,7 +421,7 @@ public class volumeServiceTest extends CloudStackTestNGBase {
//delete the volume
vol = volumeFactory.getVolume(volume.getId(), primaryStore);
- future = volumeService.deleteVolumeAsync(vol);
+ future = volumeService.expungeVolumeAsync(vol);
try {
future.get();
} catch (InterruptedException e) {
@@ -434,9 +435,9 @@ public class volumeServiceTest extends CloudStackTestNGBase {
//@Test(priority=3)
public void tearDown() {
- List<PrimaryDataStoreVO> ds = primaryStoreDao.findPoolByName(this.primaryName);
+ List<StoragePoolVO> ds = primaryStoreDao.findPoolByName(this.primaryName);
for (int i = 0; i < ds.size(); i++) {
- PrimaryDataStoreVO store = ds.get(i);
+ StoragePoolVO store = ds.get(i);
store.setUuid(null);
primaryStoreDao.remove(ds.get(i).getId());
primaryStoreDao.expunge(ds.get(i).getId());
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/integration-test/test/resource/component.xml
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/resource/component.xml b/engine/storage/integration-test/test/resource/component.xml
new file mode 100644
index 0000000..0368ad4
--- /dev/null
+++ b/engine/storage/integration-test/test/resource/component.xml
@@ -0,0 +1,201 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:tx="http://www.springframework.org/schema/tx"
+ xmlns:aop="http://www.springframework.org/schema/aop"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/tx
+ http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
+ http://www.springframework.org/schema/aop
+ http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+
+ <!--
+ Compose a CloudStack deployment with selected components here
+ -->
+ <bean id="databaseUpgradeChecker" class="com.cloud.upgrade.DatabaseUpgradeChecker" />
+
+ <bean id="management-server" class ="com.cloud.server.ManagementServerExtImpl" />
+ <bean id="configuration-server" class="com.cloud.server.ConfigurationServerImpl" />
+
+ <bean id="clusterManagerImpl" class="com.cloud.cluster.ClusterManagerImpl" />
+ <bean id="clusteredVirtualMachineManagerImpl" class="com.cloud.vm.ClusteredVirtualMachineManagerImpl" />
+ <bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl" />
+ <bean id="bareMetalVmManagerImpl" class="com.cloud.baremetal.BareMetalVmManagerImpl" />
+ <bean id="consoleProxyManagerImpl" class="com.cloud.consoleproxy.ConsoleProxyManagerImpl" />
+ <bean id="securityGroupManagerImpl2" class="com.cloud.network.security.SecurityGroupManagerImpl2" />
+ <bean id="premiumSecondaryStorageManagerImpl" class="com.cloud.secstorage.PremiumSecondaryStorageManagerImpl" />
+ <bean id="randomlyIncreasingVMInstanceDaoImpl" class="com.cloud.vm.dao.RandomlyIncreasingVMInstanceDaoImpl" />
+
+
+ <!--
+ Adapters
+ -->
+ <bean id="FirstFitRouting" class="com.cloud.agent.manager.allocator.impl.FirstFitRoutingAllocator">
+ <property name="name" value="FirstFitRouting"/>
+ </bean>
+
+ <!--
+ Storage pool allocators
+ -->
+ <bean id="LocalStoragePoolAllocator" class="com.cloud.storage.allocator.LocalStoragePoolAllocator">
+ <property name="name" value="LocalStorage"/>
+ </bean>
+ <bean id="FirstFitStoragePoolAllocator" class="com.cloud.storage.allocator.FirstFitStoragePoolAllocator">
+ <property name="name" value="Storage"/>
+ </bean>
+
+ <bean id="UserConcentratedAllocator" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator">
+ <property name="name" value="User First"/>
+ </bean>
+
+ <bean id="ConsoleProxyAllocator" class="com.cloud.consoleproxy.ConsoleProxyBalanceAllocator">
+ <property name="name" value="Balance"/>
+ </bean>
+
+
+ <bean id="ExteralIpAddressAllocator" class="com.cloud.network.ExteralIpAddressAllocator">
+ <property name="name" value="Basic"/>
+ </bean>
+
+ <!--
+ Investigators
+ -->
+ <bean id="CheckOnAgentInvestigator" class="com.cloud.ha.CheckOnAgentInvestigator">
+ <property name="name" value="SimpleInvestigator"/>
+ </bean>
+
+ <bean id="XenServerInvestigator" class="com.cloud.ha.XenServerInvestigator">
+ <property name="name" value="XenServerInvestigator"/>
+ </bean>
+
+ <bean id="UserVmDomRInvestigator" class="com.cloud.ha.UserVmDomRInvestigator">
+ <property name="name" value="PingInvestigator"/>
+ </bean>
+
+ <bean id="ManagementIPSystemVMInvestigator" class="com.cloud.ha.ManagementIPSystemVMInvestigator">
+ <property name="name" value="ManagementIPSysVMInvestigator"/>
+ </bean>
+
+ <!--
+ Fencers
+ -->
+ <bean id="XenServerFencer" class="com.cloud.ha.XenServerFencer">
+ <property name="name" value="XenServerFenceBuilder"/>
+ </bean>
+ <bean id="KVMFencer" class="com.cloud.ha.KVMFencer">
+ <property name="name" value="KVMFenceBuilder"/>
+ </bean>
+
+
+ <bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer">
+ <property name="name" value="XCP Agent"/>
+ </bean>
+
+ <bean id="SecondaryStorageDiscoverer" class="com.cloud.storage.secondary.SecondaryStorageDiscoverer">
+ <property name="name" value="SecondaryStorage"/>
+ </bean>
+
+ <bean id="KvmServerDiscoverer" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer">
+ <property name="name" value="KVM Agent"/>
+ </bean>
+
+ <bean id="BareMetalDiscoverer" class="com.cloud.baremetal.BareMetalDiscoverer">
+ <property name="name" value="Bare Metal Agent"/>
+ </bean>
+
+ <bean id="HypervServerDiscoverer" class="com.cloud.hypervisor.hyperv.HypervServerDiscoverer">
+ <property name="name" value="SCVMMServer"/>
+ </bean>
+
+
+ <bean id="FirstFitPlanner" class="com.cloud.deploy.FirstFitPlanner">
+ <property name="name" value="First Fit"/>
+ </bean>
+
+
+ <bean id="BareMetalPlanner" class="com.cloud.deploy.BareMetalPlanner">
+ <property name="name" value="BareMetal Fit"/>
+ </bean>
+
+
+ <!--
+ Network Gurus
+ -->
+ <bean id="StorageNetworkGuru" class="com.cloud.network.guru.StorageNetworkGuru">
+ <property name="name" value="StorageNetworkGuru"/>
+ </bean>
+ <bean id="ExternalGuestNetworkGuru" class="com.cloud.network.guru.ExternalGuestNetworkGuru">
+ <property name="name" value="ExternalGuestNetworkGuru"/>
+ </bean>
+ <bean id="PublicNetworkGuru" class="com.cloud.network.guru.PublicNetworkGuru">
+ <property name="name" value="PublicNetworkGuru"/>
+ </bean>
+ <bean id="PodBasedNetworkGuru" class="com.cloud.network.guru.PodBasedNetworkGuru">
+ <property name="name" value="PodBasedNetworkGuru"/>
+ </bean>
+ <bean id="ControlNetworkGuru" class="com.cloud.network.guru.ControlNetworkGuru">
+ <property name="name" value="ControlNetworkGuru"/>
+ </bean>
+ <bean id="DirectNetworkGuru" class="com.cloud.network.guru.DirectNetworkGuru">
+ <property name="name" value="DirectNetworkGuru"/>
+ </bean>
+ <bean id="DirectPodBasedNetworkGuru" class="com.cloud.network.guru.DirectPodBasedNetworkGuru">
+ <property name="name" value="DirectPodBasedNetworkGuru"/>
+ </bean>
+ <bean id="OvsGuestNetworkGuru" class="com.cloud.network.guru.OvsGuestNetworkGuru">
+ <property name="name" value="OvsGuestNetworkGuru"/>
+ </bean>
+ <bean id="PrivateNetworkGuru" class="com.cloud.network.guru.PrivateNetworkGuru">
+ <property name="name" value="PrivateNetworkGuru"/>
+ </bean>
+ <bean id="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement">
+ <property name="name" value="VpcVirtualRouter"/>
+ </bean>
+ <!--
+ Hypervisor Gurus
+ -->
+ <bean id="XenServerGuru" class="com.cloud.hypervisor.XenServerGuru">
+ <property name="name" value="XenServerGuru"/>
+ </bean>
+
+ <bean id="KVMGuru" class="com.cloud.hypervisor.KVMGuru">
+ <property name="name" value="KVMGuru"/>
+ </bean>
+
+ <bean id="BareMetalGuru" class="com.cloud.baremetal.BareMetalGuru">
+ <property name="name" value="BareMetalGuru"/>
+ </bean>
+
+ <bean id="HypervGuru" class="com.cloud.hypervisor.guru.HypervGuru">
+ <property name="name" value="HypervGuru"/>
+ </bean>
+
+ <!--
+ DAO with customized configuration
+ -->
+ <bean id="configurationDaoImpl" class="com.cloud.configuration.dao.ConfigurationDaoImpl">
+ </bean>
+
+</beans>
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/integration-test/test/resource/storageContext.xml
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/resource/storageContext.xml b/engine/storage/integration-test/test/resource/storageContext.xml
index 0127c96..4f55e24 100644
--- a/engine/storage/integration-test/test/resource/storageContext.xml
+++ b/engine/storage/integration-test/test/resource/storageContext.xml
@@ -45,6 +45,7 @@
<bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
<bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
+ <bean id="componentContext" class="com.cloud.utils.component.ComponentContext"/>
<bean class="org.apache.cloudstack.storage.test.ChildTestConfiguration" />
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
index 487e2d5..0953209 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotDataFactoryImpl.java
@@ -20,11 +20,14 @@ package org.apache.cloudstack.storage.snapshot;
import javax.inject.Inject;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
-import org.apache.cloudstack.storage.datastore.DataStoreManager;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
+import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
+import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
-import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
import org.apache.cloudstack.storage.snapshot.db.SnapshotDao2;
import org.apache.cloudstack.storage.snapshot.db.SnapshotVO;
import org.springframework.stereotype.Component;
@@ -40,8 +43,21 @@ public class SnapshotDataFactoryImpl implements SnapshotDataFactory {
@Override
public SnapshotInfo getSnapshot(long snapshotId, DataStore store) {
SnapshotVO snapshot = snapshotDao.findById(snapshotId);
- ObjectInDataStoreVO obj = objMap.findObject(snapshotId, DataObjectType.SNAPSHOT, store.getId(), store.getRole());
+ DataObjectInStore obj = objMap.findObject(snapshot.getUuid(), DataObjectType.SNAPSHOT, store.getUuid(), store.getRole());
+ if (obj == null) {
+ return null;
+ }
SnapshotObject so = new SnapshotObject(snapshot, store);
return so;
}
+ @Override
+ public SnapshotInfo getSnapshot(long snapshotId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ @Override
+ public SnapshotInfo getSnapshot(DataObject obj, DataStore store) {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
index 6ce1797..d9fc8aa 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotObject.java
@@ -20,6 +20,8 @@ package org.apache.cloudstack.storage.snapshot;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
+import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat;
import org.apache.cloudstack.storage.snapshot.db.SnapshotVO;
@@ -97,4 +99,10 @@ public class SnapshotObject implements SnapshotInfo {
return null;
}
+ @Override
+ public void processEvent(Event event) {
+ // TODO Auto-generated method stub
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
index 80b1918..bd3caf4 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java
@@ -17,6 +17,7 @@
package org.apache.cloudstack.storage.snapshot;
import org.apache.cloudstack.engine.cloud.entity.api.SnapshotEntity;
+import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
import org.springframework.stereotype.Component;
@Component
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/HypervisorBasedSnapshot.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/HypervisorBasedSnapshot.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/HypervisorBasedSnapshot.java
index 7f18200..8ef0927 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/HypervisorBasedSnapshot.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/HypervisorBasedSnapshot.java
@@ -16,7 +16,7 @@
// under the License.
package org.apache.cloudstack.storage.snapshot.strategy;
-import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
import org.apache.cloudstack.storage.snapshot.SnapshotStrategy;
import org.springframework.stereotype.Component;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/StorageBasedSnapshot.java
----------------------------------------------------------------------
diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/StorageBasedSnapshot.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/StorageBasedSnapshot.java
index fa9c5ae..7af395a 100644
--- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/StorageBasedSnapshot.java
+++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/strategy/StorageBasedSnapshot.java
@@ -16,7 +16,7 @@
// under the License.
package org.apache.cloudstack.storage.snapshot.strategy;
-import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
import org.apache.cloudstack.storage.snapshot.SnapshotStrategy;
public class StorageBasedSnapshot implements SnapshotStrategy {