Skip to content

Avoid TLS set_multi stall in recovery parity fixtures; cap CI job time - #86

Merged
nherson merged 1 commit into
nherson/async-timeout-recoveryfrom
nherson/ssl-fixture-ci-timeout
Oct 13, 2026
Merged

nherson merged 1 commit into
nherson/async-timeout-recoveryfrom
nherson/ssl-fixture-ci-timeout

Conversation

@nherson

@nherson nherson commented Oct 13, 2026

Copy link
Copy Markdown

Stacked on #85.

CI run 37812536660 had Ruby 3.2/3.3 jobs cancelled at the 6h limit. The new SSL parity test hangs in store_fixtures: a 40 x 3KB set_multi over TLS (default read path) never gets MN from memcached. On Ruby < 3.4 the bundled openssl gem ignores IO#timeout for blocking SSL reads, so socket_timeout never fires; on 3.4+ it times out after 1s and retries (SSL test took ~1.23s). Reproduced on main's lib without this PR's reader.

  • Load the multi-key fixtures with individual set calls.
  • Add timeout-minutes: 15 to the test job (passing jobs take ~3 min).

Verified locally on Ruby 3.3.6: the whole file passes with seeds 1-3, SSL test 0.14-0.16s.

A 40 x 3KB set_multi over TLS can stall memcached waiting for MN, and on
Ruby < 3.4 the openssl gem ignores IO#timeout, so the SSL parity test hung
until GitHub's 6h job limit. Load fixtures with individual sets and add a
15 minute job timeout so future hangs fail fast.
@nherson
nherson merged commit 415c0ee into nherson/async-timeout-recovery Oct 13, 2026
16 checks passed
nherson added a commit that referenced this pull request Oct 13, 2026
…chedulers (#85)

* Add experimental per-request timeout recovery for reads under fiber schedulers

* Avoid TLS set_multi stall in recovery parity fixtures; cap CI job time (#86)

A 40 x 3KB set_multi over TLS can stall memcached waiting for MN, and on
Ruby < 3.4 the openssl gem ignores IO#timeout, so the SSL parity test hung
until GitHub's 6h job limit. Load fixtures with individual sets and add a
15 minute job timeout so future hangs fail fast.

* Remove timeout-recovery reader test for unreachable post-timeout state

The reader is always discarded after an IO::TimeoutError (error_on_request! -> close),
and the assertion only held because read_nonblock leaves the buffer intact on
:wait_readable for plain IO.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant