This is an automated email from the ASF dual-hosted git repository.
sureshanaparti pushed a commit to branch 4.16
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.16 by this push:
new 638779c vm-import: fix unmanaged instance listing (#5400)
638779c is described below
commit 638779ca37d1917aa16c8045b99076dddc20618e
Author: Abhishek Kumar <[email protected]>
AuthorDate: Thu Feb 3 10:27:05 2022 +0530
vm-import: fix unmanaged instance listing (#5400)
* vm-import: fix unmanaged instance listing
When the host and last host ID is not set for the VM, it may appear in the
list of unmanaged instances.
This changes fixes the behaviour by filtering unmanaged instances list for
host for following three criteria:
- host is set as host_id for the VM
- host is set as the last_host_id for the VM
- pod of the host is set as the pod_id for the VM and both host_id and
last_host_id is NULL
* use SearchBuilder to fix query condition
* add paranthesis
Signed-off-by: Abhishek Kumar <[email protected]>
---
.../src/main/java/com/cloud/vm/dao/VMInstanceDao.java | 1 +
.../main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java | 19 ++++++++++++++++++-
.../apache/cloudstack/vm/UnmanagedVMsManagerImpl.java | 15 +++------------
3 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java
b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java
index 0bbcb37..4db07c0 100755
--- a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java
+++ b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java
@@ -162,4 +162,5 @@ public interface VMInstanceDao extends
GenericDao<VMInstanceVO, Long>, StateDao<
void updateSystemVmTemplateId(long templateId, Hypervisor.HypervisorType
hypervisorType);
+ List<VMInstanceVO> listByHostOrLastHostOrHostPod(long hostId, long podId);
}
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 7ceff5e..5701d7e 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
@@ -28,12 +28,12 @@ import java.util.Map;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
-import com.cloud.hypervisor.Hypervisor;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao;
+import com.cloud.hypervisor.Hypervisor;
import com.cloud.server.ResourceTag.ResourceObjectType;
import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.utils.DateUtil;
@@ -961,6 +961,23 @@ public class VMInstanceDaoImpl extends
GenericDaoBase<VMInstanceVO, Long> implem
} catch (Throwable e) {
throw new CloudRuntimeException("Caught: " + sql, e);
}
+ }
+ @Override
+ public List<VMInstanceVO> listByHostOrLastHostOrHostPod(long hostId, long
podId) {
+ SearchBuilder<VMInstanceVO> sb = createSearchBuilder();
+ sb.or().op("hostId", sb.entity().getHostId(), Op.EQ);
+ sb.or("lastHostId", sb.entity().getLastHostId(), Op.EQ);
+ sb.and().op("hostIdNull", sb.entity().getHostId(),
SearchCriteria.Op.NULL);
+ sb.and("lastHostIdNull", sb.entity().getHostId(),
SearchCriteria.Op.NULL);
+ sb.and("podId", sb.entity().getPodIdToDeployIn(), Op.EQ);
+ sb.cp();
+ sb.cp();
+ sb.done();
+ SearchCriteria<VMInstanceVO> sc = sb.create();
+ sc.setParameters("hostId", String.valueOf(hostId));
+ sc.setParameters("lastHostId", String.valueOf(hostId));
+ sc.setParameters("podId", String.valueOf(podId));
+ return listBy(sc);
}
}
diff --git
a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
index bf9ed7f..10a7ca7 100644
--- a/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
+++ b/server/src/main/java/org/apache/cloudstack/vm/UnmanagedVMsManagerImpl.java
@@ -22,6 +22,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Collectors;
import javax.inject.Inject;
@@ -363,18 +364,8 @@ public class UnmanagedVMsManagerImpl implements
UnmanagedVMsManager {
}
private List<String> getHostManagedVms(Host host) {
- List<String> managedVms = new ArrayList<>();
- List<VMInstanceVO> instances = vmDao.listByHostId(host.getId());
- for (VMInstanceVO instance : instances) {
- managedVms.add(instance.getInstanceName());
- }
- instances = vmDao.listByLastHostIdAndStates(host.getId(),
- VirtualMachine.State.Stopped, VirtualMachine.State.Destroyed,
- VirtualMachine.State.Expunging, VirtualMachine.State.Error,
- VirtualMachine.State.Unknown, VirtualMachine.State.Shutdown);
- for (VMInstanceVO instance : instances) {
- managedVms.add(instance.getInstanceName());
- }
+ List<VMInstanceVO> instances =
vmDao.listByHostOrLastHostOrHostPod(host.getId(), host.getPodId());
+ List<String> managedVms =
instances.stream().map(VMInstanceVO::getInstanceName).collect(Collectors.toList());
return managedVms;
}