From 63b80ca42881c0a22da9197fbd13823fe25cd4b4 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 7 Mar 2024 11:11:25 +0100 Subject: [PATCH 01/20] pom.xml: Upgrade gson version to 2.10.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5cd228709165..2e78102b388e 100644 --- a/pom.xml +++ b/pom.xml @@ -139,7 +139,7 @@ 0.0.27 1.42.3 2.4.17 - 1.7.2 + 2.10.1 31.1-jre 4.5.14 4.4.16 From 63259cb10cb00a672ae638ea287f44e852f10e29 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Wed, 13 Mar 2024 17:52:48 +0100 Subject: [PATCH 02/20] Update 8756: fix core/utils unit test --- .../com/cloud/agent/transport/ArrayTypeAdaptor.java | 12 ++++++++---- .../src/test/java/com/cloud/utils/LogUtilsTest.java | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/com/cloud/agent/transport/ArrayTypeAdaptor.java b/core/src/main/java/com/cloud/agent/transport/ArrayTypeAdaptor.java index 7229f0903b74..eabcc82040d6 100644 --- a/core/src/main/java/com/cloud/agent/transport/ArrayTypeAdaptor.java +++ b/core/src/main/java/com/cloud/agent/transport/ArrayTypeAdaptor.java @@ -75,13 +75,17 @@ public T[] deserialize(JsonElement json, Type typeOfT, JsonDeserializationContex try { clazz = Class.forName(name); } catch (ClassNotFoundException e) { - throw new CloudRuntimeException("can't find " + name); + throw new JsonParseException("can't find " + name); } T cmd = (T)_gson.fromJson(entry.getValue(), clazz); cmds.add(cmd); } - Class type = ((Class)typeOfT).getComponentType(); - T[] ts = (T[])Array.newInstance(type, cmds.size()); - return cmds.toArray(ts); + try { + Class type = Class.forName(typeOfT.getTypeName().replace("[]", "")); + T[] ts = (T[])Array.newInstance(type, cmds.size()); + return cmds.toArray(ts); + } catch (ClassNotFoundException e) { + throw new CloudRuntimeException("can't find " + typeOfT.getTypeName()); + } } } diff --git a/utils/src/test/java/com/cloud/utils/LogUtilsTest.java b/utils/src/test/java/com/cloud/utils/LogUtilsTest.java index 350c9e946cd1..e369c0fcac68 100644 --- a/utils/src/test/java/com/cloud/utils/LogUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/LogUtilsTest.java @@ -24,7 +24,7 @@ public class LogUtilsTest { @Test public void logGsonWithoutExceptionTestLogCorrectlyPrimitives() { - String expected = "test primitives: int [1], double [1.11], float [1.2222], boolean [true], null [], char [\"c\"]."; + String expected = "test primitives: int [1], double [1.11], float [1.2222], boolean [true], null [null], char [\"c\"]."; String log = LogUtils.logGsonWithoutException("test primitives: int [%s], double [%s], float [%s], boolean [%s], null [%s], char [%s].", 1, 1.11d, 1.2222f, true, null, 'c'); assertEquals(expected, log); From d3ee78c7764b0fc3d799756cad7a2398a56b070e Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 14 Mar 2024 08:08:27 +0100 Subject: [PATCH 03/20] Update 8756 server: fix NPE of unit test passEncRootPlannerHostSupportingEncryptionTest --- .../java/com/cloud/deploy/DeploymentPlanningManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java index d97fcef7453e..7f40c6cec083 100644 --- a/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java +++ b/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java @@ -2017,7 +2017,7 @@ public boolean postStateTransitionEvent(StateMachine2.Transition t } public static String logDeploymentWithoutException(VirtualMachine vm, DeploymentPlan plan, ExcludeList avoids, DeploymentPlanner planner) { - return LogUtils.logGsonWithoutException("Trying to deploy VM [%s] and details: Plan [%s]; avoid list [%s] and planner: [%s].", vm, plan, avoids, planner); + return LogUtils.logGsonWithoutException("Trying to deploy VM [%s] and details: Plan [%s]; avoid list [%s] and planner: [%s].", vm, plan, avoids, planner != null ? planner.getName() : null); } @Override public ConfigKey[] getConfigKeys() { From eed4dce3ccf888706817d4f032fa4e4829dda229 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 14 Mar 2024 20:21:36 +0100 Subject: [PATCH 04/20] Update 8756: fix AsyncJobResponse.java --- .../apache/cloudstack/api/response/AsyncJobResponse.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/AsyncJobResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/AsyncJobResponse.java index 3eeaaef2afac..e1db5aa68247 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/AsyncJobResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/AsyncJobResponse.java @@ -55,10 +55,6 @@ public class AsyncJobResponse extends BaseResponse { @Param(description = "the async command executed") private String cmd; - @SerializedName("jobstatus") - @Param(description = "the current job status-should be 0 for PENDING") - private Integer jobStatus; - @SerializedName("jobprocstatus") @Param(description = "the progress information of the PENDING job") private Integer jobProcStatus; @@ -119,11 +115,6 @@ public void setCmd(String cmd) { this.cmd = cmd; } - @Override - public void setJobStatus(Integer jobStatus) { - this.jobStatus = jobStatus; - } - public void setJobProcStatus(Integer jobProcStatus) { this.jobProcStatus = jobProcStatus; } From 1c17e11725d567bac1499831d09cf11701d7b608 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 15 Mar 2024 00:03:05 +0100 Subject: [PATCH 05/20] Update 8756: fix NetworkResponse.java --- .../cloudstack/api/response/NetworkResponse.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java index d34f949372ae..82f4d98693af 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/NetworkResponse.java @@ -199,14 +199,6 @@ public class NetworkResponse extends BaseResponseWithAssociatedNetwork implement @Param(description = "Name of the VPC to which this network belongs", since = "4.15") private String vpcName; - @SerializedName(ApiConstants.ASSOCIATED_NETWORK_ID) - @Param(description = "the ID of the Network associated with this network") - private String associatedNetworkId; - - @SerializedName(ApiConstants.ASSOCIATED_NETWORK) - @Param(description = "the name of the Network associated with this network") - private String associatedNetworkName; - @SerializedName(ApiConstants.TUNGSTEN_VIRTUAL_ROUTER_UUID) @Param(description = "Tungsten-Fabric virtual router the network belongs to") private String tungstenVirtualRouterUuid; @@ -582,14 +574,6 @@ public void setVpcName(String vpcName) { this.vpcName = vpcName; } - public void setAssociatedNetworkId(String associatedNetworkId) { - this.associatedNetworkId = associatedNetworkId; - } - - public void setAssociatedNetworkName(String associatedNetworkName) { - this.associatedNetworkName = associatedNetworkName; - } - @Override public void setResourceIconResponse(ResourceIconResponse icon) { this.icon = icon; From 44325ca32a8aff47daa557a15c9443521f7efd15 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 15 Mar 2024 08:34:42 +0100 Subject: [PATCH 06/20] Update 8756: fix HostMetricsResponse and SystemVmResponse --- .../cloudstack/api/response/SystemVmResponse.java | 8 -------- .../apache/cloudstack/metrics/MetricsServiceImpl.java | 2 +- .../cloudstack/response/HostMetricsResponse.java | 10 ---------- 3 files changed, 1 insertion(+), 19 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/SystemVmResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/SystemVmResponse.java index 31a8b731491c..c98235b23475 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/SystemVmResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/SystemVmResponse.java @@ -38,14 +38,6 @@ public class SystemVmResponse extends BaseResponseWithAnnotations { @Param(description = "the system VM type") private String systemVmType; - @SerializedName("jobid") - @Param(description = "the job ID associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.") - private String jobId; - - @SerializedName("jobstatus") - @Param(description = "the job status associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.") - private Integer jobStatus; - @SerializedName("zoneid") @Param(description = "the Zone ID for the system VM") private String zoneId; diff --git a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java index 453b58599d69..26708920040b 100644 --- a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java +++ b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java @@ -713,7 +713,7 @@ public List listHostMetrics(List hostResponse metricsResponse.setCpuTotal(hostResponse.getCpuNumber(), hostResponse.getCpuSpeed()); metricsResponse.setCpuUsed(hostResponse.getCpuUsed(), hostResponse.getCpuNumber(), hostResponse.getCpuSpeed()); metricsResponse.setCpuAllocated(hostResponse.getCpuAllocated(), hostResponse.getCpuNumber(), hostResponse.getCpuSpeed()); - metricsResponse.setLoadAverage(hostResponse.getAverageLoad()); + metricsResponse.setCpuAverageLoad(hostResponse.getAverageLoad()); metricsResponse.setMemTotal(hostResponse.getMemoryTotal()); metricsResponse.setMemAllocated(hostResponse.getMemoryAllocated()); metricsResponse.setMemUsed(hostResponse.getMemoryUsed()); diff --git a/plugins/metrics/src/main/java/org/apache/cloudstack/response/HostMetricsResponse.java b/plugins/metrics/src/main/java/org/apache/cloudstack/response/HostMetricsResponse.java index 8e12d2cbb6d8..39d759f333f1 100644 --- a/plugins/metrics/src/main/java/org/apache/cloudstack/response/HostMetricsResponse.java +++ b/plugins/metrics/src/main/java/org/apache/cloudstack/response/HostMetricsResponse.java @@ -52,10 +52,6 @@ public class HostMetricsResponse extends HostResponse { @Param(description = "the total cpu allocated in Ghz") private String cpuAllocated; - @SerializedName("cpuloadaverage") - @Param(description = "the average cpu load the last minute") - private Double loadAverage; - @SerializedName("memorytotalgb") @Param(description = "the total memory capacity in GiB") private String memTotal; @@ -132,12 +128,6 @@ public void setCpuUsed(final String cpuUsed, final Integer cpuNumber, final Long } } - public void setLoadAverage(final Double loadAverage) { - if (loadAverage != null) { - this.loadAverage = loadAverage; - } - } - public void setCpuAllocated(final String cpuAllocated, final Integer cpuNumber, final Long cpuSpeed) { if (cpuAllocated != null && cpuNumber != null && cpuSpeed != null) { this.cpuAllocated = String.format("%.2f Ghz", parseCPU(cpuAllocated) * cpuNumber * cpuSpeed / (100.0 * 1000.0)); From 4d838ad0ced4a57c3275d45d3cf1b4d21596dad9 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Tue, 19 Mar 2024 09:09:48 +0100 Subject: [PATCH 07/20] gson: fix clover errors --- .../java/com/cloud/api/response/ApiResponseSerializer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java b/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java index c72c275c212d..e70b64782653 100644 --- a/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java +++ b/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java @@ -86,8 +86,8 @@ public static String unescape(String escaped) { public static String toJSONSerializedString(ResponseObject result, StringBuilder log) { if (result != null && log != null) { - Gson responseBuilder = ApiResponseGsonHelper.getBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).create(); - Gson logBuilder = ApiResponseGsonHelper.getLogBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).create(); + Gson responseBuilder = ApiResponseGsonHelper.getBuilder().create(); + Gson logBuilder = ApiResponseGsonHelper.getLogBuilder().create(); StringBuilder sb = new StringBuilder(); From e4ee9c336af97869f25dbdd8782c887f9ee245ef Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 22 Mar 2024 09:16:11 +0100 Subject: [PATCH 08/20] Revert "gson: fix clover errors" This reverts commit 90337fc211e98fc4eebfac0f261a61bae25ebed5. --- .../java/com/cloud/api/response/ApiResponseSerializer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java b/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java index e70b64782653..c72c275c212d 100644 --- a/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java +++ b/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java @@ -86,8 +86,8 @@ public static String unescape(String escaped) { public static String toJSONSerializedString(ResponseObject result, StringBuilder log) { if (result != null && log != null) { - Gson responseBuilder = ApiResponseGsonHelper.getBuilder().create(); - Gson logBuilder = ApiResponseGsonHelper.getLogBuilder().create(); + Gson responseBuilder = ApiResponseGsonHelper.getBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).create(); + Gson logBuilder = ApiResponseGsonHelper.getLogBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).create(); StringBuilder sb = new StringBuilder(); From 54a341aaffb4631499ac64944e39a365edd4cbff Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 22 Mar 2024 09:16:17 +0100 Subject: [PATCH 09/20] gson: new fix on saml2 plugin --- .../java/com/cloud/api/response/ApiResponseSerializer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java b/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java index c72c275c212d..09341f6fd979 100644 --- a/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java +++ b/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java @@ -86,8 +86,8 @@ public static String unescape(String escaped) { public static String toJSONSerializedString(ResponseObject result, StringBuilder log) { if (result != null && log != null) { - Gson responseBuilder = ApiResponseGsonHelper.getBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).create(); - Gson logBuilder = ApiResponseGsonHelper.getLogBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).create(); + Gson responseBuilder = ApiResponseGsonHelper.getBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.STATIC).create(); + Gson logBuilder = ApiResponseGsonHelper.getLogBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.STATIC).create(); StringBuilder sb = new StringBuilder(); From 61d8883d62c80d18fd9d2cb8d4d3e86ebcfbb6b6 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 22 Mar 2024 09:20:49 +0100 Subject: [PATCH 10/20] gson: rename jobId/jobStatus to migrationJobId/migrationJobStatus --- .../api/response/ClusterDrsPlanMigrationResponse.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/ClusterDrsPlanMigrationResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ClusterDrsPlanMigrationResponse.java index 4114c228e265..25e8d3c659a3 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/ClusterDrsPlanMigrationResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/ClusterDrsPlanMigrationResponse.java @@ -52,11 +52,11 @@ public class ClusterDrsPlanMigrationResponse extends BaseResponse { @SerializedName(ApiConstants.JOB_ID) @Param(description = "id of VM migration async job") - private Long jobId; + private Long migrationJobId; @SerializedName(ApiConstants.JOB_STATUS) @Param(description = "Job status of VM migration async job") - private JobInfo.Status jobStatus; + private JobInfo.Status migrationJobStatus; public ClusterDrsPlanMigrationResponse(String vmId, String vmName, String srcHostId, String srcHostName, @@ -68,8 +68,8 @@ public ClusterDrsPlanMigrationResponse(String vmId, String vmName, String srcHos this.srcHostName = srcHostName; this.destHostId = destHostId; this.destHostName = destHostName; - this.jobId = jobId; - this.jobStatus = jobStatus; + this.migrationJobId = jobId; + this.migrationJobStatus = jobStatus; this.setObjectName(ApiConstants.MIGRATIONS); } } From 80ca088cd042d87b7fdb729abf8278510d266601 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 22 Mar 2024 20:03:33 +0100 Subject: [PATCH 11/20] gson2: fix conflicted SerializedName in ClusterDrsPlanMigrationResponse --- api/src/main/java/org/apache/cloudstack/api/ApiConstants.java | 2 ++ .../api/response/ClusterDrsPlanMigrationResponse.java | 4 ++-- 2 files changed, 4 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 6dfcf6561244..5443237a7e62 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@ -302,6 +302,8 @@ public class ApiConstants { public static final String MIN_CPU_NUMBER = "mincpunumber"; public static final String MIN_MEMORY = "minmemory"; public static final String MIGRATION_TYPE = "migrationtype"; + public static final String MIGRATION_JOB_ID = "migrationjobid"; + public static final String MIGRATION_JOB_STATUS = "migrationjobstatus"; public static final String MIGRATIONS = "migrations"; public static final String MEMORY = "memory"; public static final String MODE = "mode"; diff --git a/api/src/main/java/org/apache/cloudstack/api/response/ClusterDrsPlanMigrationResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/ClusterDrsPlanMigrationResponse.java index 25e8d3c659a3..f399c1260f77 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/ClusterDrsPlanMigrationResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/ClusterDrsPlanMigrationResponse.java @@ -50,11 +50,11 @@ public class ClusterDrsPlanMigrationResponse extends BaseResponse { @Param(description = "Destination host for VM migration") String destHostName; - @SerializedName(ApiConstants.JOB_ID) + @SerializedName(ApiConstants.MIGRATION_JOB_ID) @Param(description = "id of VM migration async job") private Long migrationJobId; - @SerializedName(ApiConstants.JOB_STATUS) + @SerializedName(ApiConstants.MIGRATION_JOB_STATUS) @Param(description = "Job status of VM migration async job") private JobInfo.Status migrationJobStatus; From 3bcbb04d3f2f7ae374ed1f54b1e98d29dc3cacca Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 18 Oct 2024 08:58:52 +0200 Subject: [PATCH 12/20] Update PR8756: ui changes for DRS --- ui/src/views/infra/ClusterDRSTab.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ui/src/views/infra/ClusterDRSTab.vue b/ui/src/views/infra/ClusterDRSTab.vue index d53199ced87a..7b435d6d64e7 100644 --- a/ui/src/views/infra/ClusterDRSTab.vue +++ b/ui/src/views/infra/ClusterDRSTab.vue @@ -84,7 +84,7 @@