cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From anthon...@apache.org
Subject [2/2] git commit: updated refs/heads/4.4 to 60563d3
Date Fri, 28 Mar 2014 19:15:24 GMT
Revert "change below file names for consistency"

This reverts commit 9493b4d65cdf50a93913176fe69e63bb1a47e3d1.


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

Branch: refs/heads/4.4
Commit: 60563d395f102330a56da217bd9d35d21bb73feb
Parents: 553630b
Author: Anthony Xu <anthony.xu@citrix.com>
Authored: Fri Mar 28 12:10:11 2014 -0700
Committer: Anthony Xu <anthony.xu@citrix.com>
Committed: Fri Mar 28 12:15:02 2014 -0700

----------------------------------------------------------------------
 .../xen/discoverer/XcpServerDiscoverer.java     |  12 +-
 .../xen/resource/XenServer625Resource.java      | 115 ---
 .../resource/XenServer625StorageProcessor.java  | 822 -------------------
 .../xen/resource/Xenserver625Resource.java      | 115 +++
 .../resource/Xenserver625StorageProcessor.java  | 822 +++++++++++++++++++
 5 files changed, 943 insertions(+), 943 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/60563d39/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java
index aad7ce1..14e993e 100755
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java
@@ -73,7 +73,7 @@ import com.cloud.hypervisor.xen.resource.XenServer602Resource;
 import com.cloud.hypervisor.xen.resource.XenServer610Resource;
 import com.cloud.hypervisor.xen.resource.XenServer620Resource;
 import com.cloud.hypervisor.xen.resource.XenServerConnectionPool;
-import com.cloud.hypervisor.xen.resource.XenServer625Resource;
+import com.cloud.hypervisor.xen.resource.Xenserver625Resource;
 import com.cloud.resource.Discoverer;
 import com.cloud.resource.DiscovererBase;
 import com.cloud.resource.ResourceStateAdapter;
@@ -384,7 +384,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
             return new XcpServerResource();
         } else if (prodBrand.equals("XCP") && prodVersion.startsWith("1.6")) {
             return new XcpServer16Resource();
-        } // Citrix XenServer group of hypervisors
+        } // Citrix Xenserver group of hypervisors
         else if (prodBrand.equals("XenServer") && prodVersion.equals("5.6.0"))
             return new XenServer56Resource();
         else if (prodBrand.equals("XenServer") && prodVersion.equals("6.0.0"))
@@ -403,7 +403,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
             }*/
             boolean hotfix = xenserverHotFixEnabled();
             if (hotfix) {
-                return new XenServer625Resource();
+                return new Xenserver625Resource();
             } else {
                 return new XenServer620Resource();
             }
@@ -419,7 +419,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
         }
 
         String msg =
-                "Only support XCP 1.0.0, 1.1.0, 1.4.x, 1.5 beta, 1.6.x; XenServer 5.6,  XenServer 5.6 FP1, XenServer 5.6 SP2, XenServer 6.0, 6.0.2, 6.1.0, 6.2.0 but this one is " +
+                "Only support XCP 1.0.0, 1.1.0, 1.4.x, 1.5 beta, 1.6.x; XenServer 5.6,  XenServer 5.6 FP1, XenServer 5.6 SP2, Xenserver 6.0, 6.0.2, 6.1.0, 6.2.0 but this one is " +
                         prodBrand + " " + prodVersion;
         _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, dcId, podId, msg, msg);
         s_logger.debug(msg);
@@ -562,7 +562,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
         } else if (prodBrand.equals("XenServer") && prodVersion.equals("6.2.0")) {
             String hotfix = details.get("Xenserer620HotFix");
             if (hotfix != null && hotfix.equalsIgnoreCase("Xenserver-Vdi-Copy-HotFix")) {
-                resource = XenServer625Resource.class.getName();
+                resource = Xenserver625Resource.class.getName();
             } else {
                 resource = XenServer620Resource.class.getName();
             }
@@ -579,7 +579,7 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
 
         if (resource == null) {
             String msg =
-                    "Only support XCP 1.0.0, 1.1.0, 1.4.x, 1.5 beta, 1.6.x; XenServer 5.6, 5.6 FP1, 5.6 SP2 and XenServer 6.0 , 6.0.2, 6.1.0, 6.2.0 but this one is " +
+                    "Only support XCP 1.0.0, 1.1.0, 1.4.x, 1.5 beta, 1.6.x; XenServer 5.6, 5.6 FP1, 5.6 SP2 and Xenserver 6.0 , 6.0.2, 6.1.0, 6.2.0 but this one is " +
                             prodBrand + " " + prodVersion;
             s_logger.debug(msg);
             throw new RuntimeException(msg);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/60563d39/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer625Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer625Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer625Resource.java
deleted file mode 100644
index 2d3d45b..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer625Resource.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.cloud.hypervisor.xen.resource;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-
-import com.xensource.xenapi.Connection;
-
-import org.apache.cloudstack.hypervisor.xenserver.XenServerResourceNewBase;
-
-import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.resource.ServerResource;
-import com.cloud.storage.resource.StorageSubsystemCommandHandler;
-import com.cloud.storage.resource.StorageSubsystemCommandHandlerBase;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-
-@Local(value=ServerResource.class)
-public class XenServer625Resource extends XenServerResourceNewBase {
-    private static final Logger s_logger = Logger.getLogger(XenServer625Resource.class);
-
-    public XenServer625Resource() {
-        super();
-    }
-
-    @Override
-    protected void fillHostInfo(Connection conn, StartupRoutingCommand cmd) {
-        super.fillHostInfo(conn, cmd);
-        Map<String, String> details = cmd.getHostDetails();
-        details.put("Xenserer620HotFix", "Xenserver-Vdi-Copy-HotFix");
-    }
-
-    @Override
-    protected String getGuestOsType(String stdType, boolean bootFromCD) {
-        return CitrixHelper.getXenServer625GuestOsType(stdType, bootFromCD);
-    }
-
-    @Override
-    protected List<File> getPatchFiles() {
-        List<File> files = new ArrayList<File>();
-        String patch = "scripts/vm/hypervisor/xenserver/xenserver62/patch";
-        String patchfilePath = Script.findScript("", patch);
-        if (patchfilePath == null) {
-            throw new CloudRuntimeException("Unable to find patch file " + patch);
-        }
-        File file = new File(patchfilePath);
-        files.add(file);
-        return files;
-    }
-
-    @Override
-    public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam){
-        long recommendedValue = CitrixHelper.getXenServer625StaticMax(os, b);
-        if(recommendedValue == 0){
-            s_logger.warn("No recommended value found for dynamic max, setting static max and dynamic max equal");
-            return dynamicMaxRam;
-        }
-        long staticMax = Math.min(recommendedValue, 4l * dynamicMinRam);  // XS constraint for stability
-        if (dynamicMaxRam > staticMax){ // XS contraint that dynamic max <= static max
-            s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax + ", can lead to stability issues. Setting static max as much as dynamic max ");
-            return dynamicMaxRam;
-        }
-        return staticMax;
-    }
-
-    @Override
-    public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam){
-        long recommendedValue = CitrixHelper.getXenServer625StaticMin(os, b);
-        if(recommendedValue == 0){
-            s_logger.warn("No recommended value found for dynamic min");
-            return dynamicMinRam;
-        }
-
-        if(dynamicMinRam < recommendedValue){   // XS contraint that dynamic min > static min
-            s_logger.warn("Vm is set to dynamixMin " + dynamicMinRam + " less than the recommended static min " + recommendedValue + ", could lead to stability issues");
-        }
-        return dynamicMinRam;
-    }
-
-    @Override
-    protected StorageSubsystemCommandHandler getStorageHandler() {
-        XenServerStorageProcessor processor = new XenServer625StorageProcessor(this);
-        return new StorageSubsystemCommandHandlerBase(processor);
-    }
-
-    @Override
-    protected void umountSnapshotDir(Connection conn, Long dcId) {
-
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/60563d39/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer625StorageProcessor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer625StorageProcessor.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer625StorageProcessor.java
deleted file mode 100644
index cb7a299..0000000
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer625StorageProcessor.java
+++ /dev/null
@@ -1,822 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.cloud.hypervisor.xen.resource;
-
-import java.io.File;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-
-import org.apache.cloudstack.storage.command.CopyCmdAnswer;
-import org.apache.cloudstack.storage.command.CopyCommand;
-import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
-import org.apache.cloudstack.storage.to.SnapshotObjectTO;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.to.DataObjectType;
-import com.cloud.agent.api.to.DataStoreTO;
-import com.cloud.agent.api.to.DataTO;
-import com.cloud.agent.api.to.NfsTO;
-import com.cloud.agent.api.to.S3TO;
-import com.cloud.agent.api.to.SwiftTO;
-import com.cloud.exception.InternalErrorException;
-import com.cloud.storage.Storage;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.xensource.xenapi.Connection;
-import com.xensource.xenapi.Host;
-import com.xensource.xenapi.PBD;
-import com.xensource.xenapi.SR;
-import com.xensource.xenapi.Task;
-import com.xensource.xenapi.Types;
-import com.xensource.xenapi.VDI;
-
-public class XenServer625StorageProcessor extends XenServerStorageProcessor {
-    private static final Logger s_logger = Logger.getLogger(XenServerStorageProcessor.class);
-
-    public XenServer625StorageProcessor(CitrixResourceBase resource) {
-        super(resource);
-    }
-    protected boolean mountNfs(Connection conn, String remoteDir, String localDir) {
-        if (localDir == null) {
-            localDir = "/var/cloud_mount/" + UUID.nameUUIDFromBytes(remoteDir.getBytes());
-        }
-        String results = hypervisorResource.callHostPluginAsync(conn, "cloud-plugin-storage", "mountNfsSecondaryStorage", 100 * 1000,
-                "localDir", localDir, "remoteDir", remoteDir);
-        if (results == null || results.isEmpty()) {
-            String errMsg = "Could not mount secondary storage " + remoteDir + " on host ";
-            s_logger.warn(errMsg);
-            throw new CloudRuntimeException(errMsg);
-        }
-        return true;
-    }
-
-    protected boolean makeDirectory(Connection conn, String path) {
-        String result = hypervisorResource.callHostPlugin(conn, "cloud-plugin-storage", "makeDirectory", "path", path);
-        if (result == null || result.isEmpty()) {
-            return false;
-        }
-        return true;
-    }
-
-    protected SR createFileSR(Connection conn, String path) {
-        SR sr = null;
-        PBD pbd = null;
-        try {
-            Map<String, String> smConfig = new HashMap<String, String>();
-            Host host = Host.getByUuid(conn, hypervisorResource.getHost().uuid);
-            String uuid = UUID.randomUUID().toString();
-
-            sr = SR.introduce(conn,uuid, uuid, uuid, "file", "file", false, smConfig);
-            PBD.Record record = new PBD.Record();
-            record.host = host;
-            record.SR = sr;
-            smConfig.put("location", path);
-            record.deviceConfig = smConfig;
-            pbd = PBD.create(conn, record);
-            pbd.plug(conn);
-            sr.scan(conn);
-            return sr;
-        } catch (Exception e) {
-            try {
-                if (pbd != null) {
-                    pbd.destroy(conn);
-                }
-            } catch (Exception e1) {
-                s_logger.debug("Failed to destroy pbd", e);
-            }
-            try {
-                if (sr != null) {
-                    sr.forget(conn);
-                }
-            } catch (Exception e2) {
-                s_logger.error("Failed to forget sr", e);
-            }
-            String msg = "createFileSR failed! due to " + e.toString();
-            s_logger.warn(msg, e);
-            throw new CloudRuntimeException(msg, e);
-        }
-    }
-
-    protected SR createFileSr(Connection conn, String remotePath, String dir) {
-        String localDir = "/var/cloud_mount/" + UUID.nameUUIDFromBytes(remotePath.getBytes());
-        mountNfs(conn, remotePath, localDir);
-        SR sr = createFileSR(conn, localDir + "/" + dir);
-        return sr;
-    }
-
-    @Override
-    public Answer copyTemplateToPrimaryStorage(CopyCommand cmd) {
-        DataTO srcData = cmd.getSrcTO();
-        DataTO destData = cmd.getDestTO();
-        int wait = cmd.getWait();
-        DataStoreTO srcStore = srcData.getDataStore();
-        Connection conn = hypervisorResource.getConnection();
-        SR srcSr = null;
-        try {
-            if ((srcStore instanceof NfsTO) && (srcData.getObjectType() == DataObjectType.TEMPLATE)) {
-                NfsTO srcImageStore = (NfsTO)srcStore;
-                TemplateObjectTO srcTemplate = (TemplateObjectTO)srcData;
-                String storeUrl = srcImageStore.getUrl();
-                URI uri = new URI(storeUrl);
-                String volumePath = srcData.getPath();
-                volumePath = StringUtils.stripEnd(volumePath, "/");
-                String[] splits = volumePath.split("/");
-                String volumeDirectory = volumePath;
-                if (splits.length > 4) {
-                    //"template/tmpl/dcid/templateId/templatename"
-                    int index = volumePath.lastIndexOf("/");
-                    volumeDirectory = volumePath.substring(0, index);
-                }
-                srcSr = createFileSr(conn, uri.getHost() + ":" + uri.getPath(), volumeDirectory);
-                Set<VDI> vdis = srcSr.getVDIs(conn);
-                if (vdis.size() != 1) {
-                    return new CopyCmdAnswer("Can't find template VDI under: " + uri.getHost() + ":" + uri.getPath() + "/" + volumeDirectory);
-                }
-
-                VDI srcVdi = vdis.iterator().next();
-
-                PrimaryDataStoreTO destStore = (PrimaryDataStoreTO)destData.getDataStore();
-                String poolName = destStore.getUuid();
-
-
-                SR poolsr = null;
-                Set<SR> srs = SR.getByNameLabel(conn, poolName);
-                if (srs.size() != 1) {
-                    String msg = "There are " + srs.size() + " SRs with same name: " + poolName;
-                    s_logger.warn(msg);
-                    return new CopyCmdAnswer(msg);
-                } else {
-                    poolsr = srs.iterator().next();
-                }
-                String pUuid = poolsr.getUuid(conn);
-                boolean isISCSI = IsISCSI(poolsr.getType(conn));
-                Task task = srcVdi.copyAsync2(conn, poolsr, null, null);
-                // poll every 1 seconds ,
-                hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
-                hypervisorResource.checkForSuccess(conn, task);
-                VDI tmpl = Types.toVDI(task, conn);
-                VDI snapshotvdi = tmpl.snapshot(conn, new HashMap<String, String>());
-                snapshotvdi.setNameLabel(conn, "Template " + srcTemplate.getName());
-                tmpl.destroy(conn);
-                poolsr.scan(conn);
-                try{
-                    Thread.sleep(5000);
-                } catch (Exception e) {
-                }
-
-                TemplateObjectTO newVol = new TemplateObjectTO();
-                newVol.setUuid(snapshotvdi.getUuid(conn));
-                newVol.setPath(newVol.getUuid());
-                newVol.setFormat(Storage.ImageFormat.VHD);
-                return new CopyCmdAnswer(newVol);
-            }
-        }catch (Exception e) {
-            String msg = "Catch Exception " + e.getClass().getName() + " for template + " + " due to " + e.toString();
-            s_logger.warn(msg, e);
-            return new CopyCmdAnswer(msg);
-        } finally {
-            if (srcSr != null) {
-                hypervisorResource.removeSR(conn, srcSr);
-            }
-        }
-        return new CopyCmdAnswer("not implemented yet");
-    }
-
-    protected String backupSnapshot(Connection conn, String primaryStorageSRUuid, String localMountPoint, String path, String secondaryStorageMountPath, String snapshotUuid, String prevBackupUuid, String prevSnapshotUuid, Boolean isISCSI, int wait) {
-        String errMsg = null;
-        boolean mounted = false;
-        boolean filesrcreated = false;
-        boolean copied = false;
-        if (prevBackupUuid == null) {
-            prevBackupUuid = "";
-        }
-        SR ssSR = null;
-
-        String remoteDir = secondaryStorageMountPath;
-
-        try {
-            ssSR = createFileSr(conn, remoteDir, path);
-            filesrcreated = true;
-
-            VDI snapshotvdi = VDI.getByUuid(conn, snapshotUuid);
-            Task task = null;
-            if (wait == 0) {
-                wait = 2 * 60 * 60;
-            }
-            VDI dvdi = null;
-            try {
-                VDI previousSnapshotVdi = null;
-                if (prevSnapshotUuid != null) {
-                    previousSnapshotVdi = VDI.getByUuid(conn,prevSnapshotUuid);
-                }
-                task = snapshotvdi.copyAsync2(conn, ssSR, previousSnapshotVdi, null);
-                // poll every 1 seconds ,
-                hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
-                hypervisorResource.checkForSuccess(conn, task);
-                dvdi = Types.toVDI(task, conn);
-                copied = true;
-            } finally {
-                if (task != null) {
-                    try {
-                        task.destroy(conn);
-                    } catch (Exception e1) {
-                        s_logger.warn("unable to destroy task(" + task.toString() + ") on host("
-                                + ") due to ", e1);
-                    }
-                }
-            }
-            String backupUuid = dvdi.getUuid(conn);
-            return backupUuid;
-        } catch (Exception e) {
-            String msg = "Exception in backupsnapshot stage due to " + e.toString();
-            s_logger.debug(msg);
-            throw new CloudRuntimeException(msg, e);
-        } finally {
-            try {
-                if (filesrcreated && ssSR != null) {
-                    hypervisorResource.removeSR(conn, ssSR);
-                }
-            } catch (Exception e) {
-                s_logger.debug("Exception in backupsnapshot cleanup stage due to " + e.toString());
-            }
-        }
-    }
-
-    @Override
-    protected String getVhdParent(Connection conn, String primaryStorageSRUuid, String snapshotUuid, Boolean isISCSI) {
-        String parentUuid = hypervisorResource.callHostPlugin(conn, "cloud-plugin-storage", "getVhdParent", "primaryStorageSRUuid", primaryStorageSRUuid,
-                "snapshotUuid", snapshotUuid, "isISCSI", isISCSI.toString());
-
-        if (parentUuid == null || parentUuid.isEmpty() || parentUuid.equalsIgnoreCase("None")) {
-            s_logger.debug("Unable to get parent of VHD " + snapshotUuid + " in SR " + primaryStorageSRUuid);
-            // errString is already logged.
-            return null;
-        }
-        return parentUuid;
-    }
-
-    @Override
-    public Answer backupSnapshot(CopyCommand cmd) {
-        Connection conn = hypervisorResource.getConnection();
-        DataTO srcData = cmd.getSrcTO();
-        DataTO cacheData = cmd.getCacheTO();
-        DataTO destData = cmd.getDestTO();
-        int wait = cmd.getWait();
-        PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)srcData.getDataStore();
-        String primaryStorageNameLabel = primaryStore.getUuid();
-        String secondaryStorageUrl = null;
-        NfsTO cacheStore = null;
-        String destPath = null;
-        if (cacheData != null) {
-            cacheStore = (NfsTO)cacheData.getDataStore();
-            secondaryStorageUrl = cacheStore.getUrl();
-            destPath = cacheData.getPath();
-        } else {
-            cacheStore = (NfsTO)destData.getDataStore();
-            secondaryStorageUrl = cacheStore.getUrl();
-            destPath = destData.getPath();
-        }
-
-        SnapshotObjectTO snapshotTO = (SnapshotObjectTO)srcData;
-        SnapshotObjectTO snapshotOnImage = (SnapshotObjectTO)destData;
-        String snapshotUuid = snapshotTO.getPath();
-
-        String prevBackupUuid = snapshotOnImage.getParentSnapshotPath();
-        String prevSnapshotUuid = snapshotTO.getParentSnapshotPath();
-        Map<String, String> options = cmd.getOptions();
-        // By default assume failure
-        String details = null;
-        String snapshotBackupUuid = null;
-        boolean fullbackup = Boolean.parseBoolean(options.get("fullSnapshot"));
-        try {
-            SR primaryStorageSR = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel);
-            if (primaryStorageSR == null) {
-                throw new InternalErrorException("Could not backup snapshot because the primary Storage SR could not be created from the name label: " + primaryStorageNameLabel);
-            }
-            String psUuid = primaryStorageSR.getUuid(conn);
-            Boolean isISCSI = IsISCSI(primaryStorageSR.getType(conn));
-
-            VDI snapshotVdi = getVDIbyUuid(conn, snapshotUuid);
-            String snapshotPaUuid = null;
-
-            URI uri = new URI(secondaryStorageUrl);
-            String secondaryStorageMountPath = uri.getHost() + ":" + uri.getPath();
-            DataStoreTO destStore = destData.getDataStore();
-            String folder = destPath;
-            String finalPath = null;
-
-            String localMountPoint =  BaseMountPointOnHost + File.separator + UUID.nameUUIDFromBytes(secondaryStorageUrl.getBytes()).toString();
-            if (fullbackup) {
-                SR snapshotSr = null;
-                try {
-                    String localDir = "/var/cloud_mount/" + UUID.nameUUIDFromBytes(secondaryStorageMountPath.getBytes());
-                    mountNfs(conn, secondaryStorageMountPath, localDir);
-                    boolean result = makeDirectory(conn, localDir + "/" + folder);
-                    if (!result) {
-                        details = " Filed to create folder " + folder + " in secondary storage";
-                        s_logger.warn(details);
-                        return new CopyCmdAnswer(details);
-                    }
-
-                    snapshotSr = createFileSr(conn, secondaryStorageMountPath, folder);
-
-                    Task task = snapshotVdi.copyAsync2(conn, snapshotSr, null, null);
-                    // poll every 1 seconds ,
-                    hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
-                    hypervisorResource.checkForSuccess(conn, task);
-                    VDI backedVdi = Types.toVDI(task, conn);
-                    snapshotBackupUuid = backedVdi.getUuid(conn);
-
-                    if( destStore instanceof SwiftTO) {
-                        try {
-                            String container = "S-" + snapshotTO.getVolume().getVolumeId().toString();
-                            String destSnapshotName = swiftBackupSnapshot(conn, (SwiftTO)destStore, snapshotSr.getUuid(conn), snapshotBackupUuid, container, false, wait);
-                            String swiftPath = container + File.separator + destSnapshotName;
-                            finalPath = swiftPath;
-                        } finally {
-                            try {
-                                deleteSnapshotBackup(conn, localMountPoint, folder, secondaryStorageMountPath, snapshotBackupUuid);
-                            } catch (Exception e) {
-                                s_logger.debug("Failed to delete snapshot on cache storages" ,e);
-                            }
-                        }
-
-                    } else if (destStore instanceof S3TO) {
-                        try {
-                            finalPath = backupSnapshotToS3(conn, (S3TO) destStore, snapshotSr.getUuid(conn), folder, snapshotBackupUuid, isISCSI, wait);
-                            if (finalPath == null) {
-                                throw new CloudRuntimeException("S3 upload of snapshots " + snapshotBackupUuid + " failed");
-                            }
-                        } finally {
-                            try {
-                                deleteSnapshotBackup(conn, localMountPoint, folder, secondaryStorageMountPath, snapshotBackupUuid);
-                            } catch (Exception e) {
-                                s_logger.debug("Failed to delete snapshot on cache storages" ,e);
-                            }
-                        }
-                        // finalPath = folder + File.separator + snapshotBackupUuid;
-                    } else {
-                        finalPath = folder + File.separator + snapshotBackupUuid;
-                    }
-
-                } finally {
-                    if( snapshotSr != null) {
-                        hypervisorResource.removeSR(conn, snapshotSr);
-                    }
-                }
-            } else {
-                String primaryStorageSRUuid = primaryStorageSR.getUuid(conn);
-                if( destStore instanceof SwiftTO ) {
-                    String container = "S-" + snapshotTO.getVolume().getVolumeId().toString();
-                    snapshotBackupUuid = swiftBackupSnapshot(conn, (SwiftTO)destStore, primaryStorageSRUuid, snapshotPaUuid, "S-" + snapshotTO.getVolume().getVolumeId().toString(), isISCSI, wait);
-                    finalPath = container + File.separator + snapshotBackupUuid;
-                } else if (destStore instanceof S3TO ) {
-                    finalPath = backupSnapshotToS3(conn, (S3TO) destStore, primaryStorageSRUuid, folder, snapshotPaUuid, isISCSI, wait);
-                    if (finalPath == null) {
-                        throw new CloudRuntimeException("S3 upload of snapshots " + snapshotPaUuid + " failed");
-                    }
-                } else {
-                    snapshotBackupUuid = backupSnapshot(conn, primaryStorageSRUuid, localMountPoint, folder,
-                            secondaryStorageMountPath, snapshotUuid, prevBackupUuid, prevSnapshotUuid, isISCSI, wait);
-
-                    finalPath = folder + File.separator + snapshotBackupUuid;
-                }
-            }
-            String volumeUuid = snapshotTO.getVolume().getPath();
-            destroySnapshotOnPrimaryStorageExceptThis(conn, volumeUuid, snapshotUuid);
-
-            SnapshotObjectTO newSnapshot = new SnapshotObjectTO();
-            newSnapshot.setPath(finalPath);
-            if (fullbackup) {
-                newSnapshot.setParentSnapshotPath(null);
-            } else {
-                newSnapshot.setParentSnapshotPath(prevBackupUuid);
-            }
-            return new CopyCmdAnswer(newSnapshot);
-        } catch (Types.XenAPIException e) {
-            details = "BackupSnapshot Failed due to " + e.toString();
-            s_logger.warn(details, e);
-        } catch (Exception e) {
-            details = "BackupSnapshot Failed due to " + e.getMessage();
-            s_logger.warn(details, e);
-        }
-
-        return new CopyCmdAnswer(details);
-    }
-
-    @Override
-    public Answer createTemplateFromVolume(CopyCommand cmd) {
-        Connection conn = hypervisorResource.getConnection();
-        VolumeObjectTO volume = (VolumeObjectTO)cmd.getSrcTO();
-        TemplateObjectTO template = (TemplateObjectTO)cmd.getDestTO();
-        NfsTO destStore = (NfsTO)cmd.getDestTO().getDataStore();
-        int wait = cmd.getWait();
-
-        String secondaryStoragePoolURL = destStore.getUrl();
-        String volumeUUID = volume.getPath();
-
-        String userSpecifiedName = template.getName();
-
-
-        String details = null;
-        SR tmpltSR = null;
-        boolean result = false;
-        String secondaryStorageMountPath = null;
-        String installPath = null;
-        try {
-            URI uri = new URI(secondaryStoragePoolURL);
-            secondaryStorageMountPath = uri.getHost() + ":" + uri.getPath();
-            installPath = template.getPath();
-            if( !hypervisorResource.createSecondaryStorageFolder(conn, secondaryStorageMountPath, installPath)) {
-                details = " Filed to create folder " + installPath + " in secondary storage";
-                s_logger.warn(details);
-                return new CopyCmdAnswer(details);
-            }
-
-            VDI vol = getVDIbyUuid(conn, volumeUUID);
-            // create template SR
-            tmpltSR = createFileSr(conn, uri.getHost() + ":" + uri.getPath(), installPath);
-
-            // copy volume to template SR
-            Task task = vol.copyAsync2(conn, tmpltSR, null, null);
-            // poll every 1 seconds ,
-            hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
-            hypervisorResource.checkForSuccess(conn, task);
-            VDI tmpltVDI = Types.toVDI(task, conn);
-            // scan makes XenServer pick up VDI physicalSize
-            tmpltSR.scan(conn);
-            if (userSpecifiedName != null) {
-                tmpltVDI.setNameLabel(conn, userSpecifiedName);
-            }
-
-            String tmpltUUID = tmpltVDI.getUuid(conn);
-            String tmpltFilename = tmpltUUID + ".vhd";
-            long virtualSize = tmpltVDI.getVirtualSize(conn);
-            long physicalSize = tmpltVDI.getPhysicalUtilisation(conn);
-            // create the template.properties file
-            String templatePath = secondaryStorageMountPath + "/" + installPath;
-            result = hypervisorResource.postCreatePrivateTemplate(conn, templatePath, tmpltFilename, tmpltUUID, userSpecifiedName, null, physicalSize, virtualSize, template.getId());
-            if (!result) {
-                throw new CloudRuntimeException("Could not create the template.properties file on secondary storage dir");
-            }
-            installPath = installPath + "/" + tmpltFilename;
-            hypervisorResource.removeSR(conn, tmpltSR);
-            tmpltSR = null;
-            TemplateObjectTO newTemplate = new TemplateObjectTO();
-            newTemplate.setPath(installPath);
-            newTemplate.setFormat(Storage.ImageFormat.VHD);
-            newTemplate.setSize(virtualSize);
-            newTemplate.setPhysicalSize(physicalSize);
-            newTemplate.setName(tmpltUUID);
-            CopyCmdAnswer answer = new CopyCmdAnswer(newTemplate);
-            return answer;
-        } catch (Exception e) {
-            if (tmpltSR != null) {
-                hypervisorResource.removeSR(conn, tmpltSR);
-            }
-            if ( secondaryStorageMountPath != null) {
-                hypervisorResource.deleteSecondaryStorageFolder(conn, secondaryStorageMountPath, installPath);
-            }
-            details = "Creating template from volume " + volumeUUID + " failed due to " + e.toString();
-            s_logger.error(details, e);
-        }
-        return new CopyCmdAnswer(details);
-    }
-
-    protected String getSnapshotUuid(String snapshotPath) {
-        int index = snapshotPath.lastIndexOf(File.separator);
-        String snapshotUuid = snapshotPath.substring(index + 1);
-        index = snapshotUuid.lastIndexOf(".");
-        if (index != -1) {
-            snapshotUuid = snapshotUuid.substring(0, index);
-        }
-        return snapshotUuid;
-    }
-
-    @Override
-    public Answer createVolumeFromSnapshot(CopyCommand cmd) {
-        Connection conn = hypervisorResource.getConnection();
-        DataTO srcData = cmd.getSrcTO();
-        SnapshotObjectTO snapshot = (SnapshotObjectTO)srcData;
-        DataTO destData = cmd.getDestTO();
-        PrimaryDataStoreTO pool = (PrimaryDataStoreTO)destData.getDataStore();
-        VolumeObjectTO volume = (VolumeObjectTO)destData;
-                DataStoreTO imageStore = srcData.getDataStore();
-
-        if (!(imageStore instanceof NfsTO)) {
-            return new CopyCmdAnswer("unsupported protocol");
-        }
-
-        NfsTO nfsImageStore = (NfsTO)imageStore;
-        String primaryStorageNameLabel = pool.getUuid();
-        String secondaryStorageUrl = nfsImageStore.getUrl();
-        int wait = cmd.getWait();
-        boolean result = false;
-        // Generic error message.
-        String details = null;
-        String volumeUUID = null;
-
-        if (secondaryStorageUrl == null) {
-            details += " because the URL passed: " + secondaryStorageUrl + " is invalid.";
-            return new CopyCmdAnswer(details);
-        }
-        SR srcSr = null;
-        VDI destVdi = null;
-        try {
-            SR primaryStorageSR = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel);
-            if (primaryStorageSR == null) {
-                throw new InternalErrorException("Could not create volume from snapshot because the primary Storage SR could not be created from the name label: "
-                        + primaryStorageNameLabel);
-            }
-            String nameLabel = "cloud-" + UUID.randomUUID().toString();
-            destVdi = createVdi(conn, nameLabel, primaryStorageSR, volume.getSize());
-            volumeUUID = destVdi.getUuid(conn);
-            String snapshotInstallPath = snapshot.getPath();
-            int index = snapshotInstallPath.lastIndexOf(File.separator);
-            String snapshotDirectory = snapshotInstallPath.substring(0, index);
-            String snapshotUuid = getSnapshotUuid(snapshotInstallPath);
-
-            URI uri = new URI(secondaryStorageUrl);
-            srcSr = createFileSr(conn, uri.getHost() + ":" + uri.getPath(), snapshotDirectory);
-
-            String[] parents = snapshot.getParents();
-            List<VDI> snapshotChains = new ArrayList<VDI>();
-            if (parents != null) {
-                for(int i = 0; i < parents.length; i++) {
-                    String snChainPath = parents[i];
-                    String uuid = getSnapshotUuid(snChainPath);
-                    VDI chain = VDI.getByUuid(conn, uuid);
-                    snapshotChains.add(chain);
-                }
-            }
-
-            VDI snapshotVdi = VDI.getByUuid(conn, snapshotUuid);
-            snapshotChains.add(snapshotVdi);
-
-            for(VDI snapChain : snapshotChains) {
-                Task task = snapChain.copyAsync2(conn, null, null, destVdi);
-                // poll every 1 seconds ,
-                hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
-                hypervisorResource.checkForSuccess(conn, task);
-            }
-
-            result = true;
-            destVdi = VDI.getByUuid(conn, volumeUUID);
-            VDI.Record vdir = destVdi.getRecord(conn);
-            VolumeObjectTO newVol = new VolumeObjectTO();
-            newVol.setPath(volumeUUID);
-            newVol.setSize(vdir.virtualSize);
-            return new CopyCmdAnswer(newVol);
-        } catch (Types.XenAPIException e) {
-            details += " due to " + e.toString();
-            s_logger.warn(details, e);
-        } catch (Exception e) {
-            details += " due to " + e.getMessage();
-            s_logger.warn(details, e);
-        } finally {
-            if (srcSr != null) {
-                hypervisorResource.removeSR(conn, srcSr);
-            }
-            if (!result && destVdi != null) {
-                try {
-                    destVdi.destroy(conn);
-                } catch (Exception e) {
-                    s_logger.debug("destroy dest vdi failed", e);
-                }
-            }
-        }
-        if (!result) {
-            // Is this logged at a higher level?
-            s_logger.error(details);
-        }
-
-        // In all cases return something.
-        return new CopyCmdAnswer(details);
-    }
-
-    @Override
-    public Answer copyVolumeFromPrimaryToSecondary(CopyCommand cmd) {
-        Connection conn = hypervisorResource.getConnection();
-        VolumeObjectTO srcVolume = (VolumeObjectTO)cmd.getSrcTO();
-        VolumeObjectTO destVolume = (VolumeObjectTO)cmd.getDestTO();
-        int wait = cmd.getWait();
-        DataStoreTO destStore = destVolume.getDataStore();
-
-        if (destStore instanceof NfsTO) {
-            SR secondaryStorage = null;
-            try {
-                NfsTO nfsStore = (NfsTO)destStore;
-                URI uri = new URI(nfsStore.getUrl());
-                // Create the volume folder
-                if (!hypervisorResource.createSecondaryStorageFolder(conn, uri.getHost() + ":" + uri.getPath(), destVolume.getPath())) {
-                    throw new InternalErrorException("Failed to create the volume folder.");
-                }
-
-                // Create a SR for the volume UUID folder
-                secondaryStorage = createFileSr(conn, uri.getHost() + ":" + uri.getPath(), destVolume.getPath());
-                // Look up the volume on the source primary storage pool
-                VDI srcVdi = getVDIbyUuid(conn, srcVolume.getPath());
-                // Copy the volume to secondary storage
-                Task task = srcVdi.copyAsync2(conn, secondaryStorage, null, null);
-                // poll every 1 seconds ,
-                hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
-                hypervisorResource.checkForSuccess(conn, task);
-                VDI destVdi = Types.toVDI(task, conn);
-                String destVolumeUUID = destVdi.getUuid(conn);
-
-                VolumeObjectTO newVol = new VolumeObjectTO();
-                newVol.setPath(destVolume.getPath() + File.separator + destVolumeUUID + ".vhd");
-                newVol.setSize(srcVolume.getSize());
-                return new CopyCmdAnswer(newVol);
-            } catch (Exception e) {
-                s_logger.debug("Failed to copy volume to secondary: " + e.toString());
-                return new CopyCmdAnswer("Failed to copy volume to secondary: " + e.toString());
-            } finally {
-                hypervisorResource.removeSR(conn, secondaryStorage);
-            }
-        }
-        return new CopyCmdAnswer("unsupported protocol");
-    }
-
-    @Override
-    public Answer copyVolumeFromImageCacheToPrimary(CopyCommand cmd) {
-        Connection conn = hypervisorResource.getConnection();
-        DataTO srcData = cmd.getSrcTO();
-        DataTO destData = cmd.getDestTO();
-        int wait = cmd.getWait();
-        VolumeObjectTO srcVolume = (VolumeObjectTO)srcData;
-        VolumeObjectTO destVolume = (VolumeObjectTO)destData;
-        PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)destVolume.getDataStore();
-        DataStoreTO srcStore = srcVolume.getDataStore();
-
-        if (srcStore instanceof NfsTO) {
-            NfsTO nfsStore = (NfsTO)srcStore;
-            String volumePath = srcVolume.getPath();
-            int index = volumePath.lastIndexOf("/");
-            String volumeDirectory = volumePath.substring(0, index);
-            String volumeUuid = volumePath.substring(index + 1);
-            index = volumeUuid.indexOf(".");
-            if (index != -1) {
-                volumeUuid = volumeUuid.substring(0, index);
-            }
-            URI uri = null;
-            try {
-                uri = new URI(nfsStore.getUrl());
-            } catch (Exception e) {
-                return new CopyCmdAnswer(e.toString());
-            }
-            SR srcSr = createFileSr(conn, uri.getHost() + ":" + uri.getPath(), volumeDirectory);
-            try {
-                SR primaryStoragePool = hypervisorResource.getStorageRepository(conn, primaryStore.getUuid());
-                VDI srcVdi = VDI.getByUuid(conn, volumeUuid);
-                Task task = srcVdi.copyAsync2(conn, primaryStoragePool, null, null);
-                // poll every 1 seconds ,
-                hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
-                hypervisorResource.checkForSuccess(conn, task);
-                VDI destVdi = Types.toVDI(task, conn);
-                VolumeObjectTO newVol = new VolumeObjectTO();
-                newVol.setPath(destVdi.getUuid(conn));
-                newVol.setSize(srcVolume.getSize());
-
-                return new CopyCmdAnswer(newVol);
-            } catch (Exception e) {
-                String msg = "Catch Exception " + e.getClass().getName() + " due to " + e.toString();
-                s_logger.warn(msg, e);
-                return new CopyCmdAnswer(e.toString());
-            } finally {
-                if (srcSr != null) {
-                    hypervisorResource.removeSR(conn, srcSr);
-                }
-            }
-        }
-
-        s_logger.debug("unsupported protocol");
-        return new CopyCmdAnswer("unsupported protocol");
-    }
-
-    @Override
-    public Answer createTemplateFromSnapshot(CopyCommand cmd) {
-        Connection conn = hypervisorResource.getConnection();
-        DataTO srcData = cmd.getSrcTO();
-        DataTO destData = cmd.getDestTO();
-        int wait = cmd.getWait();
-        SnapshotObjectTO srcObj = (SnapshotObjectTO)srcData;
-        TemplateObjectTO destObj = (TemplateObjectTO)destData;
-        NfsTO srcStore = (NfsTO)srcObj.getDataStore();
-        NfsTO destStore = (NfsTO)destObj.getDataStore();
-
-        URI srcUri = null;
-        URI destUri = null;
-        try {
-            srcUri = new URI(srcStore.getUrl());
-            destUri = new URI(destStore.getUrl());
-        } catch (Exception e) {
-            s_logger.debug("incorrect url", e);
-            return new CopyCmdAnswer("incorrect url" + e.toString());
-        }
-
-        String srcPath = srcObj.getPath();
-        int index = srcPath.lastIndexOf("/");
-        String srcDir = srcPath.substring(0, index);
-        String destDir = destObj.getPath();
-        SR srcSr = null;
-        SR destSr = null;
-        VDI destVdi = null;
-        boolean result = false;
-        try {
-            srcSr = createFileSr(conn, srcUri.getHost() + ":" + srcUri.getPath(), srcDir);
-
-            String destNfsPath = destUri.getHost() + ":" + destUri.getPath();
-            String localDir = "/var/cloud_mount/" + UUID.nameUUIDFromBytes(destNfsPath.getBytes());
-            mountNfs(conn, destUri.getHost() + ":" + destUri.getPath(), localDir);
-            makeDirectory(conn, localDir + "/" + destDir);
-            destSr = createFileSR(conn, localDir + "/" + destDir);
-
-            String nameLabel = "cloud-" + UUID.randomUUID().toString();
-
-            String[] parents = srcObj.getParents();
-            List<VDI> snapshotChains = new ArrayList<VDI>();
-            if (parents != null) {
-                for(int i = 0; i < parents.length; i++) {
-                    String snChainPath = parents[i];
-                    String uuid = getSnapshotUuid(snChainPath);
-                    VDI chain = VDI.getByUuid(conn, uuid);
-                    snapshotChains.add(chain);
-                }
-            }
-            String snapshotUuid = getSnapshotUuid(srcPath);
-            VDI snapshotVdi = VDI.getByUuid(conn, snapshotUuid);
-            snapshotChains.add(snapshotVdi);
-
-            long templateVirtualSize = snapshotChains.get(0).getVirtualSize(conn);
-            destVdi = createVdi(conn, nameLabel, destSr, templateVirtualSize);
-            String destVdiUuid = destVdi.getUuid(conn);
-
-            for(VDI snapChain : snapshotChains) {
-                Task task = snapChain.copyAsync2(conn, null, null, destVdi);
-                // poll every 1 seconds ,
-                hypervisorResource.waitForTask(conn, task, 1000, wait * 1000);
-                hypervisorResource.checkForSuccess(conn, task);
-            }
-
-            destVdi = VDI.getByUuid(conn, destVdiUuid);
-            String templatePath = destDir + "/" + destVdiUuid + ".vhd";
-            templatePath = templatePath.replaceAll("//","/");
-            TemplateObjectTO newTemplate = new TemplateObjectTO();
-            newTemplate.setPath(templatePath);
-            newTemplate.setFormat(Storage.ImageFormat.VHD);
-            newTemplate.setSize(destVdi.getVirtualSize(conn));
-            newTemplate.setPhysicalSize(destVdi.getPhysicalUtilisation(conn));
-            newTemplate.setName(destVdiUuid);
-
-            result = true;
-            return new CopyCmdAnswer(newTemplate);
-        } catch (Exception e) {
-            s_logger.error("Failed create template from snapshot", e);
-            return new CopyCmdAnswer("Failed create template from snapshot " + e.toString());
-        } finally {
-            if (!result) {
-                if (destVdi != null) {
-                    try {
-                        destVdi.destroy(conn);
-                    } catch (Exception e) {
-                        s_logger.debug("Clean up left over on dest storage failed: ", e);
-                    }
-                }
-            }
-
-            if (destSr != null) {
-                hypervisorResource.removeSR(conn, destSr);
-            }
-
-            if (srcSr != null) {
-                hypervisorResource.removeSR(conn, srcSr);
-            }
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/60563d39/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java
new file mode 100644
index 0000000..e9c3f29
--- /dev/null
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/Xenserver625Resource.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.cloud.hypervisor.xen.resource;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.Local;
+
+import org.apache.log4j.Logger;
+
+import com.xensource.xenapi.Connection;
+
+import org.apache.cloudstack.hypervisor.xenserver.XenServerResourceNewBase;
+
+import com.cloud.agent.api.StartupRoutingCommand;
+import com.cloud.resource.ServerResource;
+import com.cloud.storage.resource.StorageSubsystemCommandHandler;
+import com.cloud.storage.resource.StorageSubsystemCommandHandlerBase;
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.utils.script.Script;
+
+@Local(value=ServerResource.class)
+public class Xenserver625Resource extends XenServerResourceNewBase {
+    private static final Logger s_logger = Logger.getLogger(Xenserver625Resource.class);
+
+    public Xenserver625Resource() {
+        super();
+    }
+
+    @Override
+    protected void fillHostInfo(Connection conn, StartupRoutingCommand cmd) {
+        super.fillHostInfo(conn, cmd);
+        Map<String, String> details = cmd.getHostDetails();
+        details.put("Xenserer620HotFix", "Xenserver-Vdi-Copy-HotFix");
+    }
+
+    @Override
+    protected String getGuestOsType(String stdType, boolean bootFromCD) {
+        return CitrixHelper.getXenServer625GuestOsType(stdType, bootFromCD);
+    }
+
+    @Override
+    protected List<File> getPatchFiles() {
+        List<File> files = new ArrayList<File>();
+        String patch = "scripts/vm/hypervisor/xenserver/xenserver62/patch";
+        String patchfilePath = Script.findScript("", patch);
+        if (patchfilePath == null) {
+            throw new CloudRuntimeException("Unable to find patch file " + patch);
+        }
+        File file = new File(patchfilePath);
+        files.add(file);
+        return files;
+    }
+
+    @Override
+    public long getStaticMax(String os, boolean b, long dynamicMinRam, long dynamicMaxRam){
+        long recommendedValue = CitrixHelper.getXenServer625StaticMax(os, b);
+        if(recommendedValue == 0){
+            s_logger.warn("No recommended value found for dynamic max, setting static max and dynamic max equal");
+            return dynamicMaxRam;
+        }
+        long staticMax = Math.min(recommendedValue, 4l * dynamicMinRam);  // XS constraint for stability
+        if (dynamicMaxRam > staticMax){ // XS contraint that dynamic max <= static max
+            s_logger.warn("dynamixMax " + dynamicMaxRam + " cant be greater than static max " + staticMax + ", can lead to stability issues. Setting static max as much as dynamic max ");
+            return dynamicMaxRam;
+        }
+        return staticMax;
+    }
+
+    @Override
+    public long getStaticMin(String os, boolean b, long dynamicMinRam, long dynamicMaxRam){
+        long recommendedValue = CitrixHelper.getXenServer625StaticMin(os, b);
+        if(recommendedValue == 0){
+            s_logger.warn("No recommended value found for dynamic min");
+            return dynamicMinRam;
+        }
+
+        if(dynamicMinRam < recommendedValue){   // XS contraint that dynamic min > static min
+            s_logger.warn("Vm is set to dynamixMin " + dynamicMinRam + " less than the recommended static min " + recommendedValue + ", could lead to stability issues");
+        }
+        return dynamicMinRam;
+    }
+
+    @Override
+    protected StorageSubsystemCommandHandler getStorageHandler() {
+        XenServerStorageProcessor processor = new Xenserver625StorageProcessor(this);
+        return new StorageSubsystemCommandHandlerBase(processor);
+    }
+
+    @Override
+    protected void umountSnapshotDir(Connection conn, Long dcId) {
+
+    }
+
+
+}
\ No newline at end of file


Mime
View raw message