Files
scylladb/test/nodetool
Pavel Emelyanov 36234e18ee Merge '[Backport 2025.4] Support local primary-replica-only for native restore' from Scylladb[bot]
This PR extends the restore API so that it accepts primary_replica_only as parameter and it combines the concepts of primary-replica-only with scoped streaming so that with:
- `scope=all primary_replica_only=true` The restoring node will stream to the global primary replica only
- `scope=dc primary_replica_only=true` The restoring node will stream to the local primary replica only.
- `scope=rack primary_replica_only=true` The restoring node will stream only to the primary replica from within its own rack (with rf=#racks, the restoring node will stream only to itself)
- `scope=node primary_replica_only=true` is not allowed, the restoring node will always stream only to itself so the primary_replica_only parameter wouldn't make sense.

The PR also adjusts the `nodetool refresh` restriction on running restore with both primary_replica_only and scope, it adds primary_replica_only to `nodetool restore` and it adds cluster tests for primary replica within scope.

Fixes #26584

- (cherry picked from commit 965a16ce6f)

- (cherry picked from commit 136b45d657)

- (cherry picked from commit 83aee954b4)

- (cherry picked from commit c1b3fe30be)

- (cherry picked from commit d4e43bd34c)

- (cherry picked from commit 817fdadd49)

- (cherry picked from commit a04ebb829c)

Parent PR: #26609

Closes scylladb/scylladb#27011

* github.com:scylladb/scylladb:
  Add cluster tests for checking scoped primary_replica_only streaming
  Improve choice distribution for primary replica
  Refactor cluster/object_store/test_backup
  nodetool restore: add primary-replica-only option
  nodetool refresh: Enable scope={all,dc,rack} with primary_replica_only
  Enable scoped primary replica only streaming
  Support primary_replica_only for native restore API
2025-11-24 13:37:25 +03:00
..

Front-end tests for nodetool

The tests in this directory exercise the nodetool client itself, mocking the API backend. This allows for testing all combinations of all supported options, and still keeping the tests quick.

The tests can be run against both the scylla-native nodetool (default), or the inherited, C*-based nodetool.

Run all tests against the scylla-native nodetool:

pytest --nodetool=scylla .

You can specify the path to the scylla binary with the --nodetool-path option. By default the tests will pick up the ScyllaDB executable, that is appropriate for the --mode option (defaults to dev).

Run all tests against the C* nodetool:

pytest --nodetool=cassandra .

Again, you can specify the path to the nodetool binary with --nodetool-path option. By default, <scylladb.git>/tools/java/bin/nodetool will be used. When running the test against the java-nodeotol, you can specify the path to JMX with --jmx-path option. By default, <scylladb.git>/tools/jmx/scripts/scylla-jmx will be used.

If you add new tests, make sure to run all tess against both nodetool implementations, to avoid regressions. Note that CI/promotion will only run the tests against the scylla-native nodetool.