Files
scylladb/sstables/object_storage_client.hh
Calle Wilund 144b550e4f object_storage_client: Add object_name wrapper type
Remaining S3-centric, but abstracting the object name to
possible implementations not quite formatted the same.
2025-10-13 08:53:25 +00:00

99 lines
2.7 KiB
C++

/*
* Copyright (C) 2025-present ScyllaDB
*/
/*
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
*/
#pragma once
#include <string>
#include <optional>
#include <filesystem>
#include <seastar/core/future.hh>
#include <seastar/core/semaphore.hh>
#include <fmt/core.h>
#include "utils/lister.hh"
namespace seastar {
class abort_source;
class data_sink;
class data_source;
class file;
}
namespace db {
class object_storage_endpoint_param;
}
namespace utils {
class upload_progress;
}
using namespace seastar;
class memory_data_sink_buffers;
class abstract_lister;
namespace sstables {
class generation_type;
class object_name {
std::string _name;
public:
object_name(const object_name&);
object_name(object_name&&);
object_name(std::string_view bucket, std::string_view prefix, std::string_view type);
object_name(std::string_view bucket, const generation_type&, std::string_view type);
object_name(std::string_view bucket, std::string_view object);
std::string_view bucket() const;
std::string_view object() const;
const std::string& str() const {
return _name;
}
operator const std::string&() const {
return str();
}
operator std::string() && {
return std::move(_name);
}
};
class object_storage_client {
public:
virtual ~object_storage_client() = default;
virtual future<> put_object(object_name, ::memory_data_sink_buffers bufs, abort_source* = nullptr) = 0;
virtual future<> delete_object(object_name) = 0;
virtual file make_readable_file(object_name, abort_source* = nullptr) = 0;
virtual data_sink make_data_upload_sink(object_name, std::optional<unsigned> max_parts_per_piece, abort_source* = nullptr) = 0;
virtual data_sink make_upload_sink(object_name, abort_source* = nullptr) = 0;
virtual data_source make_download_source(object_name, abort_source* = nullptr) = 0;
virtual abstract_lister make_object_lister(std::string bucket, std::string prefix, lister::filter_type) = 0;
virtual future<> upload_file(std::filesystem::path path, object_name, utils::upload_progress& up, seastar::abort_source* = nullptr) = 0;
virtual future<> update_config(const db::object_storage_endpoint_param&) = 0;
virtual future<> close() = 0;
};
using shard_client_factory = std::function<shared_ptr<object_storage_client>(std::string)>;
shared_ptr<object_storage_client> make_object_storage_client(const db::object_storage_endpoint_param&, semaphore&, shard_client_factory);
}
template <>
struct fmt::formatter<sstables::object_name> : fmt::formatter<std::string_view> {
auto format(const sstables::object_name&, fmt::format_context& ctx) const -> decltype(ctx.out());
};