Skip to content

Commit 0960b4c

Browse files
committed
Fix: Condition for aborting migration, resume paused VMs on destination
1 parent b394b5b commit 0960b4c

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtMigrateCommandWrapper.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ Use VIR_DOMAIN_XML_SECURE (value = 1) prior to v1.0.0.
246246
while (!executor.isTerminated()) {
247247
Thread.sleep(100);
248248
sleeptime += 100;
249-
if (sleeptime == 1000) { // wait 1s before attempting to set downtime on migration, since I don't know of a VIR_DOMAIN_MIGRATING state
249+
if (sleeptime >= 1000) { // wait 1s before attempting to set downtime on migration, since I don't know of a VIR_DOMAIN_MIGRATING state
250250
final int migrateDowntime = libvirtComputingResource.getMigrateDowntime();
251251
if (migrateDowntime > 0 ) {
252252
try {
@@ -272,7 +272,7 @@ Use VIR_DOMAIN_XML_SECURE (value = 1) prior to v1.0.0.
272272
} catch (final LibvirtException e) {
273273
logger.info("Couldn't get VM domain state after " + sleeptime + "ms: " + e.getMessage());
274274
}
275-
if (state != null && state == DomainState.VIR_DOMAIN_RUNNING) {
275+
if (state != null && (state == DomainState.VIR_DOMAIN_RUNNING || state == DomainState.VIR_DOMAIN_PAUSED)) {
276276
try {
277277
DomainJobInfo job = dm.getJobInfo();
278278
logger.info(String.format("Aborting migration of VM [%s] with domain job [%s] due to time out after %d seconds.", vmName, job, migrateWait));
@@ -314,6 +314,21 @@ Use VIR_DOMAIN_XML_SECURE (value = 1) prior to v1.0.0.
314314
if (logger.isDebugEnabled()) {
315315
logger.debug(String.format("Cleaning the disks of VM [%s] in the source pool after VM migration finished.", vmName));
316316
}
317+
DomainState dmState = null;
318+
try {
319+
dmState = destDomain.getInfo().state;
320+
} catch (final LibvirtException e) {
321+
logger.info("Failed to get domain state for VM: " + vmName + " due to: " + e.getMessage());
322+
}
323+
324+
if (dmState == DomainState.VIR_DOMAIN_PAUSED) {
325+
logger.info("Resuming VM " + vmName + " on destination after migration");
326+
try {
327+
destDomain.resume();
328+
} catch (final Exception e) {
329+
logger.error("Failed to resume vm " + vmName + " on destination after migration due to : " + e.getMessage());
330+
}
331+
}
317332
deleteOrDisconnectDisksOnSourcePool(libvirtComputingResource, migrateDiskInfoList, disks);
318333
libvirtComputingResource.cleanOldSecretsByDiskDef(conn, disks);
319334
}

0 commit comments

Comments
 (0)