DanielLeens opened a new pull request, #12227: URL: https://github.com/apache/seatunnel/pull/12227
### Purpose of this pull request Bound metrics snapshot mutation retries under sustained contention, following the failed-pipeline cleanup work in #10757. Hazelcast 5.1 executes non-serializable `IMap.compute` lambdas locally and retries a failed conditional write indefinitely. Both metrics reports and cleanup use this path. A busy bucket can therefore keep `ReportMetricsOperation` from returning to a worker's task-completion callback, or keep the pending-pipeline cleaner inside metrics deletion. Route merge, single-task removal and pipeline removal through a shared callback with a 10-attempt budget and an interruption check. Exhaustion throws `SeaTunnelEngineException` into the existing failure paths: worker reports are logged as failures, and failed metrics deletion leaves the pending cleanup record available for a later attempt. Keep Hazelcast's existing compute implementation so it continues comparing the original serialized expected value. The wrapper stays local; no new remotely executed class, serializer, bucket key or metric value format is introduced. The ordinary success path and unrelated snapshots retain their existing behavior. ### Does this PR introduce _any_ user-facing change? Yes. Sustained metrics contention produces an explicit failure after 10 unsuccessful conditional writes per bucket, instead of an unlimited conflict loop. English and Chinese telemetry documentation describe the error and retry behavior. Individual Hazelcast calls still use their configured network timeouts. Metrics can remain at the last successful snapshot until a later report succeeds; this patch does not make a multi-bucket report transactional. Configuration defaults, public APIs, checkpoint/savepoint data and the metrics layout remain unchanged. The serialized task-location and metrics-context classes were also compared with the published `2.3.13` baseline and are unchanged. ### How was this patch tested? Added 16 regression cases to the existing real-Hazelcast test class, covering initial bucket creation conflicts and all three mutation entry points under transient conflicts, success on the last allowed attempt, retry exhaustion, interruption and backend failure. The conflict injector writes a competing value between remapping and Hazelcast's conditional write, preserving the actual compute loop and binary comparison. The original four tests are retained unchanged. Executed locally with JDK 8: ```shell ./mvnw -pl seatunnel-engine/seatunnel-engine-server -nsu -Dmaven.gitcommitid.skip=true spotless:apply git diff --check ``` Both formatting checks passed. Compilation, unit tests, integration tests and E2E were not run locally under the contributor's Apache SeaTunnel workflow; runtime verification must come from this PR head's GitHub CI. No runtime test pass is claimed. The unchanged `seatunnel-engine-ui` was not built, and no prior build artifacts were used as validation evidence. ### Check list * [x] No new dependencies or binary packages. * [x] English and Chinese telemetry documentation updated. * [x] No configuration, serialization or checkpoint/savepoint format changes. * [x] No connector registration, plugin mapping or packaging changes. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
