You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2013/10/26 07:49:49 UTC

[3/3] git commit: updated refs/heads/object_store_migration to 216d034

Forgot to update store role of template_store_ref and snapshot_store_ref
in prepareSecondaryStorageForMigrationCmd.

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

Branch: refs/heads/object_store_migration
Commit: 216d0343ed3a97455f23616949fb918e75a54ad9
Parents: 0f0370b
Author: Min Chen <mi...@citrix.com>
Authored: Fri Oct 25 22:46:07 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Fri Oct 25 22:46:07 2013 -0700

----------------------------------------------------------------------
 .../datastore/db/SnapshotDataStoreDao.java      |  2 ++
 .../datastore/db/TemplateDataStoreDao.java      |  2 ++
 .../image/db/SnapshotDataStoreDaoImpl.java      | 20 +++++++++++++++++--
 .../image/db/TemplateDataStoreDaoImpl.java      | 21 ++++++++++++++++++--
 .../image/db/VolumeDataStoreDaoImpl.java        | 21 ++++++++++++++++----
 .../com/cloud/storage/StorageManagerImpl.java   | 10 ++++++----
 6 files changed, 64 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/216d0343/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
index 9cde86d..dfa03ad 100644
--- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
+++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreDao.java
@@ -48,4 +48,6 @@ StateDao<ObjectInDataStoreStateMachine.State, ObjectInDataStoreStateMachine.Even
     void deleteSnapshotRecordsOnPrimary();
 
     List<SnapshotDataStoreVO> listOnCache(long snapshotId);
+
+    void updateStoreRoleToCache(long storeId);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/216d0343/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java
index 95cbdb6..93adaaf 100644
--- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java
+++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java
@@ -68,4 +68,6 @@ StateDao<ObjectInDataStoreStateMachine.State, ObjectInDataStoreStateMachine.Even
     TemplateDataStoreVO findReadyOnCache(long templateId);
 
     List<TemplateDataStoreVO> listOnCache(long templateId);
+
+    void updateStoreRoleToCachce(long storeId);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/216d0343/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
index d566b31..053c806 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/SnapshotDataStoreDaoImpl.java
@@ -250,12 +250,13 @@ public class SnapshotDataStoreDaoImpl extends GenericDaoBase<SnapshotDataStoreVO
     @Override
     public void duplicateCacheRecordsOnRegionStore(long storeId) {
         // find all records on image cache
-        SearchCriteria<SnapshotDataStoreVO> sc = cacheSearch.create();
-        sc.setParameters("store_id", storeId);
+        SearchCriteria<SnapshotDataStoreVO> sc = storeSnapshotSearch.create();
+        sc.setParameters("store_role", DataStoreRole.ImageCache);
         sc.setParameters("destroyed", false);
         List<SnapshotDataStoreVO> snapshots = listBy(sc);
         // create an entry for each record, but with empty install path since the content is not yet on region-wide store yet
         if (snapshots != null) {
+            s_logger.info("Duplicate " + snapshots.size() + " snapshot cache store records to region store");
             for (SnapshotDataStoreVO snap : snapshots) {
                 SnapshotDataStoreVO ss = new SnapshotDataStoreVO();
                 ss.setSnapshotId(snap.getId());
@@ -281,4 +282,19 @@ public class SnapshotDataStoreDaoImpl extends GenericDaoBase<SnapshotDataStoreVO
         return search(sc, null);
     }
 
+    @Override
+    public void updateStoreRoleToCache(long storeId) {
+        SearchCriteria<SnapshotDataStoreVO> sc = storeSearch.create();
+        sc.setParameters("store_id", storeId);
+        sc.setParameters("destroyed", false);
+        List<SnapshotDataStoreVO> snaps = listBy(sc);
+        if (snaps != null) {
+            s_logger.info("Update to cache store role for " + snaps.size() + " entries in snapshot_store_ref");
+            for (SnapshotDataStoreVO snap : snaps) {
+                snap.setRole(DataStoreRole.ImageCache);
+                update(snap.getId(), snap);
+            }
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/216d0343/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java
index b7c70cc..bc43e6c 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java
@@ -376,12 +376,13 @@ public class TemplateDataStoreDaoImpl extends GenericDaoBase<TemplateDataStoreVO
     @Override
     public void duplicateCacheRecordsOnRegionStore(long storeId) {
         // find all records on image cache
-        SearchCriteria<TemplateDataStoreVO> sc = cacheSearch.create();
-        sc.setParameters("store_id", storeId);
+        SearchCriteria<TemplateDataStoreVO> sc = templateRoleSearch.create();
+        sc.setParameters("store_role", DataStoreRole.ImageCache);
         sc.setParameters("destroyed", false);
         List<TemplateDataStoreVO> tmpls = listBy(sc);
         // create an entry for each record, but with empty install path since the content is not yet on region-wide store yet
         if (tmpls != null) {
+            s_logger.info("Duplicate " + tmpls.size() + " template cache store records to region store");
             for (TemplateDataStoreVO tmpl : tmpls) {
                 TemplateDataStoreVO ts = new TemplateDataStoreVO();
                 ts.setTemplateId(tmpl.getTemplateId());
@@ -413,8 +414,24 @@ public class TemplateDataStoreDaoImpl extends GenericDaoBase<TemplateDataStoreVO
             }
 
         }
+    }
+
 
+    @Override
+    public void updateStoreRoleToCachce(long storeId) {
+        SearchCriteria<TemplateDataStoreVO> sc = storeSearch.create();
+        sc.setParameters("store_id", storeId);
+        sc.setParameters("destroyed", false);
+        List<TemplateDataStoreVO> tmpls = listBy(sc);
+        if (tmpls != null) {
+            s_logger.info("Update to cache store role for " + tmpls.size() + " entries in template_store_ref");
+            for (TemplateDataStoreVO tmpl : tmpls) {
+                tmpl.setDataStoreRole(DataStoreRole.ImageCache);
+                update(tmpl.getId(), tmpl);
+            }
+        }
 
     }
 
+
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/216d0343/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java
index ef0a8c5..9324cd7 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java
@@ -16,16 +16,20 @@
 // under the License.
 package org.apache.cloudstack.storage.image.db;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
 import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
 import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
 import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State;
 import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao;
@@ -46,6 +50,9 @@ public class VolumeDataStoreDaoImpl extends GenericDaoBase<VolumeDataStoreVO, Lo
     private SearchBuilder<VolumeDataStoreVO> storeSearch;
     private SearchBuilder<VolumeDataStoreVO> cacheSearch;
     private SearchBuilder<VolumeDataStoreVO> storeVolumeSearch;
+    
+    @Inject
+    DataStoreManager storeMgr;
 
     @Override
     public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
@@ -191,12 +198,18 @@ public class VolumeDataStoreDaoImpl extends GenericDaoBase<VolumeDataStoreVO, Lo
     @Override
     public void duplicateCacheRecordsOnRegionStore(long storeId) {
         // find all records on image cache
-        SearchCriteria<VolumeDataStoreVO> sc = cacheSearch.create();
-        sc.setParameters("store_id", storeId);
-        sc.setParameters("destroyed", false);
-        List<VolumeDataStoreVO> vols = listBy(sc);
+        List<DataStore> cacheStores = storeMgr.listImageCacheStores();
+        if (cacheStores == null || cacheStores.size() == 0) {
+            return;
+        }
+        List<VolumeDataStoreVO> vols = new ArrayList<VolumeDataStoreVO>();
+        for (DataStore store : cacheStores) {
+            // check if the volume is stored there
+            vols.addAll(listByStoreId(store.getId()));
+        }
         // create an entry for each record, but with empty install path since the content is not yet on region-wide store yet
         if (vols != null) {
+            s_logger.info("Duplicate " + vols.size() + " volume cache store records to region store");
             for (VolumeDataStoreVO vol : vols) {
                 VolumeDataStoreVO vs = new VolumeDataStoreVO();
                 vs.setVolumeId(vol.getId());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/216d0343/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java
index 8e199ee..75850f4 100755
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@ -159,15 +159,14 @@ import com.cloud.utils.db.DB;
 import com.cloud.utils.db.GenericSearchBuilder;
 import com.cloud.utils.db.GlobalLock;
 import com.cloud.utils.db.JoinBuilder;
-import com.cloud.utils.db.TransactionCallback;
-import com.cloud.utils.db.TransactionCallbackNoReturn;
-import com.cloud.utils.db.TransactionLegacy;
-import com.cloud.utils.db.TransactionStatus;
 import com.cloud.utils.db.JoinBuilder.JoinType;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.SearchCriteria.Op;
 import com.cloud.utils.db.Transaction;
+import com.cloud.utils.db.TransactionCallbackNoReturn;
+import com.cloud.utils.db.TransactionLegacy;
+import com.cloud.utils.db.TransactionStatus;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine.State;
@@ -1264,6 +1263,9 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
         DataStoreLifeCycle lifeCycle = provider.getDataStoreLifeCycle();
         DataStore secStore = dataStoreMgr.getDataStore(storeId, DataStoreRole.Image);
         lifeCycle.migrateToObjectStore(secStore);
+        // update store_role in template_store_ref and snapshot_store_ref to ImageCache
+        _templateStoreDao.updateStoreRoleToCachce(storeId);
+        _snapshotStoreDao.updateStoreRoleToCache(storeId);
         // converted to an image cache store
         return (ImageStore)_dataStoreMgr.getDataStore(storeId, DataStoreRole.ImageCache);
     }