|
51 | 51 | import javax.naming.ConfigurationException;
|
52 | 52 | import javax.xml.parsers.ParserConfigurationException;
|
53 | 53 |
|
54 |
| -import com.trilead.ssh2.SFTPException; |
55 |
| -import com.trilead.ssh2.SFTPv3Client; |
56 |
| -import com.trilead.ssh2.SFTPv3DirectoryEntry; |
57 |
| -import com.trilead.ssh2.SFTPv3FileAttributes; |
58 | 54 | import org.apache.cloudstack.api.ApiConstants;
|
59 | 55 | import org.apache.cloudstack.diagnostics.CopyToSecondaryStorageAnswer;
|
60 | 56 | import org.apache.cloudstack.diagnostics.CopyToSecondaryStorageCommand;
|
|
72 | 68 | import org.apache.commons.lang3.BooleanUtils;
|
73 | 69 | import org.apache.commons.lang3.StringUtils;
|
74 | 70 | import org.apache.log4j.Logger;
|
| 71 | +import org.apache.maven.artifact.versioning.ComparableVersion; |
75 | 72 | import org.apache.xmlrpc.XmlRpcException;
|
76 | 73 | import org.joda.time.Duration;
|
77 | 74 | import org.w3c.dom.Document;
|
|
153 | 150 | import com.cloud.vm.VirtualMachine.PowerState;
|
154 | 151 | import com.cloud.vm.VmDetailConstants;
|
155 | 152 | import com.trilead.ssh2.SCPClient;
|
| 153 | +import com.trilead.ssh2.SFTPException; |
| 154 | +import com.trilead.ssh2.SFTPv3Client; |
| 155 | +import com.trilead.ssh2.SFTPv3DirectoryEntry; |
| 156 | +import com.trilead.ssh2.SFTPv3FileAttributes; |
156 | 157 | import com.xensource.xenapi.Bond;
|
157 | 158 | import com.xensource.xenapi.Connection;
|
158 | 159 | import com.xensource.xenapi.Console;
|
@@ -627,7 +628,7 @@ public boolean cleanupHaltedVms(final Connection conn) throws XenAPIException, X
|
627 | 628 |
|
628 | 629 | if (VmPowerState.HALTED.equals(vmRec.powerState) && vmRec.affinity.equals(host) && !isAlienVm(vm, conn)) {
|
629 | 630 | try {
|
630 |
| - vm.destroy(conn); |
| 631 | + destroyVm(vm, conn); |
631 | 632 | } catch (final Exception e) {
|
632 | 633 | s_logger.warn("Catch Exception " + e.getClass().getName() + ": unable to destroy VM " + vmRec.nameLabel + " due to ", e);
|
633 | 634 | success = false;
|
@@ -1452,7 +1453,7 @@ public VM createVmFromTemplate(final Connection conn, final VirtualMachineTO vmS
|
1452 | 1453 | vm.setPVBootloader(conn, "pygrub");
|
1453 | 1454 | vm.setPVBootloaderArgs(conn, CitrixHelper.getPVbootloaderArgs(guestOsTypeName));
|
1454 | 1455 | } else {
|
1455 |
| - vm.destroy(conn); |
| 1456 | + destroyVm(vm, conn, true); |
1456 | 1457 | throw new CloudRuntimeException("Unable to handle boot loader type: " + vmSpec.getBootloader());
|
1457 | 1458 | }
|
1458 | 1459 | }
|
@@ -2038,7 +2039,7 @@ void forceShutdownVM(final Connection conn, final VM vm) {
|
2038 | 2039 | final Long domId = vm.getDomid(conn);
|
2039 | 2040 | callHostPlugin(conn, "vmopspremium", "forceShutdownVM", "domId", domId.toString());
|
2040 | 2041 | vm.powerStateReset(conn);
|
2041 |
| - vm.destroy(conn); |
| 2042 | + destroyVm(vm, conn); |
2042 | 2043 | } catch (final Exception e) {
|
2043 | 2044 | final String msg = "forceShutdown failed due to " + e.toString();
|
2044 | 2045 | s_logger.warn(msg, e);
|
@@ -3690,7 +3691,7 @@ public String handleVmStartFailure(final Connection conn, final String vmName, f
|
3690 | 3691 | }
|
3691 | 3692 | if (vm.getPowerState(conn) == VmPowerState.HALTED) {
|
3692 | 3693 | try {
|
3693 |
| - vm.destroy(conn); |
| 3694 | + destroyVm(vm, conn, true); |
3694 | 3695 | } catch (final Exception e) {
|
3695 | 3696 | s_logger.warn("VM destroy failed due to ", e);
|
3696 | 3697 | }
|
@@ -5208,7 +5209,7 @@ protected void startvmfailhandle(final Connection conn, final VM vm, final List<
|
5208 | 5209 | }
|
5209 | 5210 | if (vm.getPowerState(conn) == VmPowerState.HALTED) {
|
5210 | 5211 | try {
|
5211 |
| - vm.destroy(conn); |
| 5212 | + destroyVm(vm, conn, true); |
5212 | 5213 | } catch (final Exception e) {
|
5213 | 5214 | final String msg = "VM destroy failed due to " + e.toString();
|
5214 | 5215 | s_logger.warn(msg, e);
|
@@ -5875,4 +5876,23 @@ private void umountNfs(Connection conn, String remoteDir, String localDir) {
|
5875 | 5876 | s_logger.warn(errMsg);
|
5876 | 5877 | }
|
5877 | 5878 | }
|
| 5879 | + |
| 5880 | + public boolean isDestroyHaltedVms() { |
| 5881 | + ComparableVersion version = new ComparableVersion(getHost().getProductVersion()); |
| 5882 | + if (version.compareTo(new ComparableVersion("8.0")) >= 0) { |
| 5883 | + return false; |
| 5884 | + } |
| 5885 | + return true; |
| 5886 | + } |
| 5887 | + |
| 5888 | + public void destroyVm(VM vm, Connection connection, boolean forced) throws XenAPIException, XmlRpcException { |
| 5889 | + if (!isDestroyHaltedVms() && !forced) { |
| 5890 | + return; |
| 5891 | + } |
| 5892 | + vm.destroy(connection); |
| 5893 | + } |
| 5894 | + |
| 5895 | + public void destroyVm(VM vm, Connection connection) throws XenAPIException, XmlRpcException { |
| 5896 | + destroyVm(vm, connection, false); |
| 5897 | + } |
5878 | 5898 | }
|
0 commit comments