mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
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 <abhishek.mrt22@gmail.com>
This commit is contained in:
parent
62b806ac13
commit
638779ca37
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user