/* * Copyright (C) 2019-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #pragma once #include #include #include #include #include "utils/file_lock.hh" using namespace seastar; namespace db { class config; } namespace utils { class directories { public: class set { public: void add(fs::path path); void add(sstring path); void add(std::vector path); void add_sharded(sstring path); const std::set get_paths() const { return _paths; } private: std::set _paths; }; using recursive = bool_class; directories(bool developer_mode); future<> create_and_verify(set dir_set, recursive recursive = recursive::yes); static future<> verify_owner_and_mode(std::filesystem::path path, recursive recursive = recursive::yes); static future<> verify_owner_and_mode_of_data_dir(set dir_set); private: bool _developer_mode; std::vector _locks; static future<> do_verify_owner_and_mode(std::filesystem::path path, recursive, int level, std::function do_verify_subpath = {}); }; } // namespace utils