table: futurize disable_auto_compactions

So it can stop ongoing compaction and wait
for them to complete.

Signed-off-by: Benny Halevy <bhalevy@scylladb.com>
This commit is contained in:
Benny Halevy
2021-11-29 11:08:05 +02:00
parent e3f922c48b
commit b60d697084
8 changed files with 12 additions and 11 deletions

View File

@@ -876,7 +876,7 @@ void set_column_family(http_context& ctx, routes& r) {
return ctx.db.invoke_on(0, [&ctx, req = std::move(req)] (database& db) {
auto g = database::autocompaction_toggle_guard(db);
return foreach_column_family(ctx, req->param["name"], [](column_family &cf) {
cf.disable_auto_compaction();
return cf.disable_auto_compaction();
}).then([g = std::move(g)] {
return make_ready_future<json::json_return_type>(json_void());
});

View File

@@ -153,7 +153,7 @@ future<json::json_return_type> set_tables_autocompaction(http_context& ctx, serv
if (enabled) {
cf.enable_auto_compaction();
} else {
cf.disable_auto_compaction();
return cf.disable_auto_compaction();
}
return make_ready_future<>();
});

View File

@@ -947,7 +947,7 @@ public:
void drop_hit_rate(gms::inet_address addr);
void enable_auto_compaction();
void disable_auto_compaction();
future<> disable_auto_compaction();
bool is_auto_compaction_disabled_by_user() const {
return _compaction_disabled_by_user;
}

View File

@@ -503,8 +503,7 @@ future<> distributed_loader::populate_column_family(distributed<database>& db, s
db.invoke_on_all([&global_table, generation] (database& db) {
global_table->update_sstables_known_generation(generation);
global_table->disable_auto_compaction();
return make_ready_future<>();
return global_table->disable_auto_compaction();
}).get();
reshard(directory, db, ks, cf, [&global_table, sstdir, sst_version] (shard_id shard) mutable {

View File

@@ -2165,7 +2165,7 @@ table::enable_auto_compaction() {
_compaction_disabled_by_user = false;
}
void
future<>
table::disable_auto_compaction() {
// XXX: mute backlog. When we disable background compactions
// for the table, we must also disable current backlog of the
@@ -2194,6 +2194,8 @@ table::disable_auto_compaction() {
// - it will break computation of major compaction descriptor
// for new submissions
_compaction_disabled_by_user = true;
// FIXME: stop ongoing compactions
return make_ready_future<>();
}
flat_mutation_reader

View File

@@ -4763,7 +4763,7 @@ static future<> test_clustering_filtering_3_with_compaction_strategy(const std::
cquery_nofail(e, format("CREATE TABLE cf(pk text, ck int, v text, PRIMARY KEY(pk, ck)) WITH COMPACTION = {{'class': '{}'}}", cs));
e.db().invoke_on_all([] (database& db) {
auto& table = db.find_column_family("ks", "cf");
table.disable_auto_compaction();
return table.disable_auto_compaction();
}).get();
cquery_nofail(e, "INSERT INTO cf(pk, ck, v) VALUES ('a', 1, 'a1')");
e.db().invoke_on_all([] (database& db) { return db.flush_all_memtables(); }).get();

View File

@@ -3522,7 +3522,7 @@ SEASTAR_TEST_CASE(autocompaction_control_test) {
// auto compaction is enabled by default
BOOST_REQUIRE(!cf->is_auto_compaction_disabled_by_user());
// disable auto compaction by user
cf->disable_auto_compaction();
cf->disable_auto_compaction().get();
// check it is disabled
BOOST_REQUIRE(cf->is_auto_compaction_disabled_by_user());

View File

@@ -490,7 +490,7 @@ SEASTAR_TEST_CASE(sstable_directory_shared_sstables_reshard_correctly) {
e.db().invoke_on_all([] (database& db) {
auto& cf = db.find_column_family("ks", "cf");
cf.disable_auto_compaction();
return cf.disable_auto_compaction();
}).get();
unsigned num_sstables = 10 * smp::count;
@@ -539,7 +539,7 @@ SEASTAR_TEST_CASE(sstable_directory_shared_sstables_reshard_distributes_well_eve
e.db().invoke_on_all([] (database& db) {
auto& cf = db.find_column_family("ks", "cf");
cf.disable_auto_compaction();
return cf.disable_auto_compaction();
}).get();
unsigned num_sstables = 10 * smp::count;
@@ -588,7 +588,7 @@ SEASTAR_TEST_CASE(sstable_directory_shared_sstables_reshard_respect_max_threshol
e.db().invoke_on_all([] (database& db) {
auto& cf = db.find_column_family("ks", "cf");
cf.disable_auto_compaction();
return cf.disable_auto_compaction();
}).get();
unsigned num_sstables = (cf.schema()->max_compaction_threshold() + 1) * smp::count;