database: Run system table flushes in the main scheduling group

memtable flushes for system and regular region groups run under the
memtable_scheduling_group, but the controller adjusts shares based on
the occupancy of the regular region group.

It can happen that regular is not under pressure, but system is. In
this case the controller will incorrectly assign low shares to the
memtable flush of system. This may result in high latency and low
throughput for writes in the system group.

I observed writes to the sytem keyspace timing out (on scylla-2.3-rc2)
in the dtest: limits_test.py:TestLimits.max_cells_test, which went
away after this.

Fixes #3717.

Message-Id: <1535016026-28006-1-git-send-email-tgrabiec@scylladb.com>
(cherry picked from commit 10f6b125c8)
This commit is contained in:
Tomasz Grabiec
2018-08-23 11:20:26 +02:00
parent 473b9aec65
commit 702f6ee1b7

View File

@@ -1635,6 +1635,9 @@ void make(database& db, bool durable, bool volatile_testing_only) {
auto cfg = ks.make_column_family_config(*table, db.get_config(), db.get_large_partition_handler());
if (maybe_write_in_user_memory(table, db)) {
cfg.dirty_memory_manager = &db._dirty_memory_manager;
} else {
cfg.memtable_scheduling_group = default_scheduling_group();
cfg.memtable_to_cache_scheduling_group = default_scheduling_group();
}
db.add_column_family(ks, table, std::move(cfg));
maybe_add_virtual_reader(table, db);