Files
scylladb/test/boost/schema_changes_test.cc
Alejo Sanchez 8b1968cfbb test/boost/schema_changes_test: split long-running test
Split long running test test_schema_changes in 3 parts, one for each
writable_sstable_versions so it can be run in parallel by test.py.

Add static checks to alert if the array of types changed.

Original test takes around 24 minutes in debug mode, and each new split
test takes around 8 minutes.

Refs #13905

Signed-off-by: Alejo Sanchez <alejo.sanchez@scylladb.com>

Closes #14367
2023-06-26 11:24:07 +03:00

85 lines
3.2 KiB
C++

/*
* Copyright (C) 2015-present ScyllaDB
*/
/*
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#include <boost/test/unit_test.hpp>
#include "sstables/generation_type.hh"
#include "test/lib/scylla_test_case.hh"
#include <seastar/testing/thread_test_case.hh>
#include <seastar/core/thread.hh>
#include "sstables/sstables.hh"
#include "timestamp.hh"
#include "schema/schema_builder.hh"
#include "test/lib/mutation_source_test.hh"
#include "test/lib/flat_mutation_reader_assertions.hh"
#include "test/lib/sstable_utils.hh"
using namespace sstables;
using namespace std::chrono_literals;
constexpr std::array<sstable_version_types, 3> expected_writable_sstable_versions = {
sstable_version_types::mc,
sstable_version_types::md,
sstable_version_types::me,
};
// Add/remove test cases if writable_sstable_versions changes
static_assert(writable_sstable_versions.size() == expected_writable_sstable_versions.size(), "writable_sstable_versions changed");
static_assert(writable_sstable_versions[0] == expected_writable_sstable_versions[0], "writable_sstable_versions changed");
static_assert(writable_sstable_versions[1] == expected_writable_sstable_versions[1], "writable_sstable_versions changed");
static_assert(writable_sstable_versions[2] == expected_writable_sstable_versions[2], "writable_sstable_versions changed");
future <> test_schema_changes_int(sstable_version_types sstable_vtype) {
return sstables::test_env::do_with_async([] (sstables::test_env& env) {
std::map<schema_ptr, shared_sstable> cache;
for_each_schema_change([&] (schema_ptr base, const std::vector<mutation>& base_mutations,
schema_ptr changed, const std::vector<mutation>& changed_mutations) {
auto it = cache.find(base);
shared_sstable created_with_base_schema;
shared_sstable created_with_changed_schema;
if (it == cache.end()) {
created_with_base_schema = make_sstable_containing(env.make_sstable(base), base_mutations);
cache.emplace(base, created_with_base_schema);
} else {
created_with_base_schema = it->second;
}
created_with_changed_schema = env.reusable_sst(changed, created_with_base_schema).get();
const auto pr = dht::partition_range::make_open_ended_both_sides();
auto mr = assert_that(created_with_base_schema->as_mutation_source()
.make_reader_v2(changed, env.make_reader_permit(), pr, changed->full_slice()));
for (auto& m : changed_mutations) {
mr.produces(m);
}
mr.produces_end_of_stream();
mr = assert_that(created_with_changed_schema->as_mutation_source()
.make_reader_v2(changed, env.make_reader_permit(), pr, changed->full_slice()));
for (auto& m : changed_mutations) {
mr.produces(m);
}
mr.produces_end_of_stream();
});
});
}
SEASTAR_TEST_CASE(test_schema_changes_mc) {
return test_schema_changes_int(sstable_version_types::mc);
}
SEASTAR_TEST_CASE(test_schema_changes_md) {
return test_schema_changes_int(sstable_version_types::md);
}
SEASTAR_TEST_CASE(test_schema_changes_me) {
return test_schema_changes_int(sstable_version_types::me);
}