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]

Reply via email to