CLOUDSTACK-6636: [Windows] Can not create Template from ROOT snapshot on Windows management server with Xen/NFS storage type. This change is only for XenServer with NFS Storage Server. Will fix remaining when we touch them.

Signed-off-by: Koushik Das <koushik@apache.org>
This commit is contained in:
Damodar Reddy 2014-06-18 14:55:05 +05:30 committed by Koushik Das
parent 05c01a7dc9
commit 5cbb182c6d
7 changed files with 41 additions and 9 deletions

View File

@ -26,4 +26,6 @@ public interface DataStoreTO {
String getUuid(); String getUuid();
String getUrl(); String getUrl();
String getPathSeparator();
} }

View File

@ -23,6 +23,7 @@ public class NfsTO implements DataStoreTO {
private String _url; private String _url;
private DataStoreRole _role; private DataStoreRole _role;
private String uuid; private String uuid;
private static final String pathSeparator = "/";
public NfsTO() { public NfsTO() {
@ -65,4 +66,9 @@ public class NfsTO implements DataStoreTO {
public void setUuid(String uuid) { public void setUuid(String uuid) {
this.uuid = uuid; this.uuid = uuid;
} }
@Override
public String getPathSeparator() {
return pathSeparator;
}
} }

View File

@ -40,6 +40,7 @@ public final class S3TO implements S3Utils.ClientOptions, DataStoreTO {
private Date created; private Date created;
private boolean enableRRS; private boolean enableRRS;
private long maxSingleUploadSizeInBytes; private long maxSingleUploadSizeInBytes;
private static final String pathSeparator = "/";
public S3TO() { public S3TO() {
@ -289,4 +290,9 @@ public final class S3TO implements S3Utils.ClientOptions, DataStoreTO {
} }
} }
} }
@Override
public String getPathSeparator() {
return pathSeparator;
}
} }

View File

@ -26,6 +26,7 @@ public class SwiftTO implements DataStoreTO, SwiftUtil.SwiftClientCfg {
String userName; String userName;
String key; String key;
private static final String pathSeparator = "/";
public SwiftTO() { public SwiftTO() {
} }
@ -76,4 +77,9 @@ public class SwiftTO implements DataStoreTO, SwiftUtil.SwiftClientCfg {
public String getUuid() { public String getUuid() {
return null; return null;
} }
@Override
public String getPathSeparator() {
return pathSeparator;
}
} }

View File

@ -27,6 +27,7 @@ public class ImageStoreTO implements DataStoreTO {
private String providerName; private String providerName;
private DataStoreRole role; private DataStoreRole role;
private String uuid; private String uuid;
private static final String pathSeparator = "/";
public ImageStoreTO() { public ImageStoreTO() {
@ -98,4 +99,9 @@ public class ImageStoreTO implements DataStoreTO {
public void setUuid(String uuid) { public void setUuid(String uuid) {
this.uuid = uuid; this.uuid = uuid;
} }
@Override
public String getPathSeparator() {
return pathSeparator;
}
} }

View File

@ -46,6 +46,7 @@ public class PrimaryDataStoreTO implements DataStoreTO {
private int port; private int port;
private final String url; private final String url;
private Map<String, String> details; private Map<String, String> details;
private static final String pathSeparator = "/";
public PrimaryDataStoreTO(PrimaryDataStore dataStore) { public PrimaryDataStoreTO(PrimaryDataStore dataStore) {
this.uuid = dataStore.getUuid(); this.uuid = dataStore.getUuid();
@ -122,6 +123,11 @@ public class PrimaryDataStoreTO implements DataStoreTO {
this.port = port; this.port = port;
} }
@Override
public String getPathSeparator() {
return pathSeparator;
}
@Override @Override
public String toString() { public String toString() {
return new StringBuilder("PrimaryDataStoreTO[uuid=").append(uuid) return new StringBuilder("PrimaryDataStoreTO[uuid=").append(uuid)

View File

@ -109,7 +109,7 @@ public class XenServerStorageProcessor implements StorageProcessor {
return new AttachAnswer("Can't attach a iso which is not created on nfs: "); return new AttachAnswer("Can't attach a iso which is not created on nfs: ");
} }
NfsTO nfsStore = (NfsTO) store; NfsTO nfsStore = (NfsTO) store;
isoURL = nfsStore.getUrl() + File.separator + data.getPath(); isoURL = nfsStore.getUrl() + nfsStore.getPathSeparator() + data.getPath();
} }
String vmName = cmd.getVmName(); String vmName = cmd.getVmName();
@ -290,7 +290,7 @@ public class XenServerStorageProcessor implements StorageProcessor {
return new AttachAnswer("Can't attach a iso which is not created on nfs: "); return new AttachAnswer("Can't attach a iso which is not created on nfs: ");
} }
NfsTO nfsStore = (NfsTO) store; NfsTO nfsStore = (NfsTO) store;
isoURL = nfsStore.getUrl() + File.separator + data.getPath(); isoURL = nfsStore.getUrl() + nfsStore.getPathSeparator() + data.getPath();
} }
try { try {
@ -933,7 +933,7 @@ public class XenServerStorageProcessor implements StorageProcessor {
SR primaryStoragePool = hypervisorResource.getStorageRepository(conn, destVolume.getDataStore().getUuid()); SR primaryStoragePool = hypervisorResource.getStorageRepository(conn, destVolume.getDataStore().getUuid());
String srUuid = primaryStoragePool.getUuid(conn); String srUuid = primaryStoragePool.getUuid(conn);
URI uri = new URI(nfsStore.getUrl()); URI uri = new URI(nfsStore.getUrl());
String volumePath = uri.getHost() + ":" + uri.getPath() + File.separator + srcVolume.getPath(); String volumePath = uri.getHost() + ":" + uri.getPath() + nfsStore.getPathSeparator() + srcVolume.getPath();
String uuid = copy_vhd_from_secondarystorage(conn, volumePath, srUuid, wait); String uuid = copy_vhd_from_secondarystorage(conn, volumePath, srUuid, wait);
VolumeObjectTO newVol = new VolumeObjectTO(); VolumeObjectTO newVol = new VolumeObjectTO();
newVol.setPath(uuid); newVol.setPath(uuid);
@ -970,7 +970,7 @@ public class XenServerStorageProcessor implements StorageProcessor {
} }
// Create a SR for the volume UUID folder // Create a SR for the volume UUID folder
secondaryStorage = hypervisorResource.createNfsSRbyURI(conn, new URI(nfsStore.getUrl() + File.separator + destVolume.getPath()), false); secondaryStorage = hypervisorResource.createNfsSRbyURI(conn, new URI(nfsStore.getUrl() + nfsStore.getPathSeparator() + destVolume.getPath()), false);
// Look up the volume on the source primary storage pool // Look up the volume on the source primary storage pool
VDI srcVdi = getVDIbyUuid(conn, srcVolume.getPath()); VDI srcVdi = getVDIbyUuid(conn, srcVolume.getPath());
// Copy the volume to secondary storage // Copy the volume to secondary storage
@ -978,7 +978,7 @@ public class XenServerStorageProcessor implements StorageProcessor {
String destVolumeUUID = destVdi.getUuid(conn); String destVolumeUUID = destVdi.getUuid(conn);
VolumeObjectTO newVol = new VolumeObjectTO(); VolumeObjectTO newVol = new VolumeObjectTO();
newVol.setPath(destVolume.getPath() + File.separator + destVolumeUUID + ".vhd"); newVol.setPath(destVolume.getPath() + nfsStore.getPathSeparator() + destVolumeUUID + ".vhd");
newVol.setSize(srcVolume.getSize()); newVol.setSize(srcVolume.getSize());
return new CopyCmdAnswer(newVol); return new CopyCmdAnswer(newVol);
} catch (Exception e) { } catch (Exception e) {
@ -1282,7 +1282,7 @@ public class XenServerStorageProcessor implements StorageProcessor {
} }
// finalPath = folder + File.separator + snapshotBackupUuid; // finalPath = folder + File.separator + snapshotBackupUuid;
} else { } else {
finalPath = folder + File.separator + snapshotBackupUuid; finalPath = folder + cacheStore.getPathSeparator() + snapshotBackupUuid;
} }
} finally { } finally {
@ -1310,7 +1310,7 @@ public class XenServerStorageProcessor implements StorageProcessor {
String[] tmp = results.split("#"); String[] tmp = results.split("#");
snapshotBackupUuid = tmp[1]; snapshotBackupUuid = tmp[1];
physicalSize = Long.parseLong(tmp[2]); physicalSize = Long.parseLong(tmp[2]);
finalPath = folder + File.separator + snapshotBackupUuid; finalPath = folder + cacheStore.getPathSeparator() + snapshotBackupUuid;
} }
} }
// delete primary snapshots with only the last one left // delete primary snapshots with only the last one left
@ -1461,13 +1461,13 @@ public class XenServerStorageProcessor implements StorageProcessor {
} }
// Get the absolute path of the snapshot on the secondary storage. // Get the absolute path of the snapshot on the secondary storage.
String snapshotInstallPath = snapshot.getPath(); String snapshotInstallPath = snapshot.getPath();
int index = snapshotInstallPath.lastIndexOf(File.separator); int index = snapshotInstallPath.lastIndexOf(nfsImageStore.getPathSeparator());
String snapshotName = snapshotInstallPath.substring(index + 1); String snapshotName = snapshotInstallPath.substring(index + 1);
if (!snapshotName.startsWith("VHD-") && !snapshotName.endsWith(".vhd")) { if (!snapshotName.startsWith("VHD-") && !snapshotName.endsWith(".vhd")) {
snapshotInstallPath = snapshotInstallPath + ".vhd"; snapshotInstallPath = snapshotInstallPath + ".vhd";
} }
URI snapshotURI = new URI(secondaryStorageUrl + File.separator + snapshotInstallPath); URI snapshotURI = new URI(secondaryStorageUrl + nfsImageStore.getPathSeparator() + snapshotInstallPath);
String snapshotPath = snapshotURI.getHost() + ":" + snapshotURI.getPath(); String snapshotPath = snapshotURI.getHost() + ":" + snapshotURI.getPath();
String srUuid = primaryStorageSR.getUuid(conn); String srUuid = primaryStorageSR.getUuid(conn);
volumeUUID = copy_vhd_from_secondarystorage(conn, snapshotPath, srUuid, wait); volumeUUID = copy_vhd_from_secondarystorage(conn, snapshotPath, srUuid, wait);