This is an automated email from the ASF dual-hosted git repository.
sureshanaparti pushed a commit to branch 4.22
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.22 by this push:
new ffebe8eaa64 Fix bulk power state query missing VM lifecycle state
field (#13027)
ffebe8eaa64 is described below
commit ffebe8eaa64607e4294ee2d072e53b0347de5e9e
Author: Suresh Kumar Anaparti <[email protected]>
AuthorDate: Mon Apr 27 15:38:52 2026 +0530
Fix bulk power state query missing VM lifecycle state field (#13027)
* Fix bulk power state query missing VM lifecycle state field
The IdsPowerStateSelectSearch partial select did not include the VM
lifecycle state, causing isPowerStateInSyncWithInstanceState to always
return true when state was null. This prevented retry of failed
StopCommands on subsequent ping cycles.
* Add defensive check for instance host ID to prevent NPE
Co-authored-by: Sachin R Doddaguni <[email protected]>
Co-authored-by: nvazquez <[email protected]>
---
.../schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git
a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java
b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java
index a38b6af3aa0..d8c9b9253c8 100755
--- a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java
@@ -358,7 +358,8 @@ public class VMInstanceDaoImpl extends
GenericDaoBase<VMInstanceVO, Long> implem
IdsPowerStateSelectSearch.entity().getPowerHostId(),
IdsPowerStateSelectSearch.entity().getPowerState(),
IdsPowerStateSelectSearch.entity().getPowerStateUpdateCount(),
- IdsPowerStateSelectSearch.entity().getPowerStateUpdateTime());
+ IdsPowerStateSelectSearch.entity().getPowerStateUpdateTime(),
+ IdsPowerStateSelectSearch.entity().getState());
IdsPowerStateSelectSearch.done();
CountByOfferingId = createSearchBuilder(Integer.class);
@@ -1105,10 +1106,14 @@ public class VMInstanceDaoImpl extends
GenericDaoBase<VMInstanceVO, Long> implem
private boolean isPowerStateInSyncWithInstanceState(final
VirtualMachine.PowerState powerState, final long powerHostId, final
VMInstanceVO instance) {
State instanceState = instance.getState();
+ if (instanceState == null) {
+ logger.warn("VM {} has null instance state during power state sync
check, treating as out of sync", instance);
+ return false;
+ }
if ((powerState == VirtualMachine.PowerState.PowerOff && instanceState
== State.Running)
|| (powerState == VirtualMachine.PowerState.PowerOn &&
instanceState == State.Stopped)) {
HostVO instanceHost = hostDao.findById(instance.getHostId());
- HostVO powerHost = powerHostId == instance.getHostId() ?
instanceHost : hostDao.findById(powerHostId);
+ HostVO powerHost = instance.getHostId() != null && powerHostId ==
instance.getHostId() ? instanceHost : hostDao.findById(powerHostId);
logger.debug("VM: {} on host: {} and power host : {} is in {}
state, but power state is {}",
instance, instanceHost, powerHost, instanceState,
powerState);
return false;