4.2 KiB
4.2 KiB
Task 6 Report
Status
GREEN, pending independent review.
RED Evidence
- The initial Task 6 focused command failed test compilation because
ShadowRuntimeMetrics,ShadowFailureStage, tracked completion factories, the injectedSleeper, the v3 gateway constructor, and the metric mapper operation did not exist. - After the initial coordinator recovery implementation, the new
staleRefreshTicketCannotCancelANewerRefreshLeasetest failed with expectedBUSYbut actualUNAVAILABLE, proving that a late old ticket could cancel a newer refresh lease.
Implementation
- Inbound and outbound completion tokens now support idempotent
completeand non-throwingfail(Throwable), close caller-owned Legacy activity exactly once, and record Legacy duration without mapper access. ShadowRuntimeMetricsuses fixed-cardinality atomic counters and histogram buckets.drain()returns an immutable bounded batch for the worker.ShadowObservationGatewaynow performs asynchronous startup refresh, coordinator admission, snapshot-qualified planning, worker-only Legacy waiting/comparison, concurrency invalidation, one-thread/capacity-one execution, quiet-window refresh, 1/2/4-second retry, one-minute recovery coalescing, worker-only structured warnings, and worker-side metric persistence.- Snapshot generations continue above the currently stored database generation.
- Refresh leases are unique; stale ticket completion cannot clear a later refresh.
- The mapper upserts only fixed metric rows into
alg.shadow_runtime_metric.
GREEN Evidence
Task 6 focused suite was run twice with Maven 3.9.11 after implementation:
& 'D:\BDevTools\maven\apache-maven-3.9.11\bin\mvn.cmd' -pl 'ruoyi-admin' -am '-Dtest=ShadowObservationGatewayTest,ShadowRuntimeMetricsTest,ShadowSnapshotCoordinatorTest' '-Dsurefire.failIfNoSpecifiedTests=false' test
Both runs completed with 21 tests, 0 failures, 0 errors, and BUILD SUCCESS.
The final Task 5+6 compatibility command was then run after the metric SQL boundary assertions:
& 'D:\BDevTools\maven\apache-maven-3.9.11\bin\mvn.cmd' -pl 'ruoyi-admin' -am '-Dtest=ShadowPlanningEngineTest,ShadowObservationGatewayTest,ShadowRuntimeMetricsTest,ShadowSnapshotCoordinatorTest' '-Dsurefire.failIfNoSpecifiedTests=false' test
Result: 36 tests, 0 failures, 0 errors, BUILD SUCCESS.
Concerns
- Tests intentionally emit structured warning lines for simulated plan, wait, compare, and refresh failures. They contain only request id, configured warehouse, generation, fixed stage, exception class, and elapsed microseconds; exception messages are not logged.
- Existing unrelated Lombok superclass and JVM class-data-sharing warnings remain unchanged.
Fix Round 1
RED Evidence
- Command:
mvn -pl ruoyi-admin -am -Dtest=ShadowObservationGatewayTest#inboundLegacyFailureIsRecordedAtLegacyWaitStage+outboundLegacyFailureIsRecordedAtLegacyWaitStage -Dsurefire.failIfNoSpecifiedTests=false test - Result: 2 tests run, 2 failures, 0 errors. Both latch assertions timed out because inbound and outbound workers returned immediately when
LegacyResult.failure()was non-null.
GREEN Evidence
- Command:
mvn -pl ruoyi-admin -am -Dtest=ShadowObservationGatewayTest,ShadowRuntimeMetricsTest,ShadowSnapshotCoordinatorTest -Dsurefire.failIfNoSpecifiedTests=false test - Result:
ShadowObservationGatewayTest13 tests,ShadowRuntimeMetricsTest3 tests, andShadowSnapshotCoordinatorTestpassed with 0 failures and 0 errors; Maven build succeeded.
Changes and Self-review
- Files:
ruoyi-admin/src/main/java/com/ruoyi/algorithm/shadow/ShadowObservationGateway.java,ruoyi-admin/src/test/java/com/ruoyi/algorithm/shadow/ShadowObservationGatewayTest.java, and this report. - Inbound/outbound worker
LEGACY_WAITfailures now use the existing fixed-stage metric and structured warning path. Warning data remains request id, warehouse, generation, fixed stage, exception class, and elapsed time; failure messages and payloads are not logged. - Added direct inbound/outbound
fail(Throwable)regression tests, including duplicatefail/completeassertions; Legacy admission remains closed exactly once by the completion token. - Review scope stayed limited to the required Important; asynchronous timing Minors were not changed.