The GitHub Actions job "Required Checks" on texera.git/xinyuan-loop-feb has failed. Run started by GitHub user aglinxinyuan (triggered by aglinxinyuan).
Head commit for run: e61681d6952aac10b6aae2926e52d876db16e7d8 / Xinyuan Lin <[email protected]> fix+test(loop): reset an inner Loop End's output once per outer iteration A Loop End's materialized output should accumulate the results of all of its own iterations; for a nested loop, the inner Loop End should accumulate only within the current outer iteration and drop its rows when the outer loop advances. That per-outer-iteration reset was never wired up: - reset_output_storage() was called from process_input_state, which only runs on the matching consume (loop_counter == 0), not the outer pass-through (loop_counter > 0) where the "outer advanced" signal arrives. - Worse, it sat under `if output_state is not None`, and a Loop End's generated process_state returns None (produce_state_on_finish is not overridden either), so output_state is always None for a Loop End -- the reset block was dead. The inner Loop End therefore accumulated across all outer iterations (9 rows in the 3x3 nested case instead of 3). Move the reset to the inner pass-through branch in _process_state_frame (loop_counter > 0). The input reader replays all states before any data each region execution, so the result/state tables still hold the previous outer iteration's rows when the outer boundary state passes through, and clearing there makes each outer iteration accumulate from empty. It fires exactly once per outer iteration because the inner LoopStart's output (and thus this pass-through) is recreated on every inner back-edge -- each loop operator is its own region, so the inner LoopStart's region does not carry reusesOutputStorageOnReExecution and its output is recreated per inner iteration. A single / outermost Loop End never sees loop_counter > 0, so it never resets and keeps all of its iterations. The Scala controller side (reusesOutputStorageOnReExecution) is unchanged; it provides the base per-loop accumulation that this reset carves the nested exception out of. Remove the dead consume-path reset call, and correct the reset_output_storage docstring, the call-site comment, and the RegionExecutionCoordinator comment to describe the actual (inner-Loop-End, per-outer-iteration) behavior. Tests: - Unit (test_main_loop): the inner pass-through (loop_counter > 0) triggers reset_output_storage once and does not invoke the operator; the consume path (loop_counter == 0, single loop) and a LoopStart pass-through never reset. - Integration (LoopIntegrationSpec): assert the materialized result row counts -- single loop = 3 (accumulate); nested inner Loop End = 3, not 9 (resets per outer iteration); nested outer Loop End = 9. The pre-existing cumulative output-tuple counts cannot distinguish accumulate from reset. Report URL: https://github.com/apache/texera/actions/runs/27456439522 With regards, GitHub Actions via GitBox
