Skip to content

Add --experimental_max_repeated_lost_inputs to make the action-rewinding lost-input limit configurable#30164

Open
eaugene wants to merge 1 commit into
bazelbuild:masterfrom
eaugene:configurable-lost-input-rewind-limit
Open

Add --experimental_max_repeated_lost_inputs to make the action-rewinding lost-input limit configurable#30164
eaugene wants to merge 1 commit into
bazelbuild:masterfrom
eaugene:configurable-lost-input-rewind-limit

Conversation

@eaugene

@eaugene eaugene commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Problem

Action rewinding gives up — failing the build with LOST_INPUT_TOO_MANY_TIMES / LOST_OUTPUT_TOO_MANY_TIMES — once the same action loses the same input/output more than a hardcoded MAX_REPEATED_LOST_INPUTS = 20 times (ActionRewindStrategy).

Under Build-without-the-Bytes, these repeated losses are typically caused by remote-cache eviction of intermediate blobs. The right ceiling is deployment-dependent: installations with aggressive eviction hit 20 and fail spuriously, while others would rather fail fast than spend 20 rewinds masking an unhealthy cache. Today the only way to change it is to patch Bazel.

Change

Adds --experimental_max_repeated_lost_inputs (default 20, behavior-preserving), threaded through BuildRequestOptionsSkyframeActionExecutor (cached per build in prepareForExecution, exposed via maxRepeatedLostInputs()) → ActionRewindStrategy, mirroring the existing --rewind_lost_inputs wiring. It governs both the lost-input and lost-top-level-output give-up checks. The MAX_REPEATED_LOST_INPUTS constant is retained as the default and test anchor.

@google-cla

google-cla Bot commented Jul 7, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@eaugene eaugene force-pushed the configurable-lost-input-rewind-limit branch from f9dd081 to 956c5ea Compare July 7, 2026 18:29
…t-input limit configurable

Action rewinding gives up -- failing the build with LOST_INPUT_TOO_MANY_TIMES /
LOST_OUTPUT_TOO_MANY_TIMES -- once the same action loses the same input/output
more than a hardcoded MAX_REPEATED_LOST_INPUTS = 20 times. Under
build-without-the-bytes, repeated losses come from remote-cache eviction of
intermediate blobs, and the right ceiling is deployment-dependent: sites with
aggressive eviction hit 20 and fail spuriously, while others would rather fail
fast than spend 20 rewinds masking an unhealthy cache. Tuning it currently
requires patching Bazel.

This adds --experimental_max_repeated_lost_inputs (default 20, behavior-
preserving), threaded through BuildRequestOptions -> SkyframeActionExecutor ->
ActionRewindStrategy the same way as --rewind_lost_inputs. It governs both the
lost-input and lost-top-level-output give-up checks.

Tested by a new RewindingTest case (limit=2 => give up at attempt 3) alongside
the unchanged default-limit test.
@eaugene eaugene force-pushed the configurable-lost-input-rewind-limit branch from 956c5ea to 7ef8397 Compare July 7, 2026 18:34
@eaugene eaugene marked this pull request as ready for review July 7, 2026 18:47
@github-actions github-actions Bot added team-Core Skyframe, bazel query, BEP, options parsing, bazelrc awaiting-review PR is awaiting review from an assigned reviewer labels Jul 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting-review PR is awaiting review from an assigned reviewer team-Core Skyframe, bazel query, BEP, options parsing, bazelrc

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant