venkata91 commented on PR #3842:
URL: https://github.com/apache/celeborn/pull/3842#issuecomment-5755178493

   **Production evidence for this, from a ~500-worker 0.6.2 fleet.**
   
   We see sustained `PUSH_DATA_TIMEOUT_REPLICA` bursts that match this failure 
mode exactly. Over 7 days in one cluster:
   
   ```
   ReplicateDataTimeoutCount              8,448,683   95.8%
   ReplicateDataConnectionExceptionCount    310,022
   ReplicateDataCreateConnectionFailCount    57,049
   ReplicateDataFailCount                         0
   ReplicateDataWriteFailCount                    0
   ```
   
   `ReplicateDataFailCount` and `ReplicateDataWriteFailCount` are exactly zero, 
so no replica ever rejected a write. It is all requests expiring in 
`failExpiredPushRequest`.
   
   A representative burst:
   
   ```
   02:12  worker-447 restarts on node A, re-registers
   02:33  worker-447 restarts again, on node B (new pod IP), re-registers
   02:33+ replication timeout burst begins
   02:49  PrimaryPushDataTime p99 pins at 305,285 ms (client push timeout is 
300s),
          sustained ~15 min; baseline is 0.02-10 ms
   03:46  same primary/peer pairs timing out repeatedly, same second, many 
partitions
   ```
   
   Two things corroborate the stale-pooled-client diagnosis:
   
   - **Zero** `"Still have N requests outstanding when connection ... is 
closed"` log lines during the burst. `channelInactive` never fired, so the 
channel did report active, exactly as described here.
   - `PbWorkerLost` was 0 throughout. These are graceful restarts with stable 
worker identity, so the master re-registers rather than declaring the worker 
lost. Nothing upstream of the transport layer notices.
   
   **On scale:** without invalidation the poisoned client stays eligible for 
reuse, so every subsequent push to that peer expires at 300s as well. One 
20-minute window recorded 1,974,971 increments, 34% of a three-day total. The 
repeat rate looks unbounded. Adding `unavailablePeers` on the timeout branch 
bounds it to roughly one generation per peer per `replicate.fastFail.duration`.
   
   Client-visible cost is real: `PrimaryPushDataTime` is the time a Spark 
executor's push is held, so a pinned p99 is `shuffleWriteTime` directly.
   
   Would be glad to see this merged, and we would need a `branch-0.6` backport 
to pick it up.
   


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