Skip to content

3.x: fail fast on keyspace setup validation failures#942

Merged
dkropachev merged 1 commit into
scylla-3.xfrom
issue-940-keyspace-setup-retry
Jul 3, 2026
Merged

3.x: fail fast on keyspace setup validation failures#942
dkropachev merged 1 commit into
scylla-3.xfrom
issue-940-keyspace-setup-retry

Conversation

@dkropachev

@dkropachev dkropachev commented Jul 2, 2026

Copy link
Copy Markdown

Summary

Fixes #940.
Part of #939.
Jira: https://scylladb.atlassian.net/browse/DRIVER-751

Keyspace setup during connection borrow runs an internal USE "<keyspace>" before the user query is written. Validation failures from that USE, such as missing or unauthorized keyspaces, are now surfaced as final query validation errors instead of connection or host failures.

Those permanent failures do not defunct the connection, do not try the next host, and do not invoke retry policy callbacks. Driver-side failures and transient server-side failures still follow the existing pre-query next-host path, with pool accounting restored and failed keyspace attempts cleared.

Changes

  • Convert synchronous ConnectionException / BusyConnectionException from Connection.setKeyspaceAsync() into failed keyspace futures.
  • Reset failed keyspace attempts so later attempts are not blocked by stale in-flight state.
  • Release pool accounting when borrowConnection() reserves a connection but keyspace setup later fails.
  • Use the failed keyspace future path while servicing pending borrows from dequeue(), restoring pending borrow accounting on failure.
  • Preserve QueryValidationException from internal USE without defuncting the connection.
  • Fail requests immediately when borrow-time keyspace setup fails with a validation error, including 0x2200 INVALID responses.
  • Preserve synchronous setKeyspace() validation errors and busy-connection behavior.
  • Keep internal driver failures, client-side timeouts, and transient server-side errors on the normal pre-query next-host path without consuming retry-policy attempts.
  • Add regression coverage for failed keyspace setup futures, pool counter cleanup, validation/server/internal failure classification, retry-policy accounting, client/server-side timeouts, single-connection-pool next-host failover, and fail-fast behavior across multiple hosts.

Testing

mvn -pl driver-core -Pshort -Dtest=HostConnectionPoolTest#should_not_defunct_connection_when_keyspace_setup_fails_with_validation_error+should_not_defunct_connection_when_synchronous_keyspace_setup_gets_validation_error+should_fail_fast_when_keyspace_setup_fails_with_validation_error+should_fail_fast_when_keyspace_setup_receives_invalid_error_response+should_not_try_next_host_when_keyspace_setup_receives_invalid_error_response+should_not_call_retry_policy_or_send_query_when_keyspace_setup_fails_with_server_side_timeout+should_not_call_retry_policy_or_send_query_when_keyspace_setup_fails_with_client_side_timeout+should_try_next_host_when_single_connection_pool_fails_keyspace_setup test

Result: 8 tests, 0 failures, 0 errors.

@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This change updates keyspace setup failure handling across Connection, HostConnectionPool, and RequestHandler. Connection now converts synchronous keyspace write failures into failed futures, preserves busy-connection handling, and treats QueryValidationException separately. HostConnectionPool releases borrowed connections when keyspace setup fails and preserves busy-state on release. RequestHandler now stops speculative retry on QueryValidationException and otherwise continues to the next host. Tests were added and expanded for borrow-time failures, accounting restoration, validation/server errors, busy connections, and failover.

Sequence Diagram(s)

sequenceDiagram
  participant HostConnectionPool
  participant Connection
  participant RequestHandler
  HostConnectionPool->>Connection: setKeyspaceAsync("USE keyspace")
  Connection->>Connection: write USE query
  alt ConnectionException or BusyConnectionException
    Connection->>Connection: reset targetKeyspace and fail ksFuture
    HostConnectionPool->>HostConnectionPool: release borrowed connection
    HostConnectionPool-->>RequestHandler: failed future
  else USE returns ERROR
    Connection->>Connection: asException(endPoint)
    alt QueryValidationException
      Connection-->>HostConnectionPool: fail ksFuture without defuncting
      HostConnectionPool-->>RequestHandler: failed future
      RequestHandler->>RequestHandler: stop speculative retry
    else other error
      Connection->>Connection: defunct(exception)
      Connection-->>HostConnectionPool: fail ksFuture
      HostConnectionPool-->>RequestHandler: failed future
      RequestHandler->>RequestHandler: query next host
    end
  end
Loading

Possibly related issues

Suggested reviewers: roydahan

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes address #940 by converting setup failures to failed futures, restoring counters, and covering pending-borrow dequeue failures.
Out of Scope Changes check ✅ Passed No clear out-of-scope code changes appear beyond the keyspace setup failure handling and related regression tests.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed The title matches the main change: permanent keyspace setup validation failures now fail fast.
Description check ✅ Passed The description is clearly about keyspace setup failure handling and matches the code changes.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a retry-bypass bug where synchronous failures during session keyspace setup (USE "<keyspace>") could escape before borrowConnection() returns a future, preventing RequestHandler from using its normal retry/onFailure path. The change makes those failures consistently surface as failed futures and ensures pool accounting is properly restored when keyspace setup fails after a connection has been reserved.

Changes:

  • Convert synchronous ConnectionException / BusyConnectionException from the internal keyspace USE write into a failed setKeyspaceAsync() future and clear the in-flight keyspace attempt state.
  • Ensure HostConnectionPool.borrowConnection() releases the reserved connection (restoring inFlight / totalInFlight) if keyspace setup fails.
  • Add/extend regression tests covering borrow-time failure behavior and pool counter cleanup.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java Releases reserved connections when keyspace setup fails during borrow; adds defensive handling in dequeue path.
driver-core/src/main/java/com/datastax/driver/core/Connection.java Converts synchronous keyspace setup write failures into failed futures and resets stale keyspace attempts.
driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java Adds regression coverage for borrow-time keyspace failures and verifies pool counters are restored.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@dkropachev dkropachev force-pushed the issue-940-keyspace-setup-retry branch from 73957f5 to 087fe8c Compare July 2, 2026 17:53
@dkropachev dkropachev changed the title 3.x: handle keyspace setup failures during connection borrow 3.x: fail fast on permanent keyspace setup failures Jul 2, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java (1)

717-724: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Likely unreachable given the Connection.setKeyspaceAsync fix.

Since Connection.setKeyspaceAsync now catches ConnectionException/BusyConnectionException from write() internally and always returns a (possibly already-failed) future rather than throwing, this try/catch around the call itself should no longer be exercised in production — the pre-existing setKeyspaceFuture.isDone() branch below (which unwraps ExecutionException from the already-failed future) is what actually handles this scenario now, as evidenced by the new assertions in the should_fail_in_dequeue_when_setting_keyspace_and_another_set_keyspace_attempt_is_in_flight test not going through this catch block.

This is harmless defense-in-depth (e.g. protects against a mock/spy throwing directly, or a future regression reintroducing a synchronous throw), so not blocking, but worth confirming intent.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java`
around lines 717 - 724, The try/catch around Connection.setKeyspaceAsync in
HostConnectionPool.dequeueBorrow is likely dead code now that setKeyspaceAsync
handles ConnectionException and BusyConnectionException internally and returns a
failed future instead of throwing. Confirm the intended behavior and, if
synchronous throws are no longer expected, remove the catch block and rely on
the existing setKeyspaceFuture.isDone() / ExecutionException handling path;
otherwise keep it only if you explicitly want defense-in-depth for direct throws
from Connection.setKeyspaceAsync.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java`:
- Around line 717-724: The try/catch around Connection.setKeyspaceAsync in
HostConnectionPool.dequeueBorrow is likely dead code now that setKeyspaceAsync
handles ConnectionException and BusyConnectionException internally and returns a
failed future instead of throwing. Confirm the intended behavior and, if
synchronous throws are no longer expected, remove the catch block and rely on
the existing setKeyspaceFuture.isDone() / ExecutionException handling path;
otherwise keep it only if you explicitly want defense-in-depth for direct throws
from Connection.setKeyspaceAsync.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 76c38d55-cedd-4668-91e4-84e59c57f8a4

📥 Commits

Reviewing files that changed from the base of the PR and between e4916be and 73957f5.

📒 Files selected for processing (3)
  • driver-core/src/main/java/com/datastax/driver/core/Connection.java
  • driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java
  • driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java

@dkropachev dkropachev requested a review from nikagra July 2, 2026 18:02
@dkropachev dkropachev force-pushed the issue-940-keyspace-setup-retry branch from 087fe8c to fa922ae Compare July 2, 2026 18:06
@dkropachev dkropachev requested a review from Copilot July 2, 2026 18:07
@dkropachev

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment thread driver-core/src/main/java/com/datastax/driver/core/Connection.java
@dkropachev dkropachev force-pushed the issue-940-keyspace-setup-retry branch from fa922ae to 5e64ad3 Compare July 2, 2026 19:33
@dkropachev

Copy link
Copy Markdown
Author

@coderabbitai review

@dkropachev dkropachev requested review from Copilot and removed request for Copilot July 2, 2026 19:34
@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@scylladb scylladb deleted a comment from coderabbitai Bot Jul 2, 2026
@dkropachev dkropachev force-pushed the issue-940-keyspace-setup-retry branch from 5e64ad3 to 44883ca Compare July 2, 2026 22:24
@dkropachev

Copy link
Copy Markdown
Author

@coderabbitai review

@dkropachev dkropachev requested a review from Copilot July 2, 2026 22:25
@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

Comment thread driver-core/src/main/java/com/datastax/driver/core/Connection.java Outdated
Comment thread driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java Outdated
Comment thread driver-core/src/main/java/com/datastax/driver/core/Connection.java Outdated
Comment thread driver-core/src/main/java/com/datastax/driver/core/Connection.java Outdated
@dkropachev dkropachev force-pushed the issue-940-keyspace-setup-retry branch from 44883ca to b725410 Compare July 2, 2026 22:45
@dkropachev dkropachev requested review from Copilot and nikagra July 2, 2026 22:46
@dkropachev

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment thread driver-core/src/main/java/com/datastax/driver/core/RequestHandler.java Outdated
@dkropachev dkropachev force-pushed the issue-940-keyspace-setup-retry branch from b725410 to 4153ad7 Compare July 2, 2026 22:58

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java (1)

616-617: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Restore accounting if setKeyspaceAsync still throws synchronously.

Connection.setKeyspaceAsync still rethrows RuntimeException; if that happens here, Line 592 and Line 596 have already reserved inFlight and totalInFlight, but the failure callback is never registered. Return a failed future after releasing the reservation.

🐛 Proposed fix
     final Connection borrowedConnection = leastBusy;
-    ListenableFuture<Connection> setKeyspaceFuture =
-        borrowedConnection.setKeyspaceAsync(manager.poolsState.keyspace);
+    ListenableFuture<Connection> setKeyspaceFuture;
+    try {
+      setKeyspaceFuture = borrowedConnection.setKeyspaceAsync(manager.poolsState.keyspace);
+    } catch (BusyConnectionException e) {
+      borrowedConnection.release(true);
+      return Futures.immediateFailedFuture(e);
+    } catch (RuntimeException e) {
+      borrowedConnection.release(false);
+      return Futures.immediateFailedFuture(e);
+    }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java`
around lines 616 - 617, In HostConnectionPool’s connection-borrowing flow,
`borrowedConnection.setKeyspaceAsync(...)` can still throw synchronously after
`inFlight` and `totalInFlight` have been reserved, leaving the counters
unbalanced. Wrap the `setKeyspaceAsync` call in the existing borrow path, and if
it throws, immediately release the reservation by decrementing the same
accounting state before returning a failed future instead of proceeding to
register callbacks. Use the `setKeyspaceFuture` creation site and the
surrounding `inFlight`/`totalInFlight` bookkeeping to place the fix.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java`:
- Around line 616-617: In HostConnectionPool’s connection-borrowing flow,
`borrowedConnection.setKeyspaceAsync(...)` can still throw synchronously after
`inFlight` and `totalInFlight` have been reserved, leaving the counters
unbalanced. Wrap the `setKeyspaceAsync` call in the existing borrow path, and if
it throws, immediately release the reservation by decrementing the same
accounting state before returning a failed future instead of proceeding to
register callbacks. Use the `setKeyspaceFuture` creation site and the
surrounding `inFlight`/`totalInFlight` bookkeeping to place the fix.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c38f3658-8e5e-49a9-8d9a-64a91232052f

📥 Commits

Reviewing files that changed from the base of the PR and between 5e64ad3 and 4153ad7.

📒 Files selected for processing (4)
  • driver-core/src/main/java/com/datastax/driver/core/Connection.java
  • driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java
  • driver-core/src/main/java/com/datastax/driver/core/RequestHandler.java
  • driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java
🚧 Files skipped from review as they are similar to previous changes (2)
  • driver-core/src/main/java/com/datastax/driver/core/RequestHandler.java
  • driver-core/src/main/java/com/datastax/driver/core/Connection.java

@dkropachev dkropachev requested a review from Copilot July 3, 2026 03:04
@dkropachev dkropachev force-pushed the issue-940-keyspace-setup-retry branch from 4153ad7 to 3f8ffaa Compare July 3, 2026 03:07

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java (1)

606-790: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider extracting the repeated borrow-failure setup into a helper.

The four new tests in this range (should_fail_fast_when_keyspace_setup_fails_with_validation_error, should_not_call_retry_policy_when_keyspace_setup_fails_with_server_error_before_query_write, should_not_call_retry_policy_when_keyspace_setup_fails_before_query_write, should_try_next_host_when_single_connection_pool_fails_keyspace_setup) repeat the same spy/replace-connection/poolsState.setKeyspace/doReturn(immediateFailedFuture(...)) boilerplate. A small helper (e.g., spyConnectionWithFailedKeyspaceSetup(pool, keyspace, failure)) would reduce duplication.

Logic and assertions themselves are correct and consistent with the described setKeyspaceAsync contract.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java`
around lines 606 - 790, The new keyspace setup tests duplicate the same
spy/replace-connection/poolsState keyspace/doReturn failed future boilerplate,
so extract that repeated setup into a small helper to keep the tests concise and
consistent. Add a helper near the affected `HostConnectionPoolTest` cases that
takes the `HostConnectionPool`, keyspace name, and failure, then spies the
connection, swaps it into `pool.connections[0]`, calls
`session.poolsState.setKeyspace(...)`, and stubs `setKeyspaceAsync(...)` to
return the failed future. Update
`should_fail_fast_when_keyspace_setup_fails_with_validation_error`,
`should_not_call_retry_policy_when_keyspace_setup_fails_with_server_error_before_query_write`,
`should_not_call_retry_policy_when_keyspace_setup_fails_before_query_write`, and
`should_try_next_host_when_single_connection_pool_fails_keyspace_setup` to use
the helper.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In
`@driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java`:
- Around line 606-790: The new keyspace setup tests duplicate the same
spy/replace-connection/poolsState keyspace/doReturn failed future boilerplate,
so extract that repeated setup into a small helper to keep the tests concise and
consistent. Add a helper near the affected `HostConnectionPoolTest` cases that
takes the `HostConnectionPool`, keyspace name, and failure, then spies the
connection, swaps it into `pool.connections[0]`, calls
`session.poolsState.setKeyspace(...)`, and stubs `setKeyspaceAsync(...)` to
return the failed future. Update
`should_fail_fast_when_keyspace_setup_fails_with_validation_error`,
`should_not_call_retry_policy_when_keyspace_setup_fails_with_server_error_before_query_write`,
`should_not_call_retry_policy_when_keyspace_setup_fails_before_query_write`, and
`should_try_next_host_when_single_connection_pool_fails_keyspace_setup` to use
the helper.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2ad98183-e87b-4181-bb09-ab0f4af4a5ca

📥 Commits

Reviewing files that changed from the base of the PR and between 4153ad7 and 3f8ffaa.

📒 Files selected for processing (4)
  • driver-core/src/main/java/com/datastax/driver/core/Connection.java
  • driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java
  • driver-core/src/main/java/com/datastax/driver/core/RequestHandler.java
  • driver-core/src/test/java/com/datastax/driver/core/HostConnectionPoolTest.java
🚧 Files skipped from review as they are similar to previous changes (3)
  • driver-core/src/main/java/com/datastax/driver/core/RequestHandler.java
  • driver-core/src/main/java/com/datastax/driver/core/HostConnectionPool.java
  • driver-core/src/main/java/com/datastax/driver/core/Connection.java

@coderabbitai coderabbitai Bot requested a review from roydahan July 3, 2026 11:49
Fixes #940.

Part of #939.

Jira: https://scylladb.atlassian.net/browse/DRIVER-751

Keyspace setup during connection borrow runs an internal USE before the user query is written. Treat validation failures from that USE as permanent request errors instead of connection or host failures: preserve QueryValidationException, avoid defuncting the connection, and stop the request without trying the next host or invoking retry policy.

Keep driver-side and transient server-side keyspace setup failures on the existing pre-query next-host path. Report synchronous setKeyspaceAsync write failures through failed futures, clear failed attempts, and restore pool accounting for borrow and dequeue failures.

Add regression coverage for 0x2200 INVALID responses, synchronous setKeyspace validation handling, client/server-side keyspace setup timeouts, pool accounting cleanup, retry-policy accounting, and next-host behavior.
@dkropachev dkropachev force-pushed the issue-940-keyspace-setup-retry branch from a562140 to bf77fd5 Compare July 3, 2026 12:25
@dkropachev dkropachev changed the title 3.x: fail fast on permanent keyspace setup failures 3.x: fail fast on keyspace setup validation failures Jul 3, 2026
@dkropachev dkropachev merged commit 7da1f87 into scylla-3.x Jul 3, 2026
13 checks passed
@dkropachev dkropachev deleted the issue-940-keyspace-setup-retry branch July 3, 2026 12:47
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.

3 participants