This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.19 by this push:
new 7b68615bd97 HA: set correct hostId of HA work for vm migration (#10591)
7b68615bd97 is described below
commit 7b68615bd976712dc810726ee8241fd35dd9ebaf
Author: Wei Zhou <[email protected]>
AuthorDate: Thu Apr 17 09:02:46 2025 +0100
HA: set correct hostId of HA work for vm migration (#10591)
---
.../java/com/cloud/vm/VirtualMachineManagerImpl.java | 3 +--
.../src/main/java/com/cloud/vm/VMInstanceVO.java | 2 +-
.../java/com/cloud/ha/HighAvailabilityManagerImpl.java | 18 +++++++++++++++++-
3 files changed, 19 insertions(+), 4 deletions(-)
diff --git
a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
index 055c1a2d444..f2e90decdea 100755
---
a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
+++
b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -5248,10 +5248,9 @@ public class VirtualMachineManagerImpl extends
ManagerBase implements VirtualMac
workJob = newVmWorkJobAndInfo.first();
VmWorkMigrateAway workInfo = new
VmWorkMigrateAway(newVmWorkJobAndInfo.second(), srcHostId);
- workJob.setCmdInfo(VmWorkSerializer.serialize(workInfo));
+ setCmdInfoAndSubmitAsyncJob(workJob, workInfo, vmId);
}
- _jobMgr.submitAsyncJob(workJob, VmWorkConstants.VM_WORK_QUEUE, vmId);
AsyncJobExecutionContext.getCurrentExecutionContext().joinJob(workJob.getId());
diff --git a/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
b/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
index f3560d68f49..320c9a30fb4 100644
--- a/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
+++ b/engine/schema/src/main/java/com/cloud/vm/VMInstanceVO.java
@@ -502,7 +502,7 @@ public class VMInstanceVO implements VirtualMachine,
FiniteStateObject<State, Vi
@Override
public String toString() {
- return String.format("VM instance %s",
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(this, "id",
"instanceName", "uuid", "type"));
+ return String.format("VM instance %s",
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(this, "id",
"instanceName", "uuid", "type", "state"));
}
@Override
diff --git a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java
b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java
index 81ae44a9763..aa43e6b9161 100644
--- a/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java
+++ b/server/src/main/java/com/cloud/ha/HighAvailabilityManagerImpl.java
@@ -342,7 +342,8 @@ public class HighAvailabilityManagerImpl extends
ManagerBase implements Configur
@Override
public boolean scheduleMigration(final VMInstanceVO vm) {
if (vm.getHostId() != null) {
- final HaWorkVO work = new HaWorkVO(vm.getId(), vm.getType(),
WorkType.Migration, Step.Scheduled, vm.getHostId(), vm.getState(), 0,
vm.getUpdated());
+ Long hostId = VirtualMachine.State.Migrating.equals(vm.getState())
? vm.getLastHostId() : vm.getHostId();
+ final HaWorkVO work = new HaWorkVO(vm.getId(), vm.getType(),
WorkType.Migration, Step.Scheduled, hostId, vm.getState(), 0, vm.getUpdated());
_haDao.persist(work);
s_logger.info("Scheduled migration work of VM " + vm.getUuid() + "
from host " + _hostDao.findById(vm.getHostId()) + " with HAWork " + work);
wakeupWorkers();
@@ -716,6 +717,14 @@ public class HighAvailabilityManagerImpl extends
ManagerBase implements Configur
s_logger.info("Unable to find vm: " + vmId + ", skipping
migrate.");
return null;
}
+ if (VirtualMachine.State.Stopped.equals(vm.getState())) {
+ s_logger.info(String.format("vm %s is Stopped, skipping migrate.",
vm));
+ return null;
+ }
+ if (VirtualMachine.State.Running.equals(vm.getState()) && srcHostId !=
vm.getHostId()) {
+ s_logger.info(String.format("VM %s is running on a different host
%s, skipping migration", vm, vm.getHostId()));
+ return null;
+ }
s_logger.info("Migration attempt: for VM " + vm.getUuid() + "from host
id " + srcHostId +
". Starting attempt: " + (1 + work.getTimesTried()) + "/" +
_maxRetries + " times.");
try {
@@ -1022,6 +1031,13 @@ public class HighAvailabilityManagerImpl extends
ManagerBase implements Configur
@Override
public void run() {
+ try {
+ synchronized (this) {
+ wait(_timeToSleep);
+ }
+ } catch (final InterruptedException e) {
+ s_logger.info("Interrupted");
+ }
s_logger.info("Starting work");
while (!_stopped) {
_managedContext.runWithContext(new Runnable() {