Skip to content

openrot v0.2.10

Choose a tag to compare

@github-actions github-actions released this 04 Sep 08:49
· 13 commits to main since this release

What's New

Wait for in-progress rotation instead of skipping

When the bridge hits a retryable upstream status (e.g. 429) it rotates the cascade before retrying. Previously, if two requests hit the limit at the same time, the second one would find a rotation already in progress and skip its own rotation — then retry against the still-rate-limited node and fail with an error.

Now rotation uses a competition flag:

  • The first caller performs the rotation (as before).
  • Concurrent callers wait for that rotation to finish, then retry against the freshly-rotated node — no error is returned, no second rotation is started.

So a burst of parallel 429s is handled by a single rotation, and every request gets a retry on a healthy node.

Rotation timing context in logs

The bridge now logs whether it actually rotated or waited on an in-progress rotation, with the elapsed time:

INFO [warp] rotation took 0.4s
INFO [warp] waited 0.3s for in-progress rotation

Bug Fixes

  • Fix UnboundLocalError in the bridge retry path when rotate() bails out (no alive node) before assigning the rotation result.

Full Changelog: v0.2.9...v0.2.10