mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user