Skip to content

Commit d27b2f4

Browse files
author
Daman Arora
committed
update user VM response handling in KubernetesClusterManagerImpl
1 parent 8f5ee6d commit d27b2f4

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -861,24 +861,38 @@ public KubernetesClusterResponse createKubernetesClusterResponse(long kubernetes
861861

862862
List<KubernetesUserVmResponse> vmResponses = new ArrayList<>();
863863
List<KubernetesClusterVmMapVO> vmList = kubernetesClusterVmMapDao.listByClusterId(kubernetesCluster.getId());
864-
ResponseView respView = ResponseView.Restricted;
864+
ResponseView userVmResponseView = ResponseView.Restricted;
865865
Account caller = CallContext.current().getCallingAccount();
866866
if (accountService.isRootAdmin(caller.getId())) {
867-
respView = ResponseView.Full;
867+
userVmResponseView = ResponseView.Full;
868868
}
869869
final String responseName = "virtualmachine";
870870
if (vmList != null && !vmList.isEmpty()) {
871-
for (KubernetesClusterVmMapVO vmMapVO : vmList) {
872-
UserVmJoinVO userVM = userVmJoinDao.findById(vmMapVO.getVmId());
873-
if (userVM != null) {
874-
UserVmResponse vmResponse = ApiDBUtils.newUserVmResponse(respView, responseName, userVM,
875-
EnumSet.of(VMDetails.nics, VMDetails.affgrp), caller);
871+
Map<Long, KubernetesClusterVmMapVO> vmMapById = vmList.stream()
872+
.collect(Collectors.toMap(KubernetesClusterVmMapVO::getVmId, vm -> vm));
873+
Long[] vmIds = vmMapById.keySet().toArray(new Long[0]);
874+
List<UserVmJoinVO> userVmJoinVOs = userVmJoinDao.searchByIds(vmIds);
875+
if (userVmJoinVOs != null && !userVmJoinVOs.isEmpty()) {
876+
Map<Long, UserVmResponse> vmResponseMap = new HashMap<>();
877+
for (UserVmJoinVO userVM : userVmJoinVOs) {
878+
Long vmId = userVM.getId();
879+
UserVmResponse vmResponse = vmResponseMap.get(vmId);
880+
if (vmResponse == null) {
881+
vmResponse = ApiDBUtils.newUserVmResponse(userVmResponseView, responseName, userVM,
882+
EnumSet.of(VMDetails.nics, VMDetails.affgrp), caller);
883+
vmResponseMap.put(vmId, vmResponse);
884+
} else {
885+
ApiDBUtils.fillVmDetails(userVmResponseView, vmResponse, userVM);
886+
}
887+
}
888+
for (Map.Entry<Long, UserVmResponse> vmIdResponseEntry : vmResponseMap.entrySet()) {
876889
KubernetesUserVmResponse kubernetesUserVmResponse = new KubernetesUserVmResponse();
877890
try {
878-
BeanUtils.copyProperties(kubernetesUserVmResponse, vmResponse);
891+
BeanUtils.copyProperties(kubernetesUserVmResponse, vmIdResponseEntry.getValue());
879892
} catch (IllegalAccessException | InvocationTargetException e) {
880893
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to generate zone metrics response");
881894
}
895+
KubernetesClusterVmMapVO vmMapVO = vmMapById.get(vmIdResponseEntry.getKey());
882896
kubernetesUserVmResponse.setExternalNode(vmMapVO.isExternalNode());
883897
kubernetesUserVmResponse.setEtcdNode(vmMapVO.isEtcdNode());
884898
kubernetesUserVmResponse.setNodeVersion(vmMapVO.getNodeVersion());

0 commit comments

Comments
 (0)