Currently, push_back or emplace_back reallocate the last chunk before constructing the new element. If the arg passed to push_back/emplace_back is a reference to an existing element in the vector, reallocating the last chunk will invalidate the arg reference before it is used. This patch changes the order when reallocating the last chunk in reserve_for_emplace_back: First, a new chunk_ptr is allocated. Then, the back_element is emplaced in the newly allocated array. And only then, existing elements in the current last chunk are migrated to the new chunk. Eventually, the new chunk replaces the existing chunk. If no reservation is requried, the back element is emplaced "in place" in the current last chunk. Fixes scylladb/scylladb#18072 Closes scylladb/scylladb#18073 * github.com:scylladb/scylladb: test: chunked_managed_vector_test: add test_push_back_using_existing_element utils: chunked_vector: reserve_for_emplace_back: emplace before migrating existing elements utils: chunked_vector: push_back: call emplace_back utils: chunked_vector: define min_chunk_capacity utils: chunked*vector: use std::clamp
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.