Skip to content

chore(deps): bump redis-enterprise + redis-cloud to refreshed main; adapt callers#924

Open
joshrotenberg wants to merge 1 commit into
mainfrom
chore/bump-enterprise-cloud-deps
Open

chore(deps): bump redis-enterprise + redis-cloud to refreshed main; adapt callers#924
joshrotenberg wants to merge 1 commit into
mainfrom
chore/bump-enterprise-cloud-deps

Conversation

@joshrotenberg
Copy link
Copy Markdown
Collaborator

Summary

Picks up the 2026-05 refresh of both client crates that landed across ~25 PRs in redis-enterprise-rs and ~10 PRs in redis-cloud-rs. Both deps are pinned via branch = "main" so this is a cargo update -p redis-enterprise -p redis-cloud plus the small caller-side adaptations the breaking changes required.

What landed upstream

redis-enterprise-rs

  • All 10 Tier-1 issues (fix: re-enable mdbook-lint 0.11.5 with correct configuration #58Improve redis-cloud crate API consistency and usability #67) closed. Surgical bug fixes (crdb PATCH, bdb flush path, nodes execute_action URL, ocsp POST), six wrapper-decode fixes (actions, crdb, bdb_groups, bootstrap, proxies, cluster_alerts), type corrections (Action progress/node_uid as String, Proxy maxmemory_clients widened to u64).
  • cluster + nodes gained check() endpoints; users RBAC made role Optional so role_uids can be used alone.
  • Stats / crdb_tasks correctness fixes — shard stats path corrected from /v1/shards/{uid}/stats to /v1/shards/stats/{uid}; crdb_tasks cancel now POSTs to /actions/cancel.
  • Live-integration smoke tests added.
  • Route-coverage test against docs/api-inventory.csv.
  • Full rustdoc pass: 490 missing-docs errors → 0, #![deny(missing_docs)] enforced.
  • aws-lc-sys / rustls-webpki bumped past six RUSTSEC advisories.

redis-cloud-rs

  • All Tier-1 surgical bug fixes (FixedDatabaseHandler::list, GET /tasks decode, VPC peering wire keys, activatedOn, credit_card_ends_with String).
  • ConnectivityHandler delegation methods documented.
  • Rustdoc pass: 378 missing-docs errors → 0, lint enforced.
  • aws-lc-sys / rustls-webpki bumped.

Caller adaptations

File Change
crates/redisctl-core/src/enterprise/progress.rs EnterpriseProgressEvent::Polling.progress widens to Option<String> to match the enterprise crate's Action.progress. .clone() added on the assignment since String isn't Copy.
crates/redisctl-mcp/src/tools/enterprise/rbac.rs create_enterprise_user wraps the tool's required role input in Some(...). The MCP tool schema still treats role as required; RBAC-only via role_uids is a follow-up.
crates/redisctl-mcp/tests/enterprise_tools.rs test_get_shard_stats mounts /v1/shards/stats/{uid} (spec-correct) instead of /v1/shards/{uid}/stats.

Drive-by clippy fixes

crates/redisctl-mcp/src/tools/redis/diagnostics.rs hit clippy::unnecessary_sort_by after the rust-clippy update; both call sites converted to sort_by_key(|entry| std::cmp::Reverse(entry.1)).

Issues likely auto-resolved (needs live verification)

The upstream enterprise refresh fixed multiple decode/path bugs that match the symptoms reported in:

Each needs a live re-run after this lands to confirm.

Test plan

  • cargo fmt --all -- --check
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace — ~1000+ tests pass, none failing

…dapt callers

Picks up the substantial 2026-05 refresh of both client crates that
landed across ~25 PRs in redis-enterprise-rs and ~10 PRs in
redis-cloud-rs. Both deps are pinned via `branch = "main"` so this
is a `cargo update -p redis-enterprise -p redis-cloud` plus the
small caller-side adaptations the breaking changes required.

## What landed upstream

### redis-enterprise-rs
- All 10 Tier-1 issues (#58#67) closed: surgical bug fixes
  (crdb PATCH, bdb flush path, nodes execute_action URL, ocsp POST),
  six wrapper-decode fixes (actions / crdb / bdb_groups / bootstrap /
  proxies / cluster_alerts), type corrections (Action progress/node_uid
  as String, Proxy maxmemory_clients widened to u64).
- cluster + nodes gained check() endpoints; users RBAC made role
  Optional so role_uids can be used alone.
- Stats / crdb_tasks correctness fixes (shard stats path fixed from
  /v1/shards/{uid}/stats to /v1/shards/stats/{uid}; crdb_tasks cancel
  now POSTs to /actions/cancel).
- Live-integration smoke tests added (#49).
- Route-coverage test against docs/api-inventory.csv (#66).
- Full rustdoc pass: 490 missing-docs errors -> 0, #![deny(missing_docs)]
  enforced (#67).
- aws-lc-sys / rustls-webpki bumped past six RUSTSEC advisories.

### redis-cloud-rs
- All Tier-1 surgical bug fixes (FixedDatabaseHandler::list,
  GET /tasks decode, VPC peering wire keys, activatedOn,
  credit_card_ends_with String).
- private_link delegation methods documented.
- Rustdoc pass: 378 missing-docs errors -> 0, lint enforced.
- aws-lc-sys / rustls-webpki bumped.

## Caller adaptations

- crates/redisctl-core/src/enterprise/progress.rs:
  EnterpriseProgressEvent::Polling.progress is now Option<String>
  to match the enterprise crate's new Action.progress shape. Plus a
  .clone() on the action.progress field since String doesn't impl Copy.
- crates/redisctl-mcp/src/tools/enterprise/rbac.rs:
  create_enterprise_user wraps the tool's required `role` input in
  Some(...) because the enterprise CreateUserRequest.role field is
  now Option<String>. MCP tool schema still treats role as required;
  RBAC-style usage via role_uids alone is a follow-up.
- crates/redisctl-mcp/tests/enterprise_tools.rs:
  test_get_shard_stats mock now mounts /v1/shards/stats/{uid} (the
  spec-correct path) instead of /v1/shards/{uid}/stats (the previous
  buggy path).

## Drive-by clippy fixes

crates/redisctl-mcp/src/tools/redis/diagnostics.rs hit
clippy::unnecessary_sort_by after the rust-clippy update; both
sort_by(|a, b| b.1.cmp(&a.1)) callsites converted to
sort_by_key(|entry| std::cmp::Reverse(entry.1)).

## Test plan

- cargo fmt --all -- --check
- cargo clippy --workspace --all-targets -- -D warnings
- cargo test --workspace -- all suites green; ~1000+ tests pass

## Issues likely auto-resolved (needs live verification against a
real Enterprise cluster)

The upstream enterprise refresh fixed multiple decode/path bugs that
match symptoms in:

- #917 usage-report get fails to parse live response
- #919 endpoint availability fails against local demo cluster
- #920 services get/status fails for cm_server
- #921 diagnostics list-checks returns 404
- #916 enterprise database create --dry-run returns 404

Each needs a live re-run after this lands to confirm whether the
upstream fixes resolve it.
joshrotenberg added a commit that referenced this pull request May 28, 2026
Two `key_sizes.sort_by(|a, b| b.1.cmp(&a.1))` and
`ip_list.sort_by(|a, b| b.1.cmp(&a.1))` calls trip the
`clippy::unnecessary_sort_by` lint under the current rust-clippy.
Converted to the suggested `sort_by_key(|entry| std::cmp::Reverse(entry.1))`
form, which is equivalent behaviour (descending sort on `.1`) and
expresses intent more clearly.

This is the single clippy warning blocking Quick Checks on PRs #924 and
#925 — once it lands those CIs go green (modulo the separately-tracked
RUSTSEC AWS-LC bundle).

Test plan
- cargo clippy --workspace --all-targets --all-features -- -D warnings
  (clean)
joshrotenberg added a commit that referenced this pull request May 28, 2026
Both `cloud_secret_env_prefers_canonical_name` and
`cloud_secret_env_falls_back_to_alias` (added in #913) mutate the same
process-wide env vars (`REDIS_CLOUD_SECRET_KEY` and
`REDIS_CLOUD_API_SECRET`). cargo test runs in parallel by default, so
when one test sets `REDIS_CLOUD_SECRET_KEY=canonical-secret` and the
other expects that key to be unset, whichever wins the race gets the
wrong env state and fails.

Observed symptom on PR #924's CI:

    state::tests::cloud_secret_env_falls_back_to_alias
      left:  "canonical-secret"
      right: "alias-secret"

Reproduced locally on `main` — the failing test alternates between the
two depending on scheduling. Five consecutive runs with the fix all
pass; serial-only runs already passed.

Fix: annotate both tests with `#[serial_test::serial(cloud_secret_env)]`
to put them in the same named serialization group. `serial_test` is
already a workspace dev-dep used by `redisctl-core/src/config/config.rs`
for the same reason; this just adds it to `redisctl-mcp`'s dev-deps
and applies the standard pattern.

Test plan
- cargo fmt --all -- --check
- cargo test -p redisctl-mcp --features cloud --lib state::tests::cloud_secret
  (run 5x in a loop; all green)
joshrotenberg added a commit that referenced this pull request May 28, 2026
Both `cloud_secret_env_prefers_canonical_name` and
`cloud_secret_env_falls_back_to_alias` (added in #913) mutate the same
process-wide env vars (`REDIS_CLOUD_SECRET_KEY` and
`REDIS_CLOUD_API_SECRET`). cargo test runs in parallel by default, so
when one test sets `REDIS_CLOUD_SECRET_KEY=canonical-secret` and the
other expects that key to be unset, whichever wins the race gets the
wrong env state and fails.

Observed symptom on PR #924's CI:

    state::tests::cloud_secret_env_falls_back_to_alias
      left:  "canonical-secret"
      right: "alias-secret"

Reproduced locally on `main` — the failing test alternates between the
two depending on scheduling. Five consecutive runs with the fix all
pass; serial-only runs already passed.

Fix: annotate both tests with `#[serial_test::serial(cloud_secret_env)]`
to put them in the same named serialization group. `serial_test` is
already a workspace dev-dep used by `redisctl-core/src/config/config.rs`
for the same reason; this just adds it to `redisctl-mcp`'s dev-deps
and applies the standard pattern.

Test plan
- cargo fmt --all -- --check
- cargo test -p redisctl-mcp --features cloud --lib state::tests::cloud_secret
  (run 5x in a loop; all green)
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