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/12/11 23:09:15 UTC
[1/2] git commit: updated refs/heads/4.3 to feb9fe1
Updated Branches:
refs/heads/4.3 2dfa84bf2 -> feb9fe18b
CLOUDSTACK-5451:Restart MS after migrating NFS image store to S3,
previous Ready template is not ready anymore.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/feb9fe18
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/feb9fe18
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/feb9fe18
Branch: refs/heads/4.3
Commit: feb9fe18b89bf59d3e24f8ae3306a76d8b818ff7
Parents: eb64159
Author: Min Chen <mi...@citrix.com>
Authored: Wed Dec 11 13:58:20 2013 -0800
Committer: Min Chen <mi...@citrix.com>
Committed: Wed Dec 11 14:02:24 2013 -0800
----------------------------------------------------------------------
.../storage/image/TemplateServiceImpl.java | 32 +++++++++++++++-----
.../storage/volume/VolumeServiceImpl.java | 16 ++++++++--
2 files changed, 39 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/feb9fe18/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
index f5f15df..8078e74 100644
--- a/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
+++ b/engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java
@@ -41,6 +41,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector;
import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State;
import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.StorageCacheManager;
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory;
@@ -77,6 +78,7 @@ import com.cloud.storage.DataStoreRole;
import com.cloud.storage.ScopeType;
import com.cloud.storage.Storage.TemplateType;
import com.cloud.storage.StoragePool;
+import com.cloud.storage.VMTemplateStorageResourceAssoc;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VMTemplateZoneVO;
@@ -281,7 +283,7 @@ public class TemplateServiceImpl implements TemplateService {
GlobalLock syncLock = GlobalLock.getInternLock(lockString);
try {
if (syncLock.lock(3)) {
- try{
+ try {
Long zoneId = store.getScope().getScopeId();
Map<String, TemplateProp> templateInfos = listTemplate(store);
@@ -393,14 +395,20 @@ public class TemplateServiceImpl implements TemplateService {
_templateDao.update(tmplt.getId(), tmlpt);
associateTemplateToZone(tmplt.getId(), zoneId);
-
}
} else {
s_logger.info("Template Sync did not find " + uniqueName + " on image store " + storeId + ", may request download based on available hypervisor types");
if (tmpltStore != null) {
- s_logger.info("Removing leftover template " + uniqueName + " entry from template store table");
- // remove those leftover entries
- _vmTemplateStoreDao.remove(tmpltStore.getId());
+ if (isRegionStore(store) && tmpltStore.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED
+ && tmpltStore.getState() == State.Ready
+ && tmpltStore.getInstallPath() == null) {
+ s_logger.info("Keep fake entry in template store table for migration of previous NFS to object store");
+ }
+ else {
+ s_logger.info("Removing leftover template " + uniqueName + " entry from template store table");
+ // remove those leftover entries
+ _vmTemplateStoreDao.remove(tmpltStore.getId());
+ }
}
}
}
@@ -430,6 +438,17 @@ public class TemplateServiceImpl implements TemplateService {
continue;
}
+ // if this is a region store, and there is already an DOWNLOADED entry there without install_path information, which
+ // means that this is a duplicate entry from migration of previous NFS to staging.
+ if (isRegionStore(store)) {
+ TemplateDataStoreVO tmpltStore = _vmTemplateStoreDao.findByStoreTemplate(storeId, tmplt.getId());
+ if (tmpltStore != null && tmpltStore.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED && tmpltStore.getState() == State.Ready
+ && tmpltStore.getInstallPath() == null) {
+ s_logger.info("Skip sync template for migration of previous NFS to object store");
+ continue;
+ }
+ }
+
if (availHypers.contains(tmplt.getHypervisorType())) {
s_logger.info("Downloading template " + tmplt.getUniqueName() + " to image store "
+ store.getName());
@@ -474,8 +493,7 @@ public class TemplateServiceImpl implements TemplateService {
}
}
- }
- finally{
+ } finally {
syncLock.unlock();
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/feb9fe18/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
index fc6225c..3cef23d 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
@@ -25,6 +25,9 @@ import java.util.Map;
import javax.inject.Inject;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity;
import org.apache.cloudstack.engine.subsystem.api.storage.ChapInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
@@ -57,8 +60,6 @@ import org.apache.cloudstack.storage.datastore.PrimaryDataStoreProviderManager;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO;
import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.storage.ListVolumeAnswer;
@@ -1262,6 +1263,17 @@ public class VolumeServiceImpl implements VolumeService {
s_logger.info("Skip downloading volume " + volumeHost.getVolumeId() + " since no download url is specified.");
continue;
}
+
+ // if this is a region store, and there is already an DOWNLOADED entry there without install_path information, which
+ // means that this is a duplicate entry from migration of previous NFS to staging.
+ if (store.getScope().getScopeType() == ScopeType.REGION) {
+ if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED
+ && volumeHost.getInstallPath() == null) {
+ s_logger.info("Skip sync volume for migration of previous NFS to object store");
+ continue;
+ }
+ }
+
s_logger.debug("Volume " + volumeHost.getVolumeId() + " needs to be downloaded to " + store.getName());
// TODO: pass a callback later
VolumeInfo vol = volFactory.getVolume(volumeHost.getVolumeId());
[2/2] git commit: updated refs/heads/4.3 to feb9fe1
Posted by mc...@apache.org.
CLOUDSTACK-5414: With NFS Image Store migrated to S3 an error is thrown
in creation of Virtual Router.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/eb641596
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/eb641596
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/eb641596
Branch: refs/heads/4.3
Commit: eb641596321a509b88050c91a51a5d114232c2fc
Parents: 2dfa84b
Author: Min Chen <mi...@citrix.com>
Authored: Wed Dec 11 13:57:39 2013 -0800
Committer: Min Chen <mi...@citrix.com>
Committed: Wed Dec 11 14:02:24 2013 -0800
----------------------------------------------------------------------
.../storage/datastore/db/TemplateDataStoreDao.java | 3 +++
.../storage/image/db/TemplateDataStoreDaoImpl.java | 17 +++++++++++++++++
.../com/cloud/template/TemplateManagerImpl.java | 10 +++++++---
3 files changed, 27 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/eb641596/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 93adaaf..7a9a15a 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
@@ -24,6 +24,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreState
import com.cloud.storage.DataStoreRole;
import com.cloud.storage.VMTemplateStorageResourceAssoc;
+import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
import com.cloud.utils.db.GenericDao;
import com.cloud.utils.fsm.StateDao;
@@ -53,6 +54,8 @@ StateDao<ObjectInDataStoreStateMachine.State, ObjectInDataStoreStateMachine.Even
TemplateDataStoreVO findByTemplateZoneDownloadStatus(long templateId, Long zoneId,
VMTemplateStorageResourceAssoc.Status... status);
+ TemplateDataStoreVO findByTemplateZoneStagingDownloadStatus(long templateId, Long zoneId, Status... status);
+
TemplateDataStoreVO findByStoreTemplate(long storeId, long templateId);
TemplateDataStoreVO findByStoreTemplate(long storeId, long templateId, boolean lock);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/eb641596/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 ee7c4fc..69a52c0 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
@@ -295,6 +295,23 @@ public class TemplateDataStoreDaoImpl extends GenericDaoBase<TemplateDataStoreVO
}
@Override
+ public TemplateDataStoreVO findByTemplateZoneStagingDownloadStatus(long templateId, Long zoneId, Status... status) {
+ // get all elgible image stores
+ List<DataStore> cacheStores = _storeMgr.getImageCacheStores(new ZoneScope(zoneId));
+ if (cacheStores != null) {
+ for (DataStore store : cacheStores) {
+ List<TemplateDataStoreVO> sRes = listByTemplateStoreDownloadStatus(templateId, store.getId(),
+ status);
+ if (sRes != null && sRes.size() > 0) {
+ Collections.shuffle(sRes);
+ return sRes.get(0);
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
public TemplateDataStoreVO findByStoreTemplate(long storeId, long templateId) {
SearchCriteria<TemplateDataStoreVO> sc = storeTemplateSearch.create();
sc.setParameters("store_id", storeId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/eb641596/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java
index 7aab492..de30948 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -19,9 +19,9 @@ package com.cloud.template;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -136,7 +136,6 @@ import com.cloud.storage.StoragePoolHostVO;
import com.cloud.storage.StoragePoolStatus;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.Upload;
-import com.cloud.storage.VMTemplateDetailVO;
import com.cloud.storage.VMTemplateHostVO;
import com.cloud.storage.VMTemplateStoragePoolVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc;
@@ -1712,7 +1711,12 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
TemplateDataStoreVO templateStoreRef = _tmplStoreDao.findByTemplateZoneDownloadStatus(templateId, zoneId,
VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
if (templateStoreRef == null) {
- throw new CloudRuntimeException("Template " + templateId + " has not been completely downloaded to zone " + zoneId);
+ // check if it is ready on image cache stores
+ templateStoreRef = _tmplStoreDao.findByTemplateZoneStagingDownloadStatus(templateId, zoneId,
+ VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
+ if (templateStoreRef == null) {
+ throw new CloudRuntimeException("Template " + templateId + " has not been completely downloaded to zone " + zoneId);
+ }
}
return templateStoreRef.getSize();