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:
Patryk Wrobel
2024-01-18 18:45:20 +01:00
parent 1cd676e438
commit 9483d149af
4 changed files with 22 additions and 11 deletions

View File

@@ -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)

View File

@@ -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;

View File

@@ -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();

View File

@@ -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();
});