database: Use nop_large_partition_handler to avoid self-reporting

Currently nop_large_partition_handler is only used in tests, but it
can also be used avoid self-reporting.

Tests: unit(Release)

I also tested starting scylla with
--compaction-large-partition-warning-threshold-mb=0.

Signed-off-by: Rafael Ávila de Espíndola <espindola@scylladb.com>
Message-Id: <20190123205059.39573-1-espindola@scylladb.com>
This commit is contained in:
Rafael Ávila de Espíndola
2019-01-23 12:50:59 -08:00
committed by Duarte Nunes
parent 4882f29f82
commit f7d1dc16d4
3 changed files with 14 additions and 5 deletions

View File

@@ -162,6 +162,7 @@ database::database(const db::config& cfg, database_config dbcfg)
, _enable_incremental_backups(cfg.incremental_backups())
, _querier_cache(_read_concurrency_sem, dbcfg.available_memory * 0.04)
, _large_partition_handler(std::make_unique<db::cql_table_large_partition_handler>(_cfg->compaction_large_partition_warning_threshold_mb()*1024*1024))
, _nop_large_partition_handler(std::make_unique<db::nop_large_partition_handler>())
, _result_memory_limiter(dbcfg.available_memory / 10)
, _data_listeners(std::make_unique<db::data_listeners>(*this))
{
@@ -817,7 +818,14 @@ keyspace::make_column_family_config(const schema& s, const database& db) const {
cfg.streaming_scheduling_group = _config.streaming_scheduling_group;
cfg.statement_scheduling_group = _config.statement_scheduling_group;
cfg.enable_metrics_reporting = db_config.enable_keyspace_column_family_metrics();
cfg.large_partition_handler = db.get_large_partition_handler();
// avoid self-reporting
if (s.ks_name() == "system" && s.cf_name() == db::system_keyspace::LARGE_PARTITIONS) {
cfg.large_partition_handler = db.get_nop_large_partition_handler();
} else {
cfg.large_partition_handler = db.get_large_partition_handler();
}
cfg.view_update_concurrency_semaphore = _config.view_update_concurrency_semaphore;
cfg.view_update_concurrency_semaphore_limit = _config.view_update_concurrency_semaphore_limit;
cfg.data_listeners = &db.data_listeners();

View File

@@ -1272,6 +1272,7 @@ private:
query::querier_cache _querier_cache;
std::unique_ptr<db::large_partition_handler> _large_partition_handler;
std::unique_ptr<db::large_partition_handler> _nop_large_partition_handler;
query::result_memory_limiter _result_memory_limiter;
@@ -1423,6 +1424,10 @@ public:
return _large_partition_handler.get();
}
db::large_partition_handler* get_nop_large_partition_handler() const {
return _nop_large_partition_handler.get();
}
future<> flush_all_memtables();
// See #937. Truncation now requires a callback to get a time stamp

View File

@@ -55,10 +55,6 @@ logging::logger cql_table_large_partition_handler::large_partition_logger("large
future<> cql_table_large_partition_handler::update_large_partitions(const schema& s, const sstring& sstable_name, const sstables::key& key, uint64_t partition_size) const {
static const sstring req = format("INSERT INTO system.{} (keyspace_name, table_name, sstable_name, partition_size, partition_key, compaction_time) VALUES (?, ?, ?, ?, ?, ?) USING TTL 2592000",
db::system_keyspace::LARGE_PARTITIONS);
// avoid self-reporting
if (s.ks_name() == "system" && s.cf_name() == db::system_keyspace::LARGE_PARTITIONS) {
return make_ready_future<>();
}
auto ks_name = s.ks_name();
auto cf_name = s.cf_name();
std::ostringstream oss;