From caf5fb841a4b08b398db5f8d282926cfdd0e5a5d Mon Sep 17 00:00:00 2001 From: abennatan Date: Tue, 2 Jun 2026 13:51:37 -0700 Subject: [PATCH 1/2] listHosts: add 'core' details --- .../apache/cloudstack/api/ApiConstants.java | 2 +- .../cloud/api/query/dao/HostJoinDaoImpl.java | 51 ++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java index 03b73834a94e..5fa9757204e8 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@ -1407,7 +1407,7 @@ public String toString() { } public enum HostDetails { - all, capacity, events, stats, min; + all, capacity, events, stats, min, core; } public enum VMDetails { diff --git a/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java index e7265a7e3b9a..f1b467b7896c 100644 --- a/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java @@ -117,6 +117,51 @@ private boolean containsHostHATag(final String tags) { return result; } + private void setNewCoreHostResponse(HostJoinVO host, HostResponse hostResponse) { + hostResponse.setId(host.getUuid()); + hostResponse.setName(host.getName()); + hostResponse.setState(host.getStatus()); + hostResponse.setResourceState(host.getResourceState().toString()); + hostResponse.setDisconnectedOn(host.getDisconnectedOn()); + hostResponse.setHostType(host.getType()); + hostResponse.setIpAddress(host.getPrivateIpAddress()); + hostResponse.setVersion(host.getVersion()); + hostResponse.setCreated(host.getCreated()); + hostResponse.setRemoved(host.getRemoved()); + hostResponse.setLastPinged(new Date(host.getLastPinged())); + if (host.getHypervisorType() != null) { + hostResponse.setHypervisor(host.getHypervisorType().getHypervisorDisplayName()); + } + + hostResponse.setZoneId(host.getZoneUuid()); + hostResponse.setZoneName(host.getZoneName()); + hostResponse.setPodId(host.getPodUuid()); + hostResponse.setPodName(host.getPodName()); + if (host.getClusterId() > 0) { + hostResponse.setClusterId(host.getClusterUuid()); + hostResponse.setClusterName(host.getClusterName()); + if (host.getClusterType() != null) { + hostResponse.setClusterType(host.getClusterType().toString()); + } + } + + String hostTags = host.getTag(); + hostResponse.setHostTags(hostTags); + hostResponse.setExplicitHostTags(host.getExplicitTag()); + hostResponse.setImplicitHostTags(host.getImplicitTag()); + hostResponse.setStorageAccessGroups(host.getStorageAccessGroups()); + hostResponse.setClusterStorageAccessGroups(host.getClusterStorageAccessGroups()); + hostResponse.setPodStorageAccessGroups(host.getPodStorageAccessGroups()); + hostResponse.setZoneStorageAccessGroups(host.getZoneStorageAccessGroups()); + + // msid is returned as-is; callers resolve it to avoid a per-host lookup + if (host.getManagementServerId() != null) { + hostResponse.setManagementServerId(host.getManagementServerId().toString()); + } + + hostResponse.setObjectName("host"); + } + private void setNewHostResponseBase(HostJoinVO host, EnumSet details, HostResponse hostResponse) { hostResponse.setId(host.getUuid()); hostResponse.setCapabilities(host.getCapabilities()); @@ -334,7 +379,11 @@ public HostResponse newMinimalHostResponse(HostJoinVO host) { @Override public HostResponse newHostResponse(HostJoinVO host, EnumSet details) { HostResponse hostResponse = new HostResponse(); - setNewHostResponseBase(host, details, hostResponse); + if (details.contains(HostDetails.core)) { + setNewCoreHostResponse(host, hostResponse); + } else { + setNewHostResponseBase(host, details, hostResponse); + } return hostResponse; } From 1f39d6111e6386ba6604b66f7c4caae634a5d39c Mon Sep 17 00:00:00 2001 From: nvazquez Date: Tue, 23 Jun 2026 12:53:50 -0300 Subject: [PATCH 2/2] Refactor to integrate core details into the base response method --- .../apache/cloudstack/api/ApiConstants.java | 2 +- .../cloud/api/query/dao/HostJoinDaoImpl.java | 125 ++++++------------ 2 files changed, 44 insertions(+), 83 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java index 5fa9757204e8..a8ff00c40ff3 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@ -1407,7 +1407,7 @@ public String toString() { } public enum HostDetails { - all, capacity, events, stats, min, core; + all, capacity, core, events, stats, min; } public enum VMDetails { diff --git a/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java index f1b467b7896c..a5496576c401 100644 --- a/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java @@ -117,51 +117,6 @@ private boolean containsHostHATag(final String tags) { return result; } - private void setNewCoreHostResponse(HostJoinVO host, HostResponse hostResponse) { - hostResponse.setId(host.getUuid()); - hostResponse.setName(host.getName()); - hostResponse.setState(host.getStatus()); - hostResponse.setResourceState(host.getResourceState().toString()); - hostResponse.setDisconnectedOn(host.getDisconnectedOn()); - hostResponse.setHostType(host.getType()); - hostResponse.setIpAddress(host.getPrivateIpAddress()); - hostResponse.setVersion(host.getVersion()); - hostResponse.setCreated(host.getCreated()); - hostResponse.setRemoved(host.getRemoved()); - hostResponse.setLastPinged(new Date(host.getLastPinged())); - if (host.getHypervisorType() != null) { - hostResponse.setHypervisor(host.getHypervisorType().getHypervisorDisplayName()); - } - - hostResponse.setZoneId(host.getZoneUuid()); - hostResponse.setZoneName(host.getZoneName()); - hostResponse.setPodId(host.getPodUuid()); - hostResponse.setPodName(host.getPodName()); - if (host.getClusterId() > 0) { - hostResponse.setClusterId(host.getClusterUuid()); - hostResponse.setClusterName(host.getClusterName()); - if (host.getClusterType() != null) { - hostResponse.setClusterType(host.getClusterType().toString()); - } - } - - String hostTags = host.getTag(); - hostResponse.setHostTags(hostTags); - hostResponse.setExplicitHostTags(host.getExplicitTag()); - hostResponse.setImplicitHostTags(host.getImplicitTag()); - hostResponse.setStorageAccessGroups(host.getStorageAccessGroups()); - hostResponse.setClusterStorageAccessGroups(host.getClusterStorageAccessGroups()); - hostResponse.setPodStorageAccessGroups(host.getPodStorageAccessGroups()); - hostResponse.setZoneStorageAccessGroups(host.getZoneStorageAccessGroups()); - - // msid is returned as-is; callers resolve it to avoid a per-host lookup - if (host.getManagementServerId() != null) { - hostResponse.setManagementServerId(host.getManagementServerId().toString()); - } - - hostResponse.setObjectName("host"); - } - private void setNewHostResponseBase(HostJoinVO host, EnumSet details, HostResponse hostResponse) { hostResponse.setId(host.getUuid()); hostResponse.setCapabilities(host.getCapabilities()); @@ -185,10 +140,15 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail hostResponse.setLastPinged(new Date(host.getLastPinged())); Long mshostId = host.getManagementServerId(); if (mshostId != null) { - ManagementServerHostVO managementServer = managementServerHostDao.findByMsid(host.getManagementServerId()); - if (managementServer != null) { - hostResponse.setManagementServerId(managementServer.getUuid()); - hostResponse.setManagementServerName(managementServer.getName()); + if (details.contains(HostDetails.core)) { + // msid is returned as-is; callers resolve it to avoid a per-host lookup + hostResponse.setManagementServerId(mshostId.toString()); + } else { + ManagementServerHostVO managementServer = managementServerHostDao.findByMsid(host.getManagementServerId()); + if (managementServer != null) { + hostResponse.setManagementServerId(managementServer.getUuid()); + hostResponse.setManagementServerName(managementServer.getName()); + } } } hostResponse.setName(host.getName()); @@ -234,9 +194,12 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail hostResponse.setGpuGroup(gpus); } if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) || details.contains(HostDetails.stats) || details.contains(HostDetails.events)) { - hostResponse.setOsCategoryId(host.getOsCategoryUuid()); hostResponse.setOsCategoryName(host.getOsCategoryName()); + } + + if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) || details.contains(HostDetails.core) || + details.contains(HostDetails.stats) || details.contains(HostDetails.events)) { hostResponse.setZoneName(host.getZoneName()); hostResponse.setPodName(host.getPodName()); if (host.getClusterId() > 0) { @@ -248,42 +211,44 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail DecimalFormat decimalFormat = new DecimalFormat("#.##"); if (host.getType() == Host.Type.Routing) { float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor(host.getClusterId()); - if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity)) { - // set allocated capacities - Long mem = host.getMemReservedCapacity() + host.getMemUsedCapacity(); - Long cpu = host.getCpuReservedCapacity() + host.getCpuUsedCapacity(); - - Float memWithOverprovisioning = host.getTotalMemory() * ApiDBUtils.getMemOverprovisioningFactor(host.getClusterId()); - hostResponse.setMemoryTotal(memWithOverprovisioning.longValue()); - hostResponse.setMemWithOverprovisioning(decimalFormat.format(memWithOverprovisioning)); - hostResponse.setMemoryAllocated(mem); - hostResponse.setMemoryAllocatedBytes(mem); - hostResponse.setMemoryAllocatedPercentage(calculateResourceAllocatedPercentage(mem, memWithOverprovisioning)); - + if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) || details.contains(HostDetails.core)) { String hostTags = host.getTag(); hostResponse.setHostTags(hostTags); - hostResponse.setIsTagARule(host.getIsTagARule()); - hostResponse.setHaHost(containsHostHATag(hostTags)); hostResponse.setExplicitHostTags(host.getExplicitTag()); hostResponse.setImplicitHostTags(host.getImplicitTag()); - - hostResponse.setHypervisorVersion(host.getHypervisorVersion()); - if (host.getArch() != null) { - hostResponse.setArch(host.getArch().getType()); - } - hostResponse.setStorageAccessGroups(host.getStorageAccessGroups()); hostResponse.setClusterStorageAccessGroups(host.getClusterStorageAccessGroups()); hostResponse.setPodStorageAccessGroups(host.getPodStorageAccessGroups()); hostResponse.setZoneStorageAccessGroups(host.getZoneStorageAccessGroups()); - float cpuWithOverprovisioning = host.getCpus() * host.getSpeed() * cpuOverprovisioningFactor; - hostResponse.setCpuAllocatedValue(cpu); - String cpuAllocated = calculateResourceAllocatedPercentage(cpu, cpuWithOverprovisioning); - hostResponse.setCpuAllocated(cpuAllocated); - hostResponse.setCpuAllocatedPercentage(cpuAllocated); - hostResponse.setCpuAllocatedWithOverprovisioning(cpuAllocated); - hostResponse.setCpuWithOverprovisioning(decimalFormat.format(cpuWithOverprovisioning)); + if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity)) { + // set allocated capacities + Long mem = host.getMemReservedCapacity() + host.getMemUsedCapacity(); + Long cpu = host.getCpuReservedCapacity() + host.getCpuUsedCapacity(); + + Float memWithOverprovisioning = host.getTotalMemory() * ApiDBUtils.getMemOverprovisioningFactor(host.getClusterId()); + hostResponse.setMemoryTotal(memWithOverprovisioning.longValue()); + hostResponse.setMemWithOverprovisioning(decimalFormat.format(memWithOverprovisioning)); + hostResponse.setMemoryAllocated(mem); + hostResponse.setMemoryAllocatedBytes(mem); + hostResponse.setMemoryAllocatedPercentage(calculateResourceAllocatedPercentage(mem, memWithOverprovisioning)); + + hostResponse.setIsTagARule(host.getIsTagARule()); + hostResponse.setHaHost(containsHostHATag(hostTags)); + + hostResponse.setHypervisorVersion(host.getHypervisorVersion()); + if (host.getArch() != null) { + hostResponse.setArch(host.getArch().getType()); + } + + float cpuWithOverprovisioning = host.getCpus() * host.getSpeed() * cpuOverprovisioningFactor; + hostResponse.setCpuAllocatedValue(cpu); + String cpuAllocated = calculateResourceAllocatedPercentage(cpu, cpuWithOverprovisioning); + hostResponse.setCpuAllocated(cpuAllocated); + hostResponse.setCpuAllocatedPercentage(cpuAllocated); + hostResponse.setCpuAllocatedWithOverprovisioning(cpuAllocated); + hostResponse.setCpuWithOverprovisioning(decimalFormat.format(cpuWithOverprovisioning)); + } } if (details.contains(HostDetails.all) || details.contains(HostDetails.stats)) { @@ -379,11 +344,7 @@ public HostResponse newMinimalHostResponse(HostJoinVO host) { @Override public HostResponse newHostResponse(HostJoinVO host, EnumSet details) { HostResponse hostResponse = new HostResponse(); - if (details.contains(HostDetails.core)) { - setNewCoreHostResponse(host, hostResponse); - } else { - setNewHostResponseBase(host, details, hostResponse); - } + setNewHostResponseBase(host, details, hostResponse); return hostResponse; }