From b60d697084d7a435aef9bf4fbaf6f2d97f3868ef Mon Sep 17 00:00:00 2001 From: Benny Halevy Date: Mon, 29 Nov 2021 11:08:05 +0200 Subject: [PATCH] table: futurize disable_auto_compactions So it can stop ongoing compaction and wait for them to complete. Signed-off-by: Benny Halevy --- api/column_family.cc | 2 +- api/storage_service.cc | 2 +- database.hh | 2 +- distributed_loader.cc | 3 +-- table.cc | 4 +++- test/boost/cql_query_test.cc | 2 +- test/boost/sstable_compaction_test.cc | 2 +- test/boost/sstable_directory_test.cc | 6 +++--- 8 files changed, 12 insertions(+), 11 deletions(-) diff --git a/api/column_family.cc b/api/column_family.cc index 14eb96a972..b26b9e453d 100644 --- a/api/column_family.cc +++ b/api/column_family.cc @@ -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_void()); }); diff --git a/api/storage_service.cc b/api/storage_service.cc index a88689cb40..ad116c4c2b 100644 --- a/api/storage_service.cc +++ b/api/storage_service.cc @@ -153,7 +153,7 @@ future 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<>(); }); diff --git a/database.hh b/database.hh index 6bad18017c..399afe905c 100644 --- a/database.hh +++ b/database.hh @@ -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; } diff --git a/distributed_loader.cc b/distributed_loader.cc index da69725cb2..62ba8cc7f1 100644 --- a/distributed_loader.cc +++ b/distributed_loader.cc @@ -503,8 +503,7 @@ future<> distributed_loader::populate_column_family(distributed& 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 { diff --git a/table.cc b/table.cc index 6f8ecc918d..f2f4ba1e4e 100644 --- a/table.cc +++ b/table.cc @@ -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 diff --git a/test/boost/cql_query_test.cc b/test/boost/cql_query_test.cc index 920ae88908..e8984ed4af 100644 --- a/test/boost/cql_query_test.cc +++ b/test/boost/cql_query_test.cc @@ -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(); diff --git a/test/boost/sstable_compaction_test.cc b/test/boost/sstable_compaction_test.cc index b7de6e8a3f..4e97399836 100644 --- a/test/boost/sstable_compaction_test.cc +++ b/test/boost/sstable_compaction_test.cc @@ -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()); diff --git a/test/boost/sstable_directory_test.cc b/test/boost/sstable_directory_test.cc index 4824c80f66..3ceb7e7808 100644 --- a/test/boost/sstable_directory_test.cc +++ b/test/boost/sstable_directory_test.cc @@ -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;