ALTER tablets-enabled KEYSPACES (KS) may fail due to group0_concurrent_modification, in which case it's repeated by a for loop surrounding the code. But because raft's add_entry consumes the raft's guard (by std::move'ing the guard object), retries of ALTER KS will use a moved-from guard object, which is UB, potentially a crash. The fix is to remove the before mentioned for loop altogether and rethrow the exception, as the rf_change event will be repeated by the topology state machine if it receives the concurrent modification exception, because the event will remain present in the global requests queue, hence it's going to be executed as the very next event. Note: refactor is implemented in the follow-up commit. Fixes: https://github.com/scylladb/scylladb/issues/21102 Should be backported to every 6.x branch, as it may lead to a crash. (cherry picked from commitde511f56ac) (cherry picked from commit3f4c8a30e3) (cherry picked from commit522bede8ec) Refs https://github.com/scylladb/scylladb/pull/21121 Closes scylladb/scylladb#21256 * github.com:scylladb/scylladb: test: topology: add disable_schema_agreement_wait utility function test: add UT to test retrying ALTER tablets KEYSPACE cql/tablets: fix indentation in `rf_change` event handler cql/tablets: fix retrying ALTER tablets KEYSPACE
Scylla in-source tests.
For details on how to run the tests, see docs/dev/testing.md
Shared C++ utils, libraries are in lib/, for Python - pylib/
alternator - Python tests which connect to a single server and use the DynamoDB API unit, boost, raft - unit tests in C++ cql-pytest - Python tests which connect to a single server and use CQL topology* - tests that set up clusters and add/remove nodes cql - approval tests that use CQL and pre-recorded output rest_api - tests for Scylla REST API Port 9000 scylla-gdb - tests for scylla-gdb.py helper script nodetool - tests for C++ implementation of nodetool
If you can use an existing folder, consider adding your test to it. New folders should be used for new large categories/subsystems, or when the test environment is significantly different from some existing suite, e.g. you plan to start scylladb with different configuration, and you intend to add many tests and would like them to reuse an existing Scylla cluster (clusters can be reused for tests within the same folder).
To add a new folder, create a new directory, and then
copy & edit its suite.ini.