From 22f714fcdadb721ddbd20a0c8fa958618ed68457 Mon Sep 17 00:00:00 2001 From: J M Date: Tue, 14 Apr 2026 23:41:08 +0800 Subject: [PATCH 1/3] [thread]: remove redundant try-catch in CoalesceQueue and fix null backup Remove try-catch around executeBatch since AJ AsyncBackupAspect already wraps Completion/ReturnValueCompletion pointcuts. The try-catch caused double handleFailure when executeBatch threw after completion callback. Fix ReturnValueCoalesceQueue passing null backup to batchCompletion, which caused AJ to re-throw instead of swallowing exceptions. Resolves: ZSTAC-83039 Change-Id: I3b565ba68fa601b33adb4d6b15d0ab4248b5a4da --- .../zstack/core/thread/AbstractCoalesceQueue.java | 14 ++++++-------- .../core/thread/ReturnValueCoalesceQueue.java | 2 +- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/org/zstack/core/thread/AbstractCoalesceQueue.java b/core/src/main/java/org/zstack/core/thread/AbstractCoalesceQueue.java index 7a97e08b490..579a327160d 100644 --- a/core/src/main/java/org/zstack/core/thread/AbstractCoalesceQueue.java +++ b/core/src/main/java/org/zstack/core/thread/AbstractCoalesceQueue.java @@ -162,14 +162,12 @@ public void run(SyncTaskChain chain) { // Execute batch with the direct completion object List items = requests.stream().map(req -> req.item).collect(Collectors.toList()); - try { - executeBatch(items, batchCompletion); - } catch (Throwable t) { - logger.warn(String.format("[%s] executeBatch threw exception for signature[%s]", - name, syncSignature), t); - handleFailure(syncSignature, requests, - operr(ORG_ZSTACK_CORE_THREAD_10004, "executeBatch threw exception: %s", t.getMessage()), chain); - } + + /** *(.., AbstractCompletion, ..) is not AsyncSafeAspect's pointcut, but it will call + * executeBatch(.., Completion/ReturnValueCompletion) which is pointcut, + * so we do not need try-catch here. + */ + executeBatch(items, batchCompletion); } @Override diff --git a/core/src/main/java/org/zstack/core/thread/ReturnValueCoalesceQueue.java b/core/src/main/java/org/zstack/core/thread/ReturnValueCoalesceQueue.java index 346824647fd..bf52cc93f31 100644 --- a/core/src/main/java/org/zstack/core/thread/ReturnValueCoalesceQueue.java +++ b/core/src/main/java/org/zstack/core/thread/ReturnValueCoalesceQueue.java @@ -28,7 +28,7 @@ protected final void executeBatch(List items, AbstractCompletion batchComplet @Override protected final AbstractCompletion createBatchCompletion(String syncSignature, List requests, SyncTaskChain chain) { - return new ReturnValueCompletion(null) { + return new ReturnValueCompletion(chain) { @Override public void success(R batchResult) { handleSuccess(syncSignature, requests, batchResult, chain); From 99ae62e227574cf278bafa750a334397259dfefd Mon Sep 17 00:00:00 2001 From: lianghy Date: Wed, 15 Apr 2026 11:40:23 +0800 Subject: [PATCH 2/3] [conf]: bump version to 5.5.16 DBImpact Resolves/Related: ZSTAC-84259 Change-Id: I6f67716c7a616d706b7376637766747678766e6a --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 6d937c2fb57..8fc74fe766b 100755 --- a/VERSION +++ b/VERSION @@ -1,3 +1,3 @@ MAJOR=5 MINOR=5 -UPDATE=12 +UPDATE=16 From 6b42f85628dc886e27ba71cf55be944daeb47ca0 Mon Sep 17 00:00:00 2001 From: "chao.he" Date: Wed, 15 Apr 2026 15:53:05 +0800 Subject: [PATCH 3/3] [zwatch]: align hidden schema and sdk generation for ZSTAC-83966 - add hidden columns for AlarmVO/EventSubscriptionVO/ActiveAlarmVO in upgrade script - exclude test-only classes and groovy runtime metadata from sdk data structure generation - sync generated sdk hidden(Boolean) fields for alarm/event/active alarm inventories Resolves: ZSTAC-83966 Change-Id: Ic660df81e306f8cb64348289604810c27dd63ae0 --- conf/db/upgrade/V5.5.12.1__schema.sql | 4 +++ .../scripts/SdkDataStructureGenerator.groovy | 30 +++++++++++++++++-- .../sdk/zwatch/alarm/AlarmInventory.java | 8 +++++ .../alarm/EventSubscriptionInventory.java | 8 +++++ .../entity/ActiveAlarmInventory.java | 8 +++++ 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 conf/db/upgrade/V5.5.12.1__schema.sql diff --git a/conf/db/upgrade/V5.5.12.1__schema.sql b/conf/db/upgrade/V5.5.12.1__schema.sql new file mode 100644 index 00000000000..8c5ba872a20 --- /dev/null +++ b/conf/db/upgrade/V5.5.12.1__schema.sql @@ -0,0 +1,4 @@ +-- ZSTAC-83966: Add hidden field to AlarmVO/EventSubscriptionVO/ActiveAlarmVO for soft-hide support +CALL ADD_COLUMN('AlarmVO', 'hidden', 'TINYINT(1)', 0, '0'); +CALL ADD_COLUMN('EventSubscriptionVO', 'hidden', 'TINYINT(1)', 0, '0'); +CALL ADD_COLUMN('ActiveAlarmVO', 'hidden', 'TINYINT(1)', 0, '0'); diff --git a/rest/src/main/resources/scripts/SdkDataStructureGenerator.groovy b/rest/src/main/resources/scripts/SdkDataStructureGenerator.groovy index dcaea05080d..67eb9b08107 100755 --- a/rest/src/main/resources/scripts/SdkDataStructureGenerator.groovy +++ b/rest/src/main/resources/scripts/SdkDataStructureGenerator.groovy @@ -37,7 +37,16 @@ class SdkDataStructureGenerator implements SdkTemplate { Reflections reflections = Platform.getReflections() responseClasses = reflections.getTypesAnnotatedWith(RestResponse.class) laterResolvedClasses.addAll(reflections.getTypesAnnotatedWith(SDK.class) - .findAll() { !Message.class.isAssignableFrom(it) }) + .findAll() { + !Message.class.isAssignableFrom(it) && !excludedFromSdkGeneration(it) + }) + } + + static boolean excludedFromSdkGeneration(Class clz) { + if (clz == null) { + return true + } + return clz.getName().startsWith("org.zstack.test.") } @Override @@ -128,6 +137,10 @@ ${dstToSrc.join("\n")} return } + if (excludedFromSdkGeneration(clz)) { + return + } + if (clz.isAnnotationPresent(NoSDK.class)) { return } @@ -202,7 +215,13 @@ ${output.join("\n")} || short.class == clz || char.class == clz || boolean.class == clz || float.class == clz || double.class == clz) { return false - } else if (clz.getCanonicalName().startsWith("org.zstack")) { + } + if (clz.getName().startsWith("groovy.") || clz.getName().startsWith("org.codehaus.groovy.")) { + return false + } + + def canonicalName = clz.getCanonicalName() + if (canonicalName != null && canonicalName.startsWith("org.zstack")) { return true } else { throw new CloudRuntimeException("${clz.getName()} is neither JRE class nor ZStack class") @@ -210,6 +229,10 @@ ${output.join("\n")} } def addToLaterResolvedClassesIfNeed(Class clz) { + if (excludedFromSdkGeneration(clz)) { + return + } + if (clz.isAnnotationPresent(NoSDK.class)) { return } @@ -219,6 +242,9 @@ ${output.join("\n")} } Platform.reflections.getSubTypesOf(clz).forEach({ i -> + if (excludedFromSdkGeneration(i)) { + return + } if (!sdkFileMap.containsKey(i) && !i.isAnnotationPresent(NoSDK.class)) { laterResolvedClasses.add(i) } diff --git a/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/AlarmInventory.java b/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/AlarmInventory.java index cf641122592..815f92e30ce 100644 --- a/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/AlarmInventory.java +++ b/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/AlarmInventory.java @@ -150,4 +150,12 @@ public java.lang.String getEmergencyLevel() { return this.emergencyLevel; } + public java.lang.Boolean hidden; + public void setHidden(java.lang.Boolean hidden) { + this.hidden = hidden; + } + public java.lang.Boolean getHidden() { + return this.hidden; + } + } diff --git a/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/EventSubscriptionInventory.java b/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/EventSubscriptionInventory.java index ff9e2986fe8..aa85214b4f8 100644 --- a/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/EventSubscriptionInventory.java +++ b/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/EventSubscriptionInventory.java @@ -84,4 +84,12 @@ public java.lang.String getEmergencyLevel() { return this.emergencyLevel; } + public java.lang.Boolean hidden; + public void setHidden(java.lang.Boolean hidden) { + this.hidden = hidden; + } + public java.lang.Boolean getHidden() { + return this.hidden; + } + } diff --git a/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/activealarm/entity/ActiveAlarmInventory.java b/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/activealarm/entity/ActiveAlarmInventory.java index da1eab8729c..ea014802171 100644 --- a/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/activealarm/entity/ActiveAlarmInventory.java +++ b/sdk/src/main/java/org/zstack/sdk/zwatch/alarm/activealarm/entity/ActiveAlarmInventory.java @@ -44,4 +44,12 @@ public java.lang.String getUuid() { return this.uuid; } + public java.lang.Boolean hidden; + public void setHidden(java.lang.Boolean hidden) { + this.hidden = hidden; + } + public java.lang.Boolean getHidden() { + return this.hidden; + } + }