@@ -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