diff --git a/database.cc b/database.cc index 558fbe5b9a..6ea2d9ac03 100644 --- a/database.cc +++ b/database.cc @@ -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(_cfg->compaction_large_partition_warning_threshold_mb()*1024*1024)) + , _nop_large_partition_handler(std::make_unique()) , _result_memory_limiter(dbcfg.available_memory / 10) , _data_listeners(std::make_unique(*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(); diff --git a/database.hh b/database.hh index 2c8ae0843b..20b10deaee 100644 --- a/database.hh +++ b/database.hh @@ -1272,6 +1272,7 @@ private: query::querier_cache _querier_cache; std::unique_ptr _large_partition_handler; + std::unique_ptr _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 diff --git a/db/large_partition_handler.cc b/db/large_partition_handler.cc index 255f96e9e0..56c9735135 100644 --- a/db/large_partition_handler.cc +++ b/db/large_partition_handler.cc @@ -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;