Files
scylladb/tests/truncation_migration_test.cc
2019-02-13 09:08:12 +00:00

85 lines
3.0 KiB
C++

/*
* Copyright (C) 2019 ScyllaDB
*/
/*
* This file is part of Scylla.
*
* Scylla is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Scylla is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Scylla. If not, see <http://www.gnu.org/licenses/>.
*/
#include <string_view>
#include <seastar/testing/test_case.hh>
#include "cql_test_env.hh"
#include "cql_assertions.hh"
#include "db/config.hh"
#include "db/system_keyspace.hh"
#include "service/storage_service.hh"
#include "service/storage_proxy.hh"
#include "utils/joinpoint.hh"
SEASTAR_TEST_CASE(test_truncation_record_migration) {
cql_test_config cfg;
cfg.disabled_features = { "TRUNCATION_TABLE" };
return do_with_cql_env_thread([](cql_test_env& e) {
e.execute_cql("CREATE TABLE test (a int, b int, PRIMARY KEY (a))").get();
e.execute_cql("INSERT INTO test (a, b) VALUES (1, 100);").get();
assert_that(e.execute_cql("SELECT * FROM test").get0())
.is_rows().with_size(1);
assert_that(e.execute_cql("SELECT * FROM system.truncated").get0())
.is_rows().is_empty();
assert_that(e.execute_cql("SELECT truncated_at FROM system.local WHERE key = 'local'").get0())
.is_rows().is_null();
// Do a truncation
// Cannot do via cql, because we don't have an actual functioning rpc active.
do_with(utils::make_joinpoint([] { return db_clock::now();}), [](auto& tsf) {
return service::get_storage_proxy().invoke_on_all([&tsf](service::storage_proxy& sp) {
return sp.get_db().local().truncate("ks", "test", [&tsf] { return tsf.value(); });
});
}).get();
assert_that(e.execute_cql("SELECT * FROM test").get0())
.is_rows().is_empty();
assert_that(e.execute_cql("SELECT * FROM system.truncated").get0())
.is_rows().is_not_empty();
// should also have created legacy record
assert_that(e.execute_cql("SELECT truncated_at FROM system.local WHERE key = 'local'").get0())
.is_rows().is_not_null();
// Now enable truncation_table feature. Should remove the
// legacy records.
service::get_storage_service().invoke_on_all([] (service::storage_service& ss) {
ss.set_disabled_features();
ss.enable_all_features();
}).get();
db::system_keyspace::wait_for_truncation_record_migration_complete().get();
assert_that(e.execute_cql("SELECT truncated_at FROM system.local WHERE key = 'local'").get0())
.is_rows().is_null();
}, cfg);
}