davidzollo commented on PR #10551:
URL: https://github.com/apache/seatunnel/pull/10551#issuecomment-5579014613

   Pushed `f6919c58649` addressing F1, F4/F6, F7 and F8 from your last round; 
F3/F5's lock-ordering half is documented, the `jobMaster.init()`-relocation 
half is deliberately deferred (see below).
   
   - **F1** — `repairMissingJobStateForRestore`'s fence now checks 
`getOwnedPendingCleanup(jobId, jobInfo) != null` instead of the jobId-only 
`pendingJobCleanupIMap.containsKey(jobId)`. A stale record from a dead older 
generation is cleared as a side effect of that call (existing behavior) and no 
longer blocks repair of the current generation.
   - **F7** — when repair returns null and there's no owned cleanup record 
either, `restoreJobFromMasterActiveSwitch` now does 
`runningJobInfoIMap.remove(jobId, jobInfo)`, mirroring the pre-PR unconditional 
remove but generation-safe: if a newer `JobInfo` has since replaced this one, 
the compare-and-remove simply no-ops instead of deleting live state.
   - **F4/F6** — `cleanupPendingJobStateMaps` now continues past a single key's 
removal failure (catches per key, logs, keeps going) instead of aborting the 
whole batch, and returns whether every key actually succeeded. 
`processPendingJobCleanup`'s three call sites now retry on a fixed 5s backoff 
(`retryPendingJobStateCleanup`, deliberately not reusing 
`schedulePendingJobCleanup`'s already-elapsed-`createTimeMillis` delay, to 
avoid a tight retry loop on a persistent failure) instead of dropping the 
cleanup fence while state keys are still un-removed.
   - **F3/F5 (lock ordering)** — added a comment on the `jobMaster.init()` call 
site documenting the `pendingJobCleanupIMap` → `runningJobStateIMap.lock(key)` 
ordering contract this class follows everywhere, and noting I checked 
`DistributedStateTransition`: it only ever locks `runningJobStateIMap` directly 
and never acquires the cleanup fence, so it cannot violate the ordering.
   - **F3/F5 (moving `jobMaster.init()` out of the lock)** — not done in this 
pass. The fence is what currently prevents two concurrent restore attempts for 
the same job from both passing the ownership check and each 
constructing/initializing a separate `JobMaster`. Removing that mutual 
exclusion is a larger behavioral change than the rest of this round and I'd 
rather scope it as its own follow-up with its own review than fold it in here — 
happy to take it on next if you'd still like it before merge.
   - **F8** — added 
`testMissingStateRepairIgnoresStaleCleanupRecordFromForeignGeneration` in 
`CoordinatorServiceJobCleanupTest`, which fails against the pre-fix code 
(stale-generation record permanently blocks repair) and passes against this 
commit.
   
   `./mvnw spotless:apply` run on `seatunnel-engine-server` before pushing, no 
further formatting changes produced. Per the SeaTunnel local-verification rule 
I'm not running the module's tests locally — GitHub CI on this head is the 
verification source of truth; will follow up once it reports.
   


-- 
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