From f217a8e5d96ae73b545d8b2e13d1a4605cadad8d Mon Sep 17 00:00:00 2001 From: Shaojin Wen Date: Wed, 4 Nov 2026 23:54:05 +0800 Subject: [PATCH] fix(managed-agent): restore JournalCommit under its class-size ratchet (#16323) #16284 pinned JournalCommit at 880 lines and #16275 grew it to 886, so every Java lane fails ClassSizeRatchetTest on main. The hosted-cleanup admission probe that #16275 added belongs with the cleanup bookkeeping it guards, so move it behind HostedCleanupReferences.containsCleanup and restore the class to its pin. Fixes #16321 --- .../persistence/HostedCleanupReferences.java | 14 ++++++++++++++ .../managedagent/persistence/JournalCommit.java | 8 +------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/managed-agent-server/persistence/src/main/java/com/alibaba/qwen/code/managedagent/persistence/HostedCleanupReferences.java b/packages/managed-agent-server/persistence/src/main/java/com/alibaba/qwen/code/managedagent/persistence/HostedCleanupReferences.java index c8d285868c1..f4b7bac37e4 100644 --- a/packages/managed-agent-server/persistence/src/main/java/com/alibaba/qwen/code/managedagent/persistence/HostedCleanupReferences.java +++ b/packages/managed-agent-server/persistence/src/main/java/com/alibaba/qwen/code/managedagent/persistence/HostedCleanupReferences.java @@ -8,8 +8,10 @@ import org.springframework.dao.DuplicateKeyException; import org.springframework.jdbc.core.JdbcTemplate; import java.nio.charset.StandardCharsets; +import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.function.Function; /** The original Runtime remains referenced until its Hosted cleanup is confirmed. */ @@ -20,6 +22,18 @@ final class HostedCleanupReferences { return ManagedSchemaKeys.key("hosted-cleanup-binding", tenant, workspace, binding); } + /** + * True when the transaction carries a Hosted cleanup event. Retention takes + * placement before binding and Session locks, so cleanup admission must + * join that order before it can inspect the original binding. + */ + static boolean containsCleanup(byte[] recordBytes) { + return Arrays.stream(new String(recordBytes, StandardCharsets.UTF_8).split("\n")) + .map(com.alibaba.qwen.code.managedagent.repository.ManagedExtensionRecordStore::parse) + .filter(Objects::nonNull) + .anyMatch(record -> "hosted.cleanup".equals(record.path("managedSession").path("kind").asText())); + } + static void apply(JdbcTemplate jdbc, String tenant, String workspace, String session, JsonNode payload, Function resources, long revision, long now) { String scope = com.alibaba.qwen.code.managedagent.repository.ManagedSessionStore.sessionScopeKey(tenant, session); diff --git a/packages/managed-agent-server/persistence/src/main/java/com/alibaba/qwen/code/managedagent/persistence/JournalCommit.java b/packages/managed-agent-server/persistence/src/main/java/com/alibaba/qwen/code/managedagent/persistence/JournalCommit.java index de3b40d4b20..d2460fe9305 100644 --- a/packages/managed-agent-server/persistence/src/main/java/com/alibaba/qwen/code/managedagent/persistence/JournalCommit.java +++ b/packages/managed-agent-server/persistence/src/main/java/com/alibaba/qwen/code/managedagent/persistence/JournalCommit.java @@ -25,7 +25,6 @@ import java.nio.charset.StandardCharsets; import java.sql.SQLException; import java.sql.Timestamp; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -74,12 +73,7 @@ final class JournalCommit { fencing.checkLifecycleWriter(tenantId, sessionId, authority); JournalStoreRows.validateStableId(request.writerId(), "writerId"); ValidatedCommit validated = validateCommit(request); - if (Arrays.stream(new String(validated.recordBytes(), StandardCharsets.UTF_8).split("\n")) - .map(com.alibaba.qwen.code.managedagent.repository.ManagedExtensionRecordStore::parse) - .filter(Objects::nonNull) - .anyMatch(record -> "hosted.cleanup".equals(record.path("managedSession").path("kind").asText()))) { - // Retention takes placement before binding and Session locks. Cleanup - // admission must join that order before it can inspect the original binding. + if (HostedCleanupReferences.containsCleanup(validated.recordBytes())) { fencing.lockPlacementBounded(tenantId); } // Other ordinary commits queue on their Session before any consistent