mirror of https://github.com/apache/cloudstack.git
CLOUDSTACK-6025:CreateTemplate from snapshot in NFS is failing , after
migarting to S3 datastore.
This commit is contained in:
parent
0839fbce67
commit
9b21da65d1
|
|
@ -442,10 +442,7 @@ public class SnapshotServiceImpl implements SnapshotService {
|
|||
}
|
||||
|
||||
// push one individual snapshots currently on cache store to region store if it is not there already
|
||||
private void syncSnapshotToRegionStore(long snapshotId, DataStore store) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("sync snapshot " + snapshotId + " from cache to object store...");
|
||||
}
|
||||
private void syncSnapshotToRegionStore(long snapshotId, DataStore store){
|
||||
// if snapshot is already on region wide object store, check if it is really downloaded there (by checking install_path). Sync snapshot to region
|
||||
// wide store if it is not there physically.
|
||||
SnapshotInfo snapOnStore = _snapshotFactory.getSnapshot(snapshotId, store);
|
||||
|
|
@ -453,6 +450,9 @@ public class SnapshotServiceImpl implements SnapshotService {
|
|||
throw new CloudRuntimeException("Cannot find an entry in snapshot_store_ref for snapshot " + snapshotId + " on region store: " + store.getName());
|
||||
}
|
||||
if (snapOnStore.getPath() == null || snapOnStore.getPath().length() == 0) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("sync snapshot " + snapshotId + " from cache to object store...");
|
||||
}
|
||||
// snapshot is not on region store yet, sync to region store
|
||||
SnapshotInfo srcSnapshot = _snapshotFactory.getReadySnapshotOnCache(snapshotId);
|
||||
if (srcSnapshot == null) {
|
||||
|
|
|
|||
|
|
@ -92,7 +92,8 @@ public class VmwareStorageSubsystemCommandHandler extends StorageSubsystemComman
|
|||
} else if (srcData.getObjectType() == DataObjectType.TEMPLATE) {
|
||||
// sync template from NFS cache to S3 in NFS migration to S3 case
|
||||
storageManager.createOvaForTemplate((TemplateObjectTO)srcData);
|
||||
} else if (srcData.getObjectType() == DataObjectType.SNAPSHOT && destData.getObjectType() == DataObjectType.SNAPSHOT) {
|
||||
} else if (srcData.getObjectType() == DataObjectType.SNAPSHOT) {
|
||||
// pack ova first
|
||||
// sync snapshot from NFS cache to S3 in NFS migration to S3 case
|
||||
String parentPath = storageResource.getRootDir(srcDataStore.getUrl());
|
||||
SnapshotObjectTO snap = (SnapshotObjectTO)srcData;
|
||||
|
|
@ -101,27 +102,28 @@ public class VmwareStorageSubsystemCommandHandler extends StorageSubsystemComman
|
|||
String name = path.substring(index + 1);
|
||||
String snapDir = path.substring(0, index);
|
||||
storageManager.createOva(parentPath + File.separator + snapDir, name);
|
||||
} else if (srcData.getObjectType() == DataObjectType.SNAPSHOT && destData.getObjectType() == DataObjectType.TEMPLATE) {
|
||||
//create template from snapshot on src at first, then copy it to s3
|
||||
TemplateObjectTO cacheTemplate = (TemplateObjectTO)destData;
|
||||
cacheTemplate.setDataStore(srcDataStore);
|
||||
CopyCmdAnswer answer = (CopyCmdAnswer)processor.createTemplateFromSnapshot(cmd);
|
||||
if (!answer.getResult()) {
|
||||
return answer;
|
||||
if (destData.getObjectType() == DataObjectType.TEMPLATE) {
|
||||
//create template from snapshot on src at first, then copy it to s3
|
||||
TemplateObjectTO cacheTemplate = (TemplateObjectTO)destData;
|
||||
cacheTemplate.setDataStore(srcDataStore);
|
||||
CopyCmdAnswer answer = (CopyCmdAnswer)processor.createTemplateFromSnapshot(cmd);
|
||||
if (!answer.getResult()) {
|
||||
return answer;
|
||||
}
|
||||
cacheTemplate.setDataStore(destDataStore);
|
||||
TemplateObjectTO template = (TemplateObjectTO)answer.getNewData();
|
||||
template.setDataStore(srcDataStore);
|
||||
CopyCommand newCmd = new CopyCommand(template, destData, cmd.getWait(), cmd.executeInSequence());
|
||||
Answer result = storageResource.defaultAction(newCmd);
|
||||
//clean up template data on staging area
|
||||
try {
|
||||
DeleteCommand deleteCommand = new DeleteCommand(template);
|
||||
storageResource.defaultAction(deleteCommand);
|
||||
} catch (Exception e) {
|
||||
s_logger.debug("Failed to clean up staging area:", e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
cacheTemplate.setDataStore(destDataStore);
|
||||
TemplateObjectTO template = (TemplateObjectTO)answer.getNewData();
|
||||
template.setDataStore(srcDataStore);
|
||||
CopyCommand newCmd = new CopyCommand(template, destData, cmd.getWait(), cmd.executeInSequence());
|
||||
Answer result = storageResource.defaultAction(newCmd);
|
||||
//clean up template data on staging area
|
||||
try {
|
||||
DeleteCommand deleteCommand = new DeleteCommand(template);
|
||||
storageResource.defaultAction(deleteCommand);
|
||||
} catch (Exception e) {
|
||||
s_logger.debug("Failed to clean up staging area:", e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
needDelegation = true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue