aglinxinyuan opened a new issue, #6924:
URL: https://github.com/apache/texera/issues/6924

   ### What happened?
   
   Coordinator statistics collection has no timeout and a one-way in-flight 
flag, so a single lost `queryStatistics` reply can permanently wedge region 
advancement and permanently degrade stats — with no error ever surfaced.
   
   Three compounding defects in `QueryWorkerStatisticsHandler.scala`:
   
   1. **No timeout on layered query chains.** The handler traverses the 
sender's upstream cone layer by layer, and each layer awaits all replies before 
the next is emitted: `Future.collect(futures).flatMap(_ => 
processLayers(rest))` (:171) — no timeout, no fallback. `PortCompletedHandler` 
chains **all** port-completion bookkeeping (including region completion / 
scheduling the next region) on that future, so one dropped reply-expecting 
`queryStatistics` message wedges region advancement forever.
   2. **`globalQueryStatsOngoing` is set optimistically and cleared only on 
success.** It is set to `true` at :101 when a full-graph query starts and 
cleared only inside the success `.map` (:183-185). If the chain never resolves, 
every later full-graph query short-circuits to the stale-cache branch (:86-91) 
for the life of the execution — statistics silently freeze.
   3. **Dead workers keep getting queried.** `ExecutionUtils.aggregateStates` 
returns `COMPLETED` only when **all** worker states are COMPLETED or **all** 
are TERMINATED (:95-96); a mixed COMPLETED/TERMINATED set falls through to 
`UNKNOWN` (:98-107), so the operator is not skipped by the completed-operator 
check and its already-stopped workers are queried again — feeding defect 1, 
since those replies may never come. Worker states are additionally set to 
TERMINATED one at a time from Pekko dispatcher threads during teardown 
(`RegionExecutionManager.scala:214-219`), concurrent with these 
coordinator-thread reads.
   
   ```
   lost queryStatistics reply
     └─> layer's Future.collect never resolves           (defect 1)
           ├─> portCompleted continuation never runs -> region advancement 
wedged
           └─> globalQueryStatsOngoing stuck true        (defect 2)
                 └─> all later stats polls serve stale cache
   ```
   
   Suggested direction: a `.within(...)` per layer with a logged fallback 
(treat missing metrics as stale rather than blocking), clear 
`globalQueryStatsOngoing` in a `transform`/`ensure` rather than `map`, and make 
the mixed COMPLETED/TERMINATED aggregate count as completed for the skip check.
   
   ### How to reproduce?
   
   Any path that loses a single worker→coordinator `queryStatistics` reply 
(e.g. a worker stopped between EndWorker acknowledgment and a late-layer stats 
query during teardown — reachable, see the analysis in #6916). The execution 
then hangs with no ERROR log, and stats stop updating.
   
   ### Version/Branch
   
   main (observed at 429be110a7; discovered during the investigation for #6916).
   


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