Use utils::directories to get dirs paths in replica::database
This change replaces the usage of db::config with usage of utils::directories to get dirs paths in replica::database class. Moreover, it adjusts tests that require construction of replica::database - its constructor has been changed to accept utils::directories object. Refs: scylladb#5626 Signed-off-by: Patryk Wrobel <patryk.wrobel@scylladb.com>
This commit is contained in:
2
main.cc
2
main.cc
@@ -1040,7 +1040,7 @@ To start the scylla server proper, simply invoke as: scylla server (or just scyl
|
||||
|
||||
supervisor::notify("starting database");
|
||||
debug::the_database = &db;
|
||||
db.start(std::ref(*cfg), dbcfg, std::ref(mm_notifier), std::ref(feature_service), std::ref(token_metadata),
|
||||
db.start(std::ref(*cfg), std::ref(*dirs), dbcfg, std::ref(mm_notifier), std::ref(feature_service), std::ref(token_metadata),
|
||||
std::ref(cm), std::ref(sstm), std::ref(wasm), std::ref(sst_dir_semaphore), utils::cross_shard_barrier()).get();
|
||||
auto stop_database_and_sstables = defer_verbose_shutdown("database", [&db] {
|
||||
// #293 - do not stop anything - not even db (for real)
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "db/view/view_update_generator.hh"
|
||||
#include "multishard_mutation_query.hh"
|
||||
|
||||
#include "utils/directories.hh"
|
||||
#include "utils/human_readable.hh"
|
||||
#include "utils/fmt-compat.hh"
|
||||
#include "utils/error_injection.hh"
|
||||
@@ -307,12 +308,13 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
database::database(const db::config& cfg, database_config dbcfg, service::migration_notifier& mn, gms::feature_service& feat, const locator::shared_token_metadata& stm,
|
||||
database::database(const db::config& cfg, const utils::directories& dirs, database_config dbcfg, service::migration_notifier& mn, gms::feature_service& feat, const locator::shared_token_metadata& stm,
|
||||
compaction_manager& cm, sstables::storage_manager& sstm, wasm::manager& wasm, sharded<sstables::directory_semaphore>& sst_dir_sem, utils::cross_shard_barrier barrier)
|
||||
: _stats(make_lw_shared<db_stats>())
|
||||
, _user_types(std::make_shared<db_user_types_storage>(*this))
|
||||
, _cl_stats(std::make_unique<cell_locker_stats>())
|
||||
, _cfg(cfg)
|
||||
, _dirs(dirs)
|
||||
// Allow system tables a pool of 10 MB memory to write, but never block on other regions.
|
||||
, _system_dirty_memory_manager(*this, 10 << 20, cfg.unspooled_dirty_soft_limit(), default_scheduling_group())
|
||||
, _dirty_memory_manager(*this, dbcfg.available_memory * 0.50, cfg.unspooled_dirty_soft_limit(), dbcfg.statement_scheduling_group)
|
||||
@@ -813,7 +815,7 @@ void database::init_schema_commitlog() {
|
||||
assert(this_shard_id() == 0);
|
||||
|
||||
db::commitlog::config c;
|
||||
c.commit_log_location = _cfg.schema_commitlog_directory();
|
||||
c.commit_log_location = _dirs.get_schema_commitlog_dir();
|
||||
c.fname_prefix = db::schema_tables::COMMITLOG_FILENAME_PREFIX;
|
||||
c.metrics_category_name = "schema-commitlog";
|
||||
c.commitlog_total_space_in_mb = 2 * _cfg.schema_commitlog_segment_size_in_mb();
|
||||
@@ -840,7 +842,7 @@ future<> database::create_local_system_table(
|
||||
schema_ptr table, bool write_in_user_memory, locator::effective_replication_map_factory& erm_factory) {
|
||||
auto ks_name = table->ks_name();
|
||||
if (!has_keyspace(ks_name)) {
|
||||
bool durable = _cfg.data_file_directories().size() > 0;
|
||||
bool durable = _dirs.get_data_file_dirs().size() > 0;
|
||||
auto ksm = make_lw_shared<keyspace_metadata>(ks_name,
|
||||
"org.apache.cassandra.locator.LocalStrategy",
|
||||
std::map<sstring, sstring>{},
|
||||
@@ -2090,10 +2092,11 @@ future<> database::apply_hint(schema_ptr s, const frozen_mutation& m, tracing::t
|
||||
|
||||
keyspace::config
|
||||
database::make_keyspace_config(const keyspace_metadata& ksm) {
|
||||
const std::vector<seastar::sstring> data_file_directories = _dirs.get_data_file_dirs();
|
||||
keyspace::config cfg;
|
||||
if (_cfg.data_file_directories().size() > 0) {
|
||||
cfg.datadir = format("{}/{}", _cfg.data_file_directories()[0], ksm.name());
|
||||
for (auto& extra : _cfg.data_file_directories()) {
|
||||
if (data_file_directories.size() > 0) {
|
||||
cfg.datadir = format("{}/{}", data_file_directories[0], ksm.name());
|
||||
for (auto& extra : data_file_directories) {
|
||||
cfg.all_datadirs.push_back(format("{}/{}", extra, ksm.name()));
|
||||
}
|
||||
cfg.enable_disk_writes = !_cfg.enable_in_memory_data_store();
|
||||
@@ -2593,7 +2596,7 @@ static std::pair<sstring, table_id> extract_cf_name_and_uuid(const sstring& dire
|
||||
}
|
||||
|
||||
future<std::vector<database::snapshot_details_result>> database::get_snapshot_details() {
|
||||
std::vector<sstring> data_dirs = _cfg.data_file_directories();
|
||||
std::vector<sstring> data_dirs = _dirs.get_data_file_dirs();
|
||||
std::vector<database::snapshot_details_result> details;
|
||||
|
||||
for (auto& datadir : data_dirs) {
|
||||
@@ -2663,7 +2666,7 @@ future<std::vector<database::snapshot_details_result>> database::get_snapshot_de
|
||||
// For the filesystem operations, this code will assume that all keyspaces are visible in all shards
|
||||
// (as we have been doing for a lot of the other operations, like the snapshot itself).
|
||||
future<> database::clear_snapshot(sstring tag, std::vector<sstring> keyspace_names, const sstring& table_name) {
|
||||
std::vector<sstring> data_dirs = _cfg.data_file_directories();
|
||||
std::vector<sstring> data_dirs = _dirs.get_data_file_dirs();
|
||||
std::unordered_set<sstring> ks_names_set(keyspace_names.begin(), keyspace_names.end());
|
||||
auto table_name_param = table_name;
|
||||
|
||||
|
||||
@@ -79,6 +79,8 @@ namespace s3 { struct endpoint_config; }
|
||||
|
||||
namespace wasm { class manager; }
|
||||
|
||||
namespace utils { class directories; }
|
||||
|
||||
namespace service {
|
||||
class storage_proxy;
|
||||
class storage_service;
|
||||
@@ -1418,6 +1420,7 @@ private:
|
||||
std::unique_ptr<cell_locker_stats> _cl_stats;
|
||||
|
||||
const db::config& _cfg;
|
||||
const utils::directories& _dirs;
|
||||
|
||||
dirty_memory_manager _system_dirty_memory_manager;
|
||||
dirty_memory_manager _dirty_memory_manager;
|
||||
@@ -1567,7 +1570,7 @@ public:
|
||||
// (keyspace/table definitions, column mappings etc.)
|
||||
future<> parse_system_tables(distributed<service::storage_proxy>&, sharded<db::system_keyspace>&);
|
||||
|
||||
database(const db::config&, database_config dbcfg, service::migration_notifier& mn, gms::feature_service& feat, const locator::shared_token_metadata& stm,
|
||||
database(const db::config&, const utils::directories& dirs, database_config dbcfg, service::migration_notifier& mn, gms::feature_service& feat, const locator::shared_token_metadata& stm,
|
||||
compaction_manager& cm, sstables::storage_manager& sstm, wasm::manager& wasm, sharded<sstables::directory_semaphore>& sst_dir_sem, utils::cross_shard_barrier barrier = utils::cross_shard_barrier(utils::cross_shard_barrier::solo{}) /* for single-shard usage */);
|
||||
database(database&&) = delete;
|
||||
~database();
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
#include <boost/range/algorithm/transform.hpp>
|
||||
#include <iterator>
|
||||
#include <optional>
|
||||
#include <random>
|
||||
#include <seastar/core/thread.hh>
|
||||
#include <seastar/util/defer.hh>
|
||||
@@ -62,6 +63,7 @@
|
||||
#include "repair/row_level.hh"
|
||||
#include "utils/class_registrator.hh"
|
||||
#include "utils/cross-shard-barrier.hh"
|
||||
#include "utils/directories.hh"
|
||||
#include "streaming/stream_manager.hh"
|
||||
#include "debug.hh"
|
||||
#include "db/schema_tables.hh"
|
||||
@@ -170,6 +172,7 @@ private:
|
||||
sharded<service::direct_fd_pinger> _fd_pinger;
|
||||
sharded<cdc::cdc_service> _cdc;
|
||||
|
||||
std::optional<utils::directories> _dirs;
|
||||
service::raft_group0_client* _group0_client;
|
||||
|
||||
private:
|
||||
@@ -478,6 +481,8 @@ private:
|
||||
create_directories((cfg->view_hints_directory() + "/" + std::to_string(i)).c_str());
|
||||
}
|
||||
|
||||
_dirs.emplace(*cfg);
|
||||
|
||||
if (!cfg->max_memory_for_unlimited_query_soft_limit.is_set()) {
|
||||
cfg->max_memory_for_unlimited_query_soft_limit.set(uint64_t(query::result_memory_limiter::unlimited_result_size));
|
||||
}
|
||||
@@ -579,7 +584,7 @@ private:
|
||||
auto stop_wasm = defer([this] { _wasm.stop().get(); });
|
||||
|
||||
|
||||
_db.start(std::ref(*cfg), dbcfg, std::ref(_mnotifier), std::ref(_feature_service), std::ref(_token_metadata), std::ref(_cm), std::ref(_sstm), std::ref(_wasm), std::ref(_sst_dir_semaphore), utils::cross_shard_barrier()).get();
|
||||
_db.start(std::ref(*cfg), std::ref(*_dirs), dbcfg, std::ref(_mnotifier), std::ref(_feature_service), std::ref(_token_metadata), std::ref(_cm), std::ref(_sstm), std::ref(_wasm), std::ref(_sst_dir_semaphore), utils::cross_shard_barrier()).get();
|
||||
auto stop_db = defer([this] {
|
||||
_db.stop().get();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user