Switch directories::do_verify_owner_and_mode() from lister::scan_dir() to utils::directory_lister while preserving the previous hidden-entry behavior. Make do_verify_subpath use lister::filter_type directly so the verification helper can pass it straight into directory_lister, and keep a single yielding iteration loop for directory traversal. Minus one scan_dir user twards scan_dir removal from code. Signed-off-by: Pavel Emelyanov <xemul@scylladb.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Pavel Emelyanov <xemul@scylladb.com> Closes scylladb/scylladb#29064
57 lines
1.3 KiB
C++
57 lines
1.3 KiB
C++
/*
|
|
* Copyright (C) 2019-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <set>
|
|
#include <vector>
|
|
#include <seastar/core/future.hh>
|
|
#include <seastar/util/bool_class.hh>
|
|
#include "utils/file_lock.hh"
|
|
#include "utils/lister.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<sstring> path);
|
|
void add_sharded(sstring path);
|
|
|
|
const std::set<fs::path> get_paths() const {
|
|
return _paths;
|
|
}
|
|
|
|
private:
|
|
std::set<fs::path> _paths;
|
|
};
|
|
|
|
using recursive = bool_class<struct recursive_tag>;
|
|
|
|
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<file_lock> _locks;
|
|
|
|
static future<> do_verify_owner_and_mode(std::filesystem::path path, recursive, int level, lister::filter_type do_verify_subpath = [] (const fs::path&, const directory_entry&) { return true; });
|
|
};
|
|
|
|
} // namespace utils
|