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 2012/11/21 04:01:20 UTC
[7/8] git commit: create template/primary data store is done
create template/primary data store is done
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/550f4fbc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/550f4fbc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/550f4fbc
Branch: refs/heads/javelin
Commit: 550f4fbcdcd3058f3e130165dd2d19bba277f5e0
Parents: 573d13d
Author: Edison Su <su...@gmail.com>
Authored: Tue Nov 20 18:56:51 2012 -0800
Committer: Edison Su <su...@gmail.com>
Committed: Tue Nov 20 18:57:19 2012 -0800
----------------------------------------------------------------------
developer/pom.xml | 1 +
.../engine/cloud/entity/api/VolumeEntity.java | 1 +
.../storage/StorageOrchestratorImpl.java | 13 +-
.../datastore/DefaultPrimaryDataStoreImpl.java | 13 +-
.../storage/datastore/db/DataStoreVO.java | 255 --------------
.../storage/datastore/db/PrimaryDataStoreDao.java | 30 +-
.../datastore/db/PrimaryDataStoreDaoImpl.java | 80 +++---
.../datastore/db/PrimaryDataStoreProviderDao.java | 2 +-
.../db/PrimaryDataStoreProviderDaoImpl.java | 10 +
.../datastore/db/PrimaryDataStoreProviderVO.java | 13 +-
.../storage/datastore/db/PrimaryDataStoreVO.java | 256 +++++++++++++++
.../DefaultPrimaryDataStoreLifeCycleImpl.java | 69 ++++-
.../lifecycle/PrimaryDataStoreLifeCycle.java | 4 +-
.../DefaultPrimaryDataStoreManagerImpl.java | 4 +-
.../DefaultPrimaryDatastoreProviderImpl.java | 49 +++-
.../provider/PrimaryDataStoreProvider.java | 10 +-
.../provider/PrimaryDataStoreProviderManager.java | 8 +-
.../PrimaryDataStoreProviderManagerImpl.java | 73 ++++-
.../storage/image/TemplateEntityImpl.java | 1 -
.../storage/image/db/ImageDaoStoreDaoImpl.java | 10 +
.../storage/image/db/ImageDataStoreDao.java | 2 +-
.../image/db/ImageDataStoreProviderDao.java | 1 +
.../image/db/ImageDataStoreProviderDaoImpl.java | 10 +-
.../storage/image/db/ImageDataStoreVO.java | 2 +-
.../cloudstack/storage/image/db/ImageDataVO.java | 10 +-
.../cloudstack/storage/image/format/VHD.java | 2 +-
.../image/manager/ImageDataStoreManagerImpl.java | 2 +-
.../provider/DefaultImageDataStoreProvider.java | 25 ++-
.../image/provider/ImageDataStoreProvider.java | 8 +-
.../provider/ImageDataStoreProviderManager.java | 9 +-
.../ImageDataStoreProviderManagerImpl.java | 10 +-
.../storage/image/store/ImageDataStoreImpl.java | 3 +-
.../store/lifecycle/ImageDataStoreLifeCycle.java | 27 ++
.../storage/strategy/DefaultVolumeStrategy.java | 5 +-
.../storage/volume/VolumeEntityImpl.java | 16 +-
.../cloudstack/storage/volume/VolumeManager.java | 10 +-
.../storage/volume/VolumeManagerImpl.java | 44 +++-
.../cloudstack/storage/volume/VolumeObject.java | 17 +-
.../storage/volume/VolumeServiceImpl.java | 18 +-
.../cloudstack/storage/volume/db/VolumeDao.java | 2 +-
.../storage/volume/db/VolumeDaoImpl.java | 2 +-
.../cloudstack/storage/volume/db/VolumeVO.java | 14 +-
.../cloudstack/storage/test/volumeServiceTest.java | 110 ++++++-
engine/storage/test/resource/storageContext.xml | 32 +--
server/src/com/cloud/upgrade/DatabaseCreator.java | 4 +-
setup/db/4.1-new-db-schema.sql | 41 +++
setup/db/create-schema.sql | 15 +-
47 files changed, 918 insertions(+), 425 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/developer/pom.xml
----------------------------------------------------------------------
diff --git a/developer/pom.xml b/developer/pom.xml
index 53dd00d..c4d77f7 100644
--- a/developer/pom.xml
+++ b/developer/pom.xml
@@ -145,6 +145,7 @@
<mainClass>com.cloud.upgrade.DatabaseCreator</mainClass>
<arguments>
<argument>${basedir}/target/db/create-schema.sql</argument>
+ <argument>${basedir}/target/db/4.1-new-db-schema.sql</argument>
<argument>${basedir}/target/db/create-schema-premium.sql</argument>
<argument>com.cloud.upgrade.DatabaseUpgradeChecker</argument>
</arguments>
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java
index 61736bc..b9c9db3 100755
--- a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java
+++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VolumeEntity.java
@@ -82,4 +82,5 @@ public interface VolumeEntity extends CloudStackEntity {
VolumeType getType();
StorageEntity getDataStore();
void setPath(String path);
+ boolean createVolumeFromTemplate(long dataStoreId, VolumeDiskType diskType, TemplateEntity template);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java b/engine/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
index efc9b70..d71b72a 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
@@ -110,7 +110,7 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
if (!ds.contains(volume)) {
throw new CloudRuntimeException("volume: " + volume + "doesn't exist on backup storage");
}
-
+/*
VolumeProfile vp = ds.prepareVolume(volume, destStore);
VolumeStrategy vs = destStore.getVolumeStrategy();
@@ -130,12 +130,15 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
txn.commit();
return destVolume;
+ */
+ return null;
}
@DB
protected Volume migrateVolume(VolumeVO volume, DataStore srcStore, DataStore destStore, String reservationId) throws NoTransitionException {
Transaction txn = Transaction.currentTxn();
txn.start();
+ /*
volume.setReservationId(reservationId);
volume = _volumeMgr.processEvent(volume, Volume.Event.MigrationRequested);
Volume destVolume = _volumeMgr.allocateDuplicateVolume(volume);
@@ -156,12 +159,15 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
_volumeMgr.processEvent(volume, Volume.Event.OperationSucceeded);
return destVolume;
+ */
+ return null;
}
@DB
protected Volume recreateVolume(VolumeVO srcVolume, DataStore destStore, String reservationId) throws NoTransitionException {
Transaction txn = Transaction.currentTxn();
txn.start();
+ /*
srcVolume.setReservationId(reservationId);
srcVolume = _volumeMgr.processEvent(srcVolume, Volume.Event.CopyRequested);
Volume destVolume = _volumeMgr.allocateDuplicateVolume(srcVolume);
@@ -185,10 +191,13 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
_volumeMgr.processEvent(srcVolume, Volume.Event.OperationSucceeded);
return destVolume;
+ */
+ return null;
}
protected Volume createVolumeOnStorage(Volume volume, DataStore destStore, String reservationId) throws NoTransitionException {
VolumeStrategy vs = destStore.getVolumeStrategy();
+ /*
volume.setReservationId(reservationId);
volume = _volumeMgr.processEvent(volume, Volume.Event.CreateRequested);
@@ -208,6 +217,8 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
volume = _volumeMgr.processEvent(volume, Volume.Event.OperationSucceeded);
return volume;
+ */
+ return null;
}
@DB
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java
index 9981d68..696085d 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStoreImpl.java
@@ -12,7 +12,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
import org.apache.cloudstack.storage.HypervisorHostEndPoint;
-import org.apache.cloudstack.storage.datastore.db.DataStoreVO;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
import org.apache.cloudstack.storage.image.TemplateInfo;
import org.apache.cloudstack.storage.image.TemplateObject;
@@ -38,16 +38,16 @@ import edu.emory.mathcs.backport.java.util.Collections;
public class DefaultPrimaryDataStoreImpl implements PrimaryDataStore {
private static final Logger s_logger = Logger.getLogger(DefaultPrimaryDataStoreImpl.class);
protected PrimaryDataStoreDriver driver;
- protected DataStoreVO pdsv;
+ protected PrimaryDataStoreVO pdsv;
protected PrimaryDataStoreInfo pdsInfo;
@Inject
private VolumeDao volumeDao;
- @Inject
+ //@Inject
private HostDao hostDao;
@Inject
TemplatePrimaryDataStoreManager templatePrimaryStoreMgr;
- public DefaultPrimaryDataStoreImpl(PrimaryDataStoreDriver driver, DataStoreVO pdsv, PrimaryDataStoreInfo pdsInfo) {
+ public DefaultPrimaryDataStoreImpl(PrimaryDataStoreDriver driver, PrimaryDataStoreVO pdsv, PrimaryDataStoreInfo pdsInfo) {
this.driver = driver;
this.pdsv = pdsv;
this.pdsInfo = pdsInfo;
@@ -56,7 +56,7 @@ public class DefaultPrimaryDataStoreImpl implements PrimaryDataStore {
@Override
public VolumeInfo getVolume(long id) {
VolumeVO volumeVO = volumeDao.findById(id);
- VolumeObject vol = new VolumeObject(this, volumeVO);
+ VolumeObject vol = VolumeObject.getVolumeObject(this, volumeVO);
return vol;
}
@@ -155,8 +155,7 @@ public class DefaultPrimaryDataStoreImpl implements PrimaryDataStore {
@Override
public long getId() {
- // TODO Auto-generated method stub
- return 0;
+ return pdsv.getId();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreVO.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreVO.java
deleted file mode 100644
index dc732d9..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreVO.java
+++ /dev/null
@@ -1,255 +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.datastore.db;
-
-import java.util.Date;
-import java.util.UUID;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.persistence.Transient;
-
-import org.apache.cloudstack.storage.datastore.DataStoreStatus;
-
-import com.cloud.api.Identity;
-import com.cloud.storage.Storage.StoragePoolType;
-import com.cloud.utils.db.GenericDao;
-
-@Entity
-@Table(name = "storage_pool")
-public class DataStoreVO implements Identity {
- @Id
- @TableGenerator(name = "storage_pool_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "storage_pool_seq", allocationSize = 1)
- @Column(name = "id", updatable = false, nullable = false)
- private long id;
-
- @Column(name = "name", updatable = false, nullable = false, length = 255)
- private String name = null;
-
- @Column(name = "uuid", length = 255)
- private String uuid = null;
-
- @Column(name = "pool_type", updatable = false, nullable = false, length = 32)
- private String protocol;
-
- @Column(name = GenericDao.CREATED_COLUMN)
- Date created;
-
- @Column(name = GenericDao.REMOVED_COLUMN)
- private Date removed;
-
- @Column(name = "update_time", updatable = true)
- @Temporal(value = TemporalType.TIMESTAMP)
- private Date updateTime;
-
- @Column(name = "data_center_id", updatable = true, nullable = false)
- private long dataCenterId;
-
- @Column(name = "pod_id", updatable = true)
- private Long podId;
-
- @Column(name = "available_bytes", updatable = true, nullable = true)
- private long availableBytes;
-
- @Column(name = "capacity_bytes", updatable = true, nullable = true)
- private long capacityBytes;
-
- @Column(name = "status", updatable = true, nullable = false)
- @Enumerated(value = EnumType.STRING)
- private DataStoreStatus status;
-
- @Column(name = "storage_provider", updatable = true, nullable = false)
- private Long storageProvider;
-
- @Column(name = "storage_type", nullable = false)
- private String storageType;
-
- @Column(name = "host_address")
- private String hostAddress;
-
- @Column(name = "path")
- private String path;
-
- @Column(name = "port")
- private int port;
-
- @Column(name = "user_info")
- private String userInfo;
-
- @Column(name = "cluster_id")
- private Long clusterId;
-
- public long getId() {
- return id;
- }
-
- public DataStoreStatus getStatus() {
- return status;
- }
-
- public DataStoreVO() {
- // TODO Auto-generated constructor stub
- }
-
- public String getName() {
- return name;
- }
-
- public String getUuid() {
- return uuid;
- }
-
- public String getPoolType() {
- return protocol;
- }
-
- public Date getCreated() {
- return created;
- }
-
- public Date getRemoved() {
- return removed;
- }
-
- public Date getUpdateTime() {
- return updateTime;
- }
-
- public long getDataCenterId() {
- return dataCenterId;
- }
-
- public long getAvailableBytes() {
- return availableBytes;
- }
-
- public Long getStorageProviderId() {
- return storageProvider;
- }
-
- public void setStorageProviderId(Long provider) {
- storageProvider = provider;
- }
-
- public String getStorageType() {
- return storageType;
- }
-
- public void setStorageType(String type) {
- storageType = type;
- }
-
- public long getCapacityBytes() {
- return capacityBytes;
- }
-
- public void setAvailableBytes(long available) {
- availableBytes = available;
- }
-
- public void setCapacityBytes(long capacity) {
- capacityBytes = capacity;
- }
-
- public Long getClusterId() {
- return clusterId;
- }
-
- public void setClusterId(Long clusterId) {
- this.clusterId = clusterId;
- }
-
- public String getHostAddress() {
- return hostAddress;
- }
-
- public String getPath() {
- return path;
- }
-
- public String getUserInfo() {
- return userInfo;
- }
-
- public void setStatus(DataStoreStatus status) {
- this.status = status;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public void setDataCenterId(long dcId) {
- this.dataCenterId = dcId;
- }
-
- public void setPodId(Long podId) {
- this.podId = podId;
- }
-
- public void setUuid(String uuid) {
- this.uuid = uuid;
- }
-
- public void setPath(String path) {
- this.path = path;
- }
-
- public void setUserInfo(String userInfo) {
- this.userInfo = userInfo;
- }
-
- public int getPort() {
- return port;
- }
-
- public Long getPodId() {
- return podId;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof DataStoreVO) || obj == null) {
- return false;
- }
- DataStoreVO that = (DataStoreVO) obj;
- return this.id == that.id;
- }
-
- @Override
- public int hashCode() {
- return new Long(id).hashCode();
- }
-
- @Override
- public String toString() {
- return new StringBuilder("Pool[").append(id).append("|").append(protocol).append("]").toString();
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
index f525632..24a5c79 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
@@ -25,19 +25,19 @@ import org.apache.cloudstack.storage.datastore.DataStoreStatus;
import com.cloud.utils.db.GenericDao;
-public interface PrimaryDataStoreDao extends GenericDao<DataStoreVO, Long> {
+public interface PrimaryDataStoreDao extends GenericDao<PrimaryDataStoreVO, Long> {
/**
* @param datacenterId
* -- the id of the datacenter (availability zone)
*/
- List<DataStoreVO> listByDataCenterId(long datacenterId);
+ List<PrimaryDataStoreVO> listByDataCenterId(long datacenterId);
/**
* @param datacenterId
* -- the id of the datacenter (availability zone)
*/
- List<DataStoreVO> listBy(long datacenterId, long podId, Long clusterId);
+ List<PrimaryDataStoreVO> listBy(long datacenterId, long podId, Long clusterId);
/**
* Set capacity of storage pool in bytes
@@ -59,7 +59,7 @@ public interface PrimaryDataStoreDao extends GenericDao<DataStoreVO, Long> {
*/
void updateAvailable(long id, long available);
- DataStoreVO persist(DataStoreVO pool, Map<String, String> details);
+ PrimaryDataStoreVO persist(PrimaryDataStoreVO pool, Map<String, String> details);
/**
* Find pool by name.
@@ -68,7 +68,7 @@ public interface PrimaryDataStoreDao extends GenericDao<DataStoreVO, Long> {
* name of pool.
* @return the single StoragePoolVO
*/
- List<DataStoreVO> findPoolByName(String name);
+ List<PrimaryDataStoreVO> findPoolByName(String name);
/**
* Find pools by the pod that matches the details.
@@ -79,9 +79,9 @@ public interface PrimaryDataStoreDao extends GenericDao<DataStoreVO, Long> {
* details to match. All must match for the pool to be returned.
* @return List of StoragePoolVO
*/
- List<DataStoreVO> findPoolsByDetails(long dcId, long podId, Long clusterId, Map<String, String> details);
+ List<PrimaryDataStoreVO> findPoolsByDetails(long dcId, long podId, Long clusterId, Map<String, String> details);
- List<DataStoreVO> findPoolsByTags(long dcId, long podId, Long clusterId, String[] tags, Boolean shared);
+ List<PrimaryDataStoreVO> findPoolsByTags(long dcId, long podId, Long clusterId, String[] tags, Boolean shared);
/**
* Find pool by UUID.
@@ -90,13 +90,13 @@ public interface PrimaryDataStoreDao extends GenericDao<DataStoreVO, Long> {
* uuid of pool.
* @return the single StoragePoolVO
*/
- DataStoreVO findPoolByUUID(String uuid);
+ PrimaryDataStoreVO findPoolByUUID(String uuid);
- List<DataStoreVO> listByStorageHost(String hostFqdnOrIp);
+ List<PrimaryDataStoreVO> listByStorageHost(String hostFqdnOrIp);
- DataStoreVO findPoolByHostPath(long dcId, Long podId, String host, String path, String uuid);
+ PrimaryDataStoreVO findPoolByHostPath(long dcId, Long podId, String host, String path, String uuid);
- List<DataStoreVO> listPoolByHostPath(String host, String path);
+ List<PrimaryDataStoreVO> listPoolByHostPath(String host, String path);
void updateDetails(long poolId, Map<String, String> details);
@@ -104,13 +104,13 @@ public interface PrimaryDataStoreDao extends GenericDao<DataStoreVO, Long> {
List<String> searchForStoragePoolDetails(long poolId, String value);
- List<DataStoreVO> findIfDuplicatePoolsExistByUUID(String uuid);
+ List<PrimaryDataStoreVO> findIfDuplicatePoolsExistByUUID(String uuid);
- List<DataStoreVO> listByStatus(DataStoreStatus status);
+ List<PrimaryDataStoreVO> listByStatus(DataStoreStatus status);
long countPoolsByStatus(DataStoreStatus... statuses);
- List<DataStoreVO> listByStatusInZone(long dcId, DataStoreStatus status);
+ List<PrimaryDataStoreVO> listByStatusInZone(long dcId, DataStoreStatus status);
- List<DataStoreVO> listPoolsByCluster(long clusterId);
+ List<PrimaryDataStoreVO> listPoolsByCluster(long clusterId);
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
index 9986525..adf131f 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
@@ -47,12 +47,12 @@ import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.utils.exception.CloudRuntimeException;
@Component
-public class PrimaryDataStoreDaoImpl extends GenericDaoBase<DataStoreVO, Long> implements PrimaryDataStoreDao {
- protected final SearchBuilder<DataStoreVO> AllFieldSearch;
- protected final SearchBuilder<DataStoreVO> DcPodSearch;
- protected final SearchBuilder<DataStoreVO> DcPodAnyClusterSearch;
- protected final SearchBuilder<DataStoreVO> DeleteLvmSearch;
- protected final GenericSearchBuilder<DataStoreVO, Long> StatusCountSearch;
+public class PrimaryDataStoreDaoImpl extends GenericDaoBase<PrimaryDataStoreVO, Long> implements PrimaryDataStoreDao {
+ protected final SearchBuilder<PrimaryDataStoreVO> AllFieldSearch;
+ protected final SearchBuilder<PrimaryDataStoreVO> DcPodSearch;
+ protected final SearchBuilder<PrimaryDataStoreVO> DcPodAnyClusterSearch;
+ protected final SearchBuilder<PrimaryDataStoreVO> DeleteLvmSearch;
+ protected final GenericSearchBuilder<PrimaryDataStoreVO, Long> StatusCountSearch;
protected final PrimaryDataStoreDetailsDao _detailsDao = null;
@@ -105,73 +105,73 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<DataStoreVO, Long> i
}
@Override
- public List<DataStoreVO> findPoolByName(String name) {
- SearchCriteria<DataStoreVO> sc = AllFieldSearch.create();
+ public List<PrimaryDataStoreVO> findPoolByName(String name) {
+ SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
sc.setParameters("name", name);
return listIncludingRemovedBy(sc);
}
@Override
- public DataStoreVO findPoolByUUID(String uuid) {
- SearchCriteria<DataStoreVO> sc = AllFieldSearch.create();
+ public PrimaryDataStoreVO findPoolByUUID(String uuid) {
+ SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
sc.setParameters("uuid", uuid);
return findOneIncludingRemovedBy(sc);
}
@Override
- public List<DataStoreVO> findIfDuplicatePoolsExistByUUID(String uuid) {
- SearchCriteria<DataStoreVO> sc = AllFieldSearch.create();
+ public List<PrimaryDataStoreVO> findIfDuplicatePoolsExistByUUID(String uuid) {
+ SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
sc.setParameters("uuid", uuid);
return listBy(sc);
}
@Override
- public List<DataStoreVO> listByDataCenterId(long datacenterId) {
- SearchCriteria<DataStoreVO> sc = AllFieldSearch.create();
+ public List<PrimaryDataStoreVO> listByDataCenterId(long datacenterId) {
+ SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
sc.setParameters("datacenterId", datacenterId);
return listBy(sc);
}
@Override
public void updateAvailable(long id, long available) {
- DataStoreVO pool = createForUpdate(id);
+ PrimaryDataStoreVO pool = createForUpdate(id);
pool.setAvailableBytes(available);
update(id, pool);
}
@Override
public void updateCapacity(long id, long capacity) {
- DataStoreVO pool = createForUpdate(id);
+ PrimaryDataStoreVO pool = createForUpdate(id);
pool.setCapacityBytes(capacity);
update(id, pool);
}
@Override
- public List<DataStoreVO> listByStorageHost(String hostFqdnOrIp) {
- SearchCriteria<DataStoreVO> sc = AllFieldSearch.create();
+ public List<PrimaryDataStoreVO> listByStorageHost(String hostFqdnOrIp) {
+ SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
sc.setParameters("hostAddress", hostFqdnOrIp);
return listIncludingRemovedBy(sc);
}
@Override
- public List<DataStoreVO> listByStatus(DataStoreStatus status) {
- SearchCriteria<DataStoreVO> sc = AllFieldSearch.create();
+ public List<PrimaryDataStoreVO> listByStatus(DataStoreStatus status) {
+ SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
sc.setParameters("status", status);
return listBy(sc);
}
@Override
- public List<DataStoreVO> listByStatusInZone(long dcId, DataStoreStatus status) {
- SearchCriteria<DataStoreVO> sc = AllFieldSearch.create();
+ public List<PrimaryDataStoreVO> listByStatusInZone(long dcId, DataStoreStatus status) {
+ SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
sc.setParameters("status", status);
sc.setParameters("datacenterId", dcId);
return listBy(sc);
}
@Override
- public DataStoreVO findPoolByHostPath(long datacenterId, Long podId, String host, String path, String uuid) {
- SearchCriteria<DataStoreVO> sc = AllFieldSearch.create();
+ public PrimaryDataStoreVO findPoolByHostPath(long datacenterId, Long podId, String host, String path, String uuid) {
+ SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
sc.setParameters("hostAddress", host);
sc.setParameters("path", path);
sc.setParameters("datacenterId", datacenterId);
@@ -182,16 +182,16 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<DataStoreVO, Long> i
}
@Override
- public List<DataStoreVO> listBy(long datacenterId, long podId, Long clusterId) {
+ public List<PrimaryDataStoreVO> listBy(long datacenterId, long podId, Long clusterId) {
if (clusterId != null) {
- SearchCriteria<DataStoreVO> sc = DcPodSearch.create();
+ SearchCriteria<PrimaryDataStoreVO> sc = DcPodSearch.create();
sc.setParameters("datacenterId", datacenterId);
sc.setParameters("podId", podId);
sc.setParameters("cluster", clusterId);
return listBy(sc);
} else {
- SearchCriteria<DataStoreVO> sc = DcPodAnyClusterSearch.create();
+ SearchCriteria<PrimaryDataStoreVO> sc = DcPodAnyClusterSearch.create();
sc.setParameters("datacenterId", datacenterId);
sc.setParameters("podId", podId);
return listBy(sc);
@@ -199,16 +199,16 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<DataStoreVO, Long> i
}
@Override
- public List<DataStoreVO> listPoolByHostPath(String host, String path) {
- SearchCriteria<DataStoreVO> sc = AllFieldSearch.create();
+ public List<PrimaryDataStoreVO> listPoolByHostPath(String host, String path) {
+ SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
sc.setParameters("hostAddress", host);
sc.setParameters("path", path);
return listBy(sc);
}
- public DataStoreVO listById(Integer id) {
- SearchCriteria<DataStoreVO> sc = AllFieldSearch.create();
+ public PrimaryDataStoreVO listById(Integer id) {
+ SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
sc.setParameters("id", id);
return findOneIncludingRemovedBy(sc);
@@ -216,7 +216,7 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<DataStoreVO, Long> i
@Override
@DB
- public DataStoreVO persist(DataStoreVO pool, Map<String, String> details) {
+ public PrimaryDataStoreVO persist(PrimaryDataStoreVO pool, Map<String, String> details) {
Transaction txn = Transaction.currentTxn();
txn.start();
pool = super.persist(pool);
@@ -232,7 +232,7 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<DataStoreVO, Long> i
@DB
@Override
- public List<DataStoreVO> findPoolsByDetails(long dcId, long podId, Long clusterId, Map<String, String> details) {
+ public List<PrimaryDataStoreVO> findPoolsByDetails(long dcId, long podId, Long clusterId, Map<String, String> details) {
StringBuilder sql = new StringBuilder(DetailsSqlPrefix);
if (clusterId != null) {
sql.append("storage_pool.cluster_id = ? OR storage_pool.cluster_id IS NULL) AND (");
@@ -254,7 +254,7 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<DataStoreVO, Long> i
}
pstmt.setInt(i++, details.size());
ResultSet rs = pstmt.executeQuery();
- List<DataStoreVO> pools = new ArrayList<DataStoreVO>();
+ List<PrimaryDataStoreVO> pools = new ArrayList<PrimaryDataStoreVO>();
while (rs.next()) {
pools.add(toEntityBean(rs, false));
}
@@ -273,8 +273,8 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<DataStoreVO, Long> i
}
@Override
- public List<DataStoreVO> findPoolsByTags(long dcId, long podId, Long clusterId, String[] tags, Boolean shared) {
- List<DataStoreVO> storagePools = null;
+ public List<PrimaryDataStoreVO> findPoolsByTags(long dcId, long podId, Long clusterId, String[] tags, Boolean shared) {
+ List<PrimaryDataStoreVO> storagePools = null;
if (tags == null || tags.length == 0) {
storagePools = listBy(dcId, podId, clusterId);
} else {
@@ -285,8 +285,8 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<DataStoreVO, Long> i
if (shared == null) {
return storagePools;
} else {
- List<DataStoreVO> filteredStoragePools = new ArrayList<DataStoreVO>(storagePools);
- for (DataStoreVO pool : storagePools) {
+ List<PrimaryDataStoreVO> filteredStoragePools = new ArrayList<PrimaryDataStoreVO>(storagePools);
+ for (PrimaryDataStoreVO pool : storagePools) {
/*
* if (shared != pool.isShared()) {
* filteredStoragePools.remove(pool); }
@@ -357,8 +357,8 @@ public class PrimaryDataStoreDaoImpl extends GenericDaoBase<DataStoreVO, Long> i
}
@Override
- public List<DataStoreVO> listPoolsByCluster(long clusterId) {
- SearchCriteria<DataStoreVO> sc = AllFieldSearch.create();
+ public List<PrimaryDataStoreVO> listPoolsByCluster(long clusterId) {
+ SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
sc.setParameters("clusterId", clusterId);
return listBy(sc);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderDao.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderDao.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderDao.java
index 2fb556e..ebba01c 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderDao.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderDao.java
@@ -21,5 +21,5 @@ package org.apache.cloudstack.storage.datastore.db;
import com.cloud.utils.db.GenericDao;
public interface PrimaryDataStoreProviderDao extends GenericDao<PrimaryDataStoreProviderVO, Long> {
-
+ public PrimaryDataStoreProviderVO findByName(String name);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderDaoImpl.java
index c65ca4c..0050c2f 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderDaoImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderDaoImpl.java
@@ -21,8 +21,18 @@ package org.apache.cloudstack.storage.datastore.db;
import org.springframework.stereotype.Component;
import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchCriteria2;
+import com.cloud.utils.db.SearchCriteriaService;
+import com.cloud.utils.db.SearchCriteria.Op;
@Component
class PrimaryDataStoreProviderDaoImpl extends GenericDaoBase<PrimaryDataStoreProviderVO, Long> implements PrimaryDataStoreProviderDao {
+ @Override
+ public PrimaryDataStoreProviderVO findByName(String name) {
+ SearchCriteriaService<PrimaryDataStoreProviderVO, PrimaryDataStoreProviderVO> sc = SearchCriteria2.create(PrimaryDataStoreProviderVO.class);
+ sc.addAnd(sc.getEntity().getName(), Op.EQ, name);
+ return sc.find();
+ }
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderVO.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderVO.java
index 4047819..7e31d9c 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderVO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreProviderVO.java
@@ -25,14 +25,25 @@ import javax.persistence.Table;
import javax.persistence.TableGenerator;
@Entity
-@Table(name = "data_store_provider")
+@Table(name = "primary_data_store_provider")
public class PrimaryDataStoreProviderVO {
@Id
@TableGenerator(name = "data_store_provider_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "data_store_provider_seq", allocationSize = 1)
@Column(name = "id", updatable = false, nullable = false)
private long id;
+ @Column(name = "name", nullable = false)
+ private String name;
+
public long getId() {
return id;
}
+
+ public String getName() {
+ return this.name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
new file mode 100644
index 0000000..6c05d10
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
@@ -0,0 +1,256 @@
+/*
+ * 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.datastore.db;
+
+import java.util.Date;
+import java.util.UUID;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.TableGenerator;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+
+import org.apache.cloudstack.storage.datastore.DataStoreStatus;
+
+import com.cloud.api.Identity;
+import com.cloud.storage.Storage.StoragePoolType;
+import com.cloud.utils.db.GenericDao;
+
+@Entity
+@Table(name = "storage_pool")
+public class PrimaryDataStoreVO implements Identity {
+ @Id
+ @TableGenerator(name = "storage_pool_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "storage_pool_seq", allocationSize = 1)
+ @Column(name = "id", updatable = false, nullable = false)
+ private long id;
+
+ @Column(name = "name", updatable = false, nullable = false, length = 255)
+ private String name = null;
+
+ @Column(name = "uuid", length = 255)
+ private String uuid = null;
+
+ @Column(name = "pool_type", updatable = false, nullable = false, length = 32)
+ private String protocol;
+
+ @Column(name = GenericDao.CREATED_COLUMN)
+ Date created;
+
+ @Column(name = GenericDao.REMOVED_COLUMN)
+ private Date removed;
+
+ @Column(name = "update_time", updatable = true)
+ @Temporal(value = TemporalType.TIMESTAMP)
+ private Date updateTime;
+
+ @Column(name = "data_center_id", updatable = true, nullable = false)
+ private long dataCenterId;
+
+ @Column(name = "pod_id", updatable = true)
+ private Long podId;
+
+ @Column(name = "available_bytes", updatable = true, nullable = true)
+ private long availableBytes;
+
+ @Column(name = "capacity_bytes", updatable = true, nullable = true)
+ private long capacityBytes;
+
+ @Column(name = "status", updatable = true, nullable = false)
+ @Enumerated(value = EnumType.STRING)
+ private DataStoreStatus status;
+
+ @Column(name = "storage_provider_id", updatable = true, nullable = false)
+ private Long storageProviderId;
+
+ @Column(name = "host_address")
+ private String hostAddress;
+
+ @Column(name = "path")
+ private String path;
+
+ @Column(name = "port")
+ private int port;
+
+ @Column(name = "user_info")
+ private String userInfo;
+
+ @Column(name = "cluster_id")
+ private Long clusterId;
+
+ public long getId() {
+ return id;
+ }
+
+ public DataStoreStatus getStatus() {
+ return status;
+ }
+
+ public PrimaryDataStoreVO() {
+ // TODO Auto-generated constructor stub
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getUuid() {
+ return uuid;
+ }
+
+ public String getPoolType() {
+ return protocol;
+ }
+
+ public void setPoolType(String protocol) {
+ this.protocol = protocol;
+ }
+
+ public Date getCreated() {
+ return created;
+ }
+
+ public Date getRemoved() {
+ return removed;
+ }
+
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+
+ public long getDataCenterId() {
+ return dataCenterId;
+ }
+
+ public long getAvailableBytes() {
+ return availableBytes;
+ }
+
+ public Long getStorageProviderId() {
+ return storageProviderId;
+ }
+
+ public void setStorageProviderId(Long provider) {
+ storageProviderId = provider;
+ }
+
+ public long getCapacityBytes() {
+ return capacityBytes;
+ }
+
+ public void setAvailableBytes(long available) {
+ availableBytes = available;
+ }
+
+ public void setCapacityBytes(long capacity) {
+ capacityBytes = capacity;
+ }
+
+ public Long getClusterId() {
+ return clusterId;
+ }
+
+ public void setClusterId(Long clusterId) {
+ this.clusterId = clusterId;
+ }
+
+ public String getHostAddress() {
+ return hostAddress;
+ }
+
+ public void setHostAddress(String host) {
+ this.hostAddress = host;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public String getUserInfo() {
+ return userInfo;
+ }
+
+ public void setStatus(DataStoreStatus status) {
+ this.status = status;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public void setDataCenterId(long dcId) {
+ this.dataCenterId = dcId;
+ }
+
+ public void setPodId(Long podId) {
+ this.podId = podId;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public void setUserInfo(String userInfo) {
+ this.userInfo = userInfo;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public void setPort(int port) {
+ this.port = port;
+ }
+
+ public Long getPodId() {
+ return podId;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof PrimaryDataStoreVO) || obj == null) {
+ return false;
+ }
+ PrimaryDataStoreVO that = (PrimaryDataStoreVO) obj;
+ return this.id == that.id;
+ }
+
+ @Override
+ public int hashCode() {
+ return new Long(id).hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuilder("Pool[").append(id).append("|").append(protocol).append("]").toString();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
index a50ebdc..c16c230 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
@@ -18,17 +18,76 @@
*/
package org.apache.cloudstack.storage.datastore.lifecycle;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.Map;
+import javax.inject.Inject;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderDao;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
+import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProvider;
import org.springframework.stereotype.Component;
-@Component
public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLifeCycle {
-
+ private final PrimaryDataStoreProvider provider;
+ protected PrimaryDataStoreDao dataStoreDao;
+ public DefaultPrimaryDataStoreLifeCycleImpl(PrimaryDataStoreProvider provider, PrimaryDataStoreDao dataStoreDao) {
+ this.provider = provider;
+ this.dataStoreDao = dataStoreDao;
+ }
+
+ protected class DataStoreUrlParser {
+ private String schema;
+ private String host;
+ private String path;
+ private int port;
+
+ public DataStoreUrlParser(String url) {
+ try {
+ URI uri = new URI(url);
+ schema = uri.getScheme();
+ host = uri.getHost();
+ path = uri.getPath();
+ port = (uri.getPort() == -1) ? 0 : uri.getPort();
+ } catch (URISyntaxException e) {
+
+ }
+ }
+
+ public String getSchema() {
+ return this.schema;
+ }
+
+ public String getHost() {
+ return this.host;
+ }
+
+ public String getPath() {
+ return this.path;
+ }
+
+ public int getPort() {
+ return this.port;
+ }
+ }
+
@Override
- public boolean registerDataStore(Map<String, String> dsInfos) {
- // TODO Auto-generated method stub
- return false;
+ public PrimaryDataStoreInfo registerDataStore(Map<String, String> dsInfos) {
+ DataStoreUrlParser parser = new DataStoreUrlParser(dsInfos.get("url"));
+ PrimaryDataStoreVO dataStore = new PrimaryDataStoreVO();
+ dataStore.setName(dsInfos.get("name"));
+ dataStore.setPoolType(parser.getSchema());
+ dataStore.setPort(parser.port);
+ dataStore.setDataCenterId(Integer.parseInt(dsInfos.get("dcId")));
+ dataStore.setHostAddress(parser.getHost());
+ dataStore.setPath(parser.getPath());
+ dataStore.setStorageProviderId(this.provider.getId());
+ dataStore = dataStoreDao.persist(dataStore);
+ //TODO: add extension point for each data store
+ return this.provider.getDataStore(dataStore.getId());
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/lifecycle/PrimaryDataStoreLifeCycle.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/lifecycle/PrimaryDataStoreLifeCycle.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/lifecycle/PrimaryDataStoreLifeCycle.java
index 99bb995..570a622 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/lifecycle/PrimaryDataStoreLifeCycle.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/lifecycle/PrimaryDataStoreLifeCycle.java
@@ -20,8 +20,10 @@ package org.apache.cloudstack.storage.datastore.lifecycle;
import java.util.Map;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+
public interface PrimaryDataStoreLifeCycle {
- public boolean registerDataStore(Map<String, String> dsInfos);
+ public PrimaryDataStoreInfo registerDataStore(Map<String, String> dsInfos);
public boolean attach(long scope);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java
index e55b126..91528ba 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java
@@ -21,7 +21,7 @@ package org.apache.cloudstack.storage.datastore.manager;
import javax.inject.Inject;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.db.DataStoreVO;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderDao;
import org.apache.cloudstack.storage.datastore.lifecycle.PrimaryDataStoreLifeCycle;
@@ -40,7 +40,7 @@ public class DefaultPrimaryDataStoreManagerImpl implements PrimaryDataStoreManag
@Override
public PrimaryDataStore getPrimaryDataStore(long dataStoreId) {
- DataStoreVO dataStoreVO = dataStoreDao.findById(dataStoreId);
+ PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(dataStoreId);
Long providerId = dataStoreVO.getStorageProviderId();
PrimaryDataStoreProvider provider = providerManager.getDataStoreProvider(providerId);
PrimaryDataStore dataStore = provider.getDataStore(dataStoreId);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
index 6126a8a..8437872 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
@@ -1,31 +1,43 @@
package org.apache.cloudstack.storage.datastore.provider;
+import java.util.Map;
+
import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStoreImpl;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.db.DataStoreVO;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderDao;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderVO;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.driver.DefaultPrimaryDataStoreDriverImpl;
import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
+import org.apache.cloudstack.storage.datastore.lifecycle.DefaultPrimaryDataStoreLifeCycleImpl;
+import org.apache.cloudstack.storage.datastore.lifecycle.PrimaryDataStoreLifeCycle;
+import org.apache.cloudstack.storage.lifecycle.DefaultPrimaryDataStoreLifeCycle;
import org.springframework.stereotype.Component;
import com.cloud.utils.component.ComponentInject;
@Component
public class DefaultPrimaryDatastoreProviderImpl implements PrimaryDataStoreProvider {
+ private final String providerName = "default primary data store provider";
protected PrimaryDataStoreDriver driver;
- @Inject
- public PrimaryDataStoreDao dataStoreDao;
+ private PrimaryDataStoreProviderVO provider;
+ private final PrimaryDataStoreDao dataStoreDao;
+ protected PrimaryDataStoreLifeCycle dataStoreLifeCycle;
- public DefaultPrimaryDatastoreProviderImpl() {
+ @Inject
+ public DefaultPrimaryDatastoreProviderImpl(PrimaryDataStoreDao dataStoreDao) {
this.driver = new DefaultPrimaryDataStoreDriverImpl();
+ this.dataStoreDao = dataStoreDao;
+ this.dataStoreLifeCycle = new DefaultPrimaryDataStoreLifeCycleImpl(this, dataStoreDao);
}
@Override
public PrimaryDataStore getDataStore(long dataStoreId) {
- DataStoreVO dsv = dataStoreDao.findById(dataStoreId);
+ PrimaryDataStoreVO dsv = dataStoreDao.findById(dataStoreId);
if (dsv == null) {
return null;
}
@@ -41,4 +53,31 @@ public class DefaultPrimaryDatastoreProviderImpl implements PrimaryDataStoreProv
return null;
}
+ @Override
+ public PrimaryDataStoreLifeCycle getDataStoreLifeCycle() {
+ return dataStoreLifeCycle;
+ }
+
+ @Override
+ public long getId() {
+ return this.provider.getId();
+ }
+
+ @Override
+ public boolean register(PrimaryDataStoreProviderVO provider, Map<String, Object> params) {
+ this.provider = provider;
+ return true;
+ }
+
+ @Override
+ public boolean init(PrimaryDataStoreProviderVO provider) {
+ this.provider = provider;
+ return true;
+ }
+
+ @Override
+ public String getName() {
+ return providerName;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
index dcc8093..b4a82a8 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
@@ -1,10 +1,18 @@
package org.apache.cloudstack.storage.datastore.provider;
+import java.util.Map;
+
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderVO;
+import org.apache.cloudstack.storage.datastore.lifecycle.PrimaryDataStoreLifeCycle;
public interface PrimaryDataStoreProvider {
public PrimaryDataStore getDataStore(long dataStoreId);
-
+ public PrimaryDataStoreLifeCycle getDataStoreLifeCycle();
public PrimaryDataStoreInfo getDataStoreInfo(long dataStoreId);
+ public long getId();
+ public String getName();
+ public boolean register(PrimaryDataStoreProviderVO provider, Map<String, Object> params);
+ public boolean init(PrimaryDataStoreProviderVO provider);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java
index 85a132f..5ede09c 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java
@@ -1,5 +1,11 @@
package org.apache.cloudstack.storage.datastore.provider;
-public interface PrimaryDataStoreProviderManager {
+import java.util.List;
+
+import com.cloud.utils.component.Manager;
+
+public interface PrimaryDataStoreProviderManager extends Manager {
public PrimaryDataStoreProvider getDataStoreProvider(Long providerId);
+ public PrimaryDataStoreProvider getDataStoreProvider(String name);
+ public List<PrimaryDataStoreProvider> getDataStoreProviders();
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
index 809a7e5..c0ad052 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
@@ -18,15 +18,86 @@
*/
package org.apache.cloudstack.storage.datastore.provider;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderDao;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderVO;
import org.springframework.stereotype.Component;
@Component
public class PrimaryDataStoreProviderManagerImpl implements PrimaryDataStoreProviderManager {
-
+ @Inject
+ List<PrimaryDataStoreProvider> providers;
+ @Inject
+ PrimaryDataStoreProviderDao providerDao;
+
@Override
public PrimaryDataStoreProvider getDataStoreProvider(Long providerId) {
+ for (PrimaryDataStoreProvider provider : providers) {
+ if (provider.getId() == providerId) {
+ return provider;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+ List<PrimaryDataStoreProviderVO> providerVos = providerDao.listAll();
+ for (PrimaryDataStoreProvider provider : providers) {
+ boolean existingProvider = false;
+ for (PrimaryDataStoreProviderVO providerVo : providerVos) {
+ if (providerVo.getName().equalsIgnoreCase(provider.getName())) {
+ existingProvider = true;
+ break;
+ }
+ }
+ if (!existingProvider) {
+ PrimaryDataStoreProviderVO dataStoreProvider = new PrimaryDataStoreProviderVO();
+ dataStoreProvider.setName(provider.getName());
+ dataStoreProvider = providerDao.persist(dataStoreProvider);
+ provider.register(dataStoreProvider, params);
+ }
+ PrimaryDataStoreProviderVO providervo = providerDao.findByName(provider.getName());
+ provider.init(providervo);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean start() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean stop() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public String getName() {
// TODO Auto-generated method stub
return null;
}
+ @Override
+ public PrimaryDataStoreProvider getDataStoreProvider(String name) {
+ for (PrimaryDataStoreProvider provider : providers) {
+ if (provider.getName().equalsIgnoreCase(name)) {
+ return provider;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public List<PrimaryDataStoreProvider> getDataStoreProviders() {
+ return providers;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
index e775d25..6aacfee 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/TemplateEntityImpl.java
@@ -59,7 +59,6 @@ public class TemplateEntityImpl implements TemplateEntity {
return this.templateInfo.getId();
}
- @Override
public String getExternalId() {
// TODO Auto-generated method stub
return null;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDaoStoreDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDaoStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDaoStoreDaoImpl.java
index 995aa5e..3f3e9ca 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDaoStoreDaoImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDaoStoreDaoImpl.java
@@ -21,8 +21,18 @@ package org.apache.cloudstack.storage.image.db;
import org.springframework.stereotype.Component;
import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchCriteria2;
+import com.cloud.utils.db.SearchCriteriaService;
+import com.cloud.utils.db.SearchCriteria.Op;
@Component
public class ImageDaoStoreDaoImpl extends GenericDaoBase<ImageDataStoreVO, Long> implements ImageDataStoreDao {
+ @Override
+ public ImageDataStoreVO findByName(String name) {
+ SearchCriteriaService<ImageDataStoreVO, ImageDataStoreVO> sc = SearchCriteria2.create(ImageDataStoreVO.class);
+ sc.addAnd(sc.getEntity().getName(), Op.EQ, name);
+ return sc.find();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreDao.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreDao.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreDao.java
index 1a95c2d..d7358be 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreDao.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreDao.java
@@ -21,5 +21,5 @@ package org.apache.cloudstack.storage.image.db;
import com.cloud.utils.db.GenericDao;
public interface ImageDataStoreDao extends GenericDao<ImageDataStoreVO, Long> {
-
+ public ImageDataStoreVO findByName(String name);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDao.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDao.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDao.java
index 37a2fe9..1b13b7a 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDao.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDao.java
@@ -21,4 +21,5 @@ package org.apache.cloudstack.storage.image.db;
import com.cloud.utils.db.GenericDao;
public interface ImageDataStoreProviderDao extends GenericDao<ImageDataStoreProviderVO, Long> {
+ public ImageDataStoreProviderVO findByName(String name);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDaoImpl.java
index 49419d3..f86bf15 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDaoImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreProviderDaoImpl.java
@@ -21,8 +21,16 @@ package org.apache.cloudstack.storage.image.db;
import org.springframework.stereotype.Component;
import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchCriteria2;
+import com.cloud.utils.db.SearchCriteriaService;
+import com.cloud.utils.db.SearchCriteria.Op;
@Component
public class ImageDataStoreProviderDaoImpl extends GenericDaoBase<ImageDataStoreProviderVO, Long> implements ImageDataStoreProviderDao {
-
+ @Override
+ public ImageDataStoreProviderVO findByName(String name) {
+ SearchCriteriaService<ImageDataStoreProviderVO, ImageDataStoreProviderVO> service = SearchCriteria2.create(ImageDataStoreProviderVO.class);
+ service.addAnd(service.getEntity().getName(), Op.EQ, name);
+ return service.find();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreVO.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreVO.java
index 5094418..5b660ec 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreVO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataStoreVO.java
@@ -35,7 +35,7 @@ public class ImageDataStoreVO {
@Column(name = "name", nullable = false)
private String name;
- @Column(name = "image_provider", nullable = false)
+ @Column(name = "image_provider_id", nullable = false)
private long provider;
public long getId() {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java
index efce33c..19ed0fd 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/ImageDataVO.java
@@ -143,7 +143,7 @@ public class ImageDataVO implements Identity {
this.uniqueName = uniqueName;
}
- protected ImageDataVO() {
+ public ImageDataVO() {
this.uuid = UUID.randomUUID().toString();
}
@@ -178,6 +178,10 @@ public class ImageDataVO implements Identity {
public boolean requiresHvm() {
return requiresHvm;
}
+
+ public void setRequireHvm(boolean hvm) {
+ this.requiresHvm = hvm;
+ }
public int getBits() {
return bits;
@@ -230,6 +234,10 @@ public class ImageDataVO implements Identity {
public long getAccountId() {
return accountId;
}
+
+ public void setAccountId(long accountId) {
+ this.accountId = accountId;
+ }
public String getChecksum() {
return checksum;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/format/VHD.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/format/VHD.java b/engine/storage/src/org/apache/cloudstack/storage/image/format/VHD.java
index f979ac3..89cd424 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/format/VHD.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/format/VHD.java
@@ -21,7 +21,7 @@ package org.apache.cloudstack.storage.image.format;
import org.apache.cloudstack.storage.BaseType;
import org.springframework.stereotype.Component;
-@Component
+@Component("image_format_vhd")
public class VHD extends BaseType implements ImageFormat {
private final String type = "VHD";
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/manager/ImageDataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/manager/ImageDataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/manager/ImageDataStoreManagerImpl.java
index ebd60f1..bf43356 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/manager/ImageDataStoreManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/manager/ImageDataStoreManagerImpl.java
@@ -20,7 +20,7 @@ package org.apache.cloudstack.storage.image.manager;
import javax.inject.Inject;
-import org.apache.cloudstack.storage.datastore.db.DataStoreVO;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
import org.apache.cloudstack.storage.image.db.ImageDataStoreDao;
import org.apache.cloudstack.storage.image.db.ImageDataDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/provider/DefaultImageDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/provider/DefaultImageDataStoreProvider.java b/engine/storage/src/org/apache/cloudstack/storage/image/provider/DefaultImageDataStoreProvider.java
index bfb915f..585c54b 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/provider/DefaultImageDataStoreProvider.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/provider/DefaultImageDataStoreProvider.java
@@ -18,10 +18,13 @@
*/
package org.apache.cloudstack.storage.image.provider;
+import java.util.Map;
+
import javax.inject.Inject;
import org.apache.cloudstack.storage.image.db.ImageDataStoreDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreProviderDao;
+import org.apache.cloudstack.storage.image.db.ImageDataStoreProviderVO;
import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
import org.apache.cloudstack.storage.image.driver.ImageDataStoreDriver;
import org.apache.cloudstack.storage.image.driver.ImageDataStoreDriverImpl;
@@ -29,6 +32,8 @@ import org.apache.cloudstack.storage.image.store.ImageDataStore;
import org.apache.cloudstack.storage.image.store.ImageDataStoreImpl;
import org.springframework.stereotype.Component;
+import com.cloud.utils.component.ComponentInject;
+
@Component
public class DefaultImageDataStoreProvider implements ImageDataStoreProvider {
private final String providerName = "DefaultProvider";
@@ -36,12 +41,14 @@ public class DefaultImageDataStoreProvider implements ImageDataStoreProvider {
ImageDataStoreProviderDao providerDao;
@Inject
ImageDataStoreDao imageStoreDao;
+ ImageDataStoreProviderVO provider;
@Override
public ImageDataStore getImageDataStore(long imageStoreId) {
ImageDataStoreVO idsv = imageStoreDao.findById(imageStoreId);
ImageDataStoreDriver driver = new ImageDataStoreDriverImpl();
ImageDataStore ids = new ImageDataStoreImpl(idsv, driver, false, null);
+ ids = ComponentInject.inject(ids);
return ids;
}
@@ -52,8 +59,24 @@ public class DefaultImageDataStoreProvider implements ImageDataStoreProvider {
@Override
public boolean register(long providerId) {
- // TODO Auto-generated method stub
return true;
}
+ @Override
+ public boolean init() {
+ provider = providerDao.findByName(providerName);
+ return true;
+ }
+
+ @Override
+ public ImageDataStore registerDataStore(String name, Map<String, String> params) {
+ ImageDataStoreVO dataStore = imageStoreDao.findByName(name);
+ if (dataStore == null) {
+ dataStore = new ImageDataStoreVO();
+ dataStore.setName(name);
+ dataStore.setProvider(provider.getId());
+ dataStore = imageStoreDao.persist(dataStore);
+ }
+ return getImageDataStore(dataStore.getId());
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProvider.java b/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProvider.java
index 8776827..76ab340 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProvider.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProvider.java
@@ -19,9 +19,15 @@
package org.apache.cloudstack.storage.image.provider;
import org.apache.cloudstack.storage.image.store.ImageDataStore;
+import org.apache.cloudstack.storage.image.store.lifecycle.ImageDataStoreLifeCycle;
-public interface ImageDataStoreProvider {
+public interface ImageDataStoreProvider extends ImageDataStoreLifeCycle {
ImageDataStore getImageDataStore(long imageStoreId);
boolean register(long providerId);
public String getName();
+ /**
+ * @param providerId
+ * @return
+ */
+ boolean init();
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProviderManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProviderManager.java b/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProviderManager.java
index 2359a27..f03a0e1 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProviderManager.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProviderManager.java
@@ -18,6 +18,8 @@
*/
package org.apache.cloudstack.storage.image.provider;
+import java.util.List;
+
import org.apache.cloudstack.storage.image.TemplateObject;
import org.apache.cloudstack.storage.image.store.ImageDataStore;
@@ -25,8 +27,13 @@ import com.cloud.utils.component.Manager;
public interface ImageDataStoreProviderManager extends Manager {
public ImageDataStoreProvider getProvider(long providerId);
-
+ public List<ImageDataStoreProvider> listProvider();
public ImageDataStore getDataStore(Long dataStoreId);
public ImageDataStore getDataStoreFromTemplateId(long templateId);
+ /**
+ * @param name
+ * @return
+ */
+ ImageDataStoreProvider getProvider(String name);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProviderManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProviderManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProviderManagerImpl.java
index 602973a..32f800c 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProviderManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/provider/ImageDataStoreProviderManagerImpl.java
@@ -24,7 +24,6 @@ import java.util.Map;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
-import org.apache.cloudstack.storage.image.TemplateObject;
import org.apache.cloudstack.storage.image.db.ImageDataDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreProviderDao;
@@ -51,7 +50,8 @@ public class ImageDataStoreProviderManagerImpl implements ImageDataStoreProvider
return null;
}
- protected ImageDataStoreProvider getProvider(String name) {
+ @Override
+ public ImageDataStoreProvider getProvider(String name) {
for (ImageDataStoreProvider provider : providers) {
if (provider.getName().equalsIgnoreCase(name)) {
return provider;
@@ -104,6 +104,7 @@ public class ImageDataStoreProviderManagerImpl implements ImageDataStoreProvider
nProvider = providerDao.persist(nProvider);
provider.register(nProvider.getId());
}
+ provider.init();
}
return true;
@@ -126,4 +127,9 @@ public class ImageDataStoreProviderManagerImpl implements ImageDataStoreProvider
// TODO Auto-generated method stub
return null;
}
+
+ @Override
+ public List<ImageDataStoreProvider> listProvider() {
+ return providers;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStoreImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStoreImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStoreImpl.java
index 8f1b373..5ba91f7 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStoreImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/store/ImageDataStoreImpl.java
@@ -83,8 +83,7 @@ public class ImageDataStoreImpl implements ImageDataStore {
@Override
public long getImageDataStoreId() {
- // TODO Auto-generated method stub
- return 0;
+ return imageDataStoreVO.getId();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/image/store/lifecycle/ImageDataStoreLifeCycle.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/store/lifecycle/ImageDataStoreLifeCycle.java b/engine/storage/src/org/apache/cloudstack/storage/image/store/lifecycle/ImageDataStoreLifeCycle.java
new file mode 100644
index 0000000..a96983c
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/store/lifecycle/ImageDataStoreLifeCycle.java
@@ -0,0 +1,27 @@
+/*
+ * 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.lifecycle;
+
+import java.util.Map;
+
+import org.apache.cloudstack.storage.image.store.ImageDataStore;
+
+public interface ImageDataStoreLifeCycle {
+ public ImageDataStore registerDataStore(String name, Map<String, String> params);
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/strategy/DefaultVolumeStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/strategy/DefaultVolumeStrategy.java b/engine/storage/src/org/apache/cloudstack/storage/strategy/DefaultVolumeStrategy.java
index 8d1ab79..0f84109 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/strategy/DefaultVolumeStrategy.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/strategy/DefaultVolumeStrategy.java
@@ -72,6 +72,7 @@ public class DefaultVolumeStrategy implements VolumeStrategy {
VolumeProfile vp = _driver.createVolumeFromTemplate(get(volume.getId()), tp, dp);
+ /*
VolumeVO vlvo = _volumeMgr.getVolume(volume.getId());
vlvo.setFolder(_ds.getPath());
@@ -80,8 +81,10 @@ public class DefaultVolumeStrategy implements VolumeStrategy {
vlvo.setPoolType(_ds.getPoolType());
vlvo.setPoolId(_ds.getId());
vlvo.setPodId(_ds.getPodId());
-
+
return _volumeMgr.updateVolume(vlvo);
+ */
+ return null;
}
public boolean deleteVolume(Volume vol) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java
index cc48f10..d4064d1 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeEntityImpl.java
@@ -24,17 +24,21 @@ import java.util.List;
import java.util.Map;
import org.apache.cloudstack.engine.cloud.entity.api.SnapshotEntity;
+import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity;
import org.apache.cloudstack.engine.datacenter.entity.api.StorageEntity;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
import org.apache.cloudstack.engine.subsystem.api.storage.type.VolumeType;
+import org.apache.cloudstack.storage.image.TemplateEntityImpl;
+import org.apache.cloudstack.storage.image.TemplateInfo;
public class VolumeEntityImpl implements VolumeEntity {
private VolumeInfo volumeInfo;
-
- public VolumeEntityImpl(VolumeInfo volumeObject) {
+ private final VolumeService vs;
+ public VolumeEntityImpl(VolumeInfo volumeObject, VolumeService vs) {
this.volumeInfo = volumeObject;
+ this.vs = vs;
}
public VolumeInfo getVolumeInfo() {
@@ -55,7 +59,6 @@ public class VolumeEntityImpl implements VolumeEntity {
return volumeInfo.getId();
}
- @Override
public String getExternalId() {
// TODO Auto-generated method stub
return null;
@@ -214,4 +217,11 @@ public class VolumeEntityImpl implements VolumeEntity {
}
+ @Override
+ public boolean createVolumeFromTemplate(long dataStoreId, VolumeDiskType diskType, TemplateEntity template) {
+ TemplateInfo ti = ((TemplateEntityImpl)template).getTemplateInfo();
+ volumeInfo = vs.createVolumeFromTemplate(volumeInfo, dataStoreId, diskType, ti);
+ return true;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/550f4fbc/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeManager.java b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeManager.java
index 22e9baf..f27753d 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeManager.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/volume/VolumeManager.java
@@ -19,10 +19,13 @@
package org.apache.cloudstack.storage.volume;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeProfile;
+import org.apache.cloudstack.storage.volume.db.VolumeVO;
import com.cloud.storage.Volume;
-import com.cloud.storage.VolumeVO;
+import com.cloud.storage.Volume.Event;
+import com.cloud.storage.Volume.State;
import com.cloud.utils.fsm.NoTransitionException;
+import com.cloud.utils.fsm.StateMachine2;
public interface VolumeManager {
VolumeVO allocateDuplicateVolume(VolumeVO oldVol);
@@ -34,4 +37,9 @@ public interface VolumeManager {
VolumeVO getVolume(long volumeId);
VolumeVO updateVolume(VolumeVO volume);
+
+ /**
+ * @return
+ */
+ StateMachine2<State, Event, VolumeVO> getStateMachine();
}