This commit is contained in:
@ -49,18 +49,18 @@ public:
|
|||||||
static constexpr const auto ring_size{5U};
|
static constexpr const auto ring_size{5U};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
boost::dynamic_bitset<> ring_state_;
|
|
||||||
std::size_t total_chunks_;
|
std::size_t total_chunks_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::condition_variable chunk_notify_;
|
|
||||||
mutable std::mutex chunk_mtx_;
|
mutable std::mutex chunk_mtx_;
|
||||||
|
std::condition_variable chunk_notify_;
|
||||||
std::mutex read_mtx_;
|
std::mutex read_mtx_;
|
||||||
std::unique_ptr<std::thread> reader_thread_;
|
std::unique_ptr<std::thread> reader_thread_;
|
||||||
std::size_t ring_begin_{};
|
std::size_t ring_begin_{};
|
||||||
std::array<data_buffer, ring_size> ring_data_;
|
std::array<data_buffer, ring_size> ring_data_;
|
||||||
std::size_t ring_end_{};
|
std::size_t ring_end_{};
|
||||||
std::size_t ring_pos_{};
|
std::size_t ring_pos_{};
|
||||||
|
boost::dynamic_bitset<> ring_state_{ring_size};
|
||||||
stop_type stop_requested_{false};
|
stop_type stop_requested_{false};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -32,13 +32,12 @@ class i_provider;
|
|||||||
class open_file_base : public i_closeable_open_file {
|
class open_file_base : public i_closeable_open_file {
|
||||||
public:
|
public:
|
||||||
open_file_base(std::uint64_t chunk_size, std::uint8_t chunk_timeout,
|
open_file_base(std::uint64_t chunk_size, std::uint8_t chunk_timeout,
|
||||||
filesystem_item fsi, i_provider &provider,
|
filesystem_item fsi, i_provider &provider, bool disable_io);
|
||||||
bool disable_io = false);
|
|
||||||
|
|
||||||
open_file_base(std::uint64_t chunk_size, std::uint8_t chunk_timeout,
|
open_file_base(std::uint64_t chunk_size, std::uint8_t chunk_timeout,
|
||||||
filesystem_item fsi,
|
filesystem_item fsi,
|
||||||
std::map<std::uint64_t, open_file_data> open_data,
|
std::map<std::uint64_t, open_file_data> open_data,
|
||||||
i_provider &provider, bool disable_io = false);
|
i_provider &provider, bool disable_io);
|
||||||
|
|
||||||
~open_file_base() override = default;
|
~open_file_base() override = default;
|
||||||
|
|
||||||
@ -158,17 +157,17 @@ public:
|
|||||||
|
|
||||||
[[nodiscard]] auto get_handles() const -> std::vector<std::uint64_t> override;
|
[[nodiscard]] auto get_handles() const -> std::vector<std::uint64_t> override;
|
||||||
|
|
||||||
[[nodiscard]] auto get_open_data()
|
[[nodiscard]] auto
|
||||||
-> std::map<std::uint64_t, open_file_data> & override;
|
get_open_data() -> std::map<std::uint64_t, open_file_data> & override;
|
||||||
|
|
||||||
[[nodiscard]] auto get_open_data() const
|
[[nodiscard]] auto get_open_data() const
|
||||||
-> const std::map<std::uint64_t, open_file_data> & override;
|
-> const std::map<std::uint64_t, open_file_data> & override;
|
||||||
|
|
||||||
[[nodiscard]] auto get_open_data(std::uint64_t handle)
|
[[nodiscard]] auto
|
||||||
-> open_file_data & override;
|
get_open_data(std::uint64_t handle) -> open_file_data & override;
|
||||||
|
|
||||||
[[nodiscard]] auto get_open_data(std::uint64_t handle) const
|
[[nodiscard]] auto
|
||||||
-> const open_file_data & override;
|
get_open_data(std::uint64_t handle) const -> const open_file_data & override;
|
||||||
|
|
||||||
[[nodiscard]] auto get_open_file_count() const -> std::size_t override;
|
[[nodiscard]] auto get_open_file_count() const -> std::size_t override;
|
||||||
|
|
||||||
|
@ -33,7 +33,6 @@ direct_open_file::direct_open_file(std::uint64_t chunk_size,
|
|||||||
std::uint8_t chunk_timeout,
|
std::uint8_t chunk_timeout,
|
||||||
filesystem_item fsi, i_provider &provider)
|
filesystem_item fsi, i_provider &provider)
|
||||||
: open_file_base(chunk_size, chunk_timeout, fsi, provider, true),
|
: open_file_base(chunk_size, chunk_timeout, fsi, provider, true),
|
||||||
ring_state_(ring_size),
|
|
||||||
total_chunks_(static_cast<std::size_t>(
|
total_chunks_(static_cast<std::size_t>(
|
||||||
utils::divide_with_ceiling(fsi_.size, chunk_size))) {
|
utils::divide_with_ceiling(fsi_.size, chunk_size))) {
|
||||||
if (fsi_.size > 0U) {
|
if (fsi_.size > 0U) {
|
||||||
|
@ -63,7 +63,8 @@ open_file::open_file(std::uint64_t chunk_size, std::uint8_t chunk_timeout,
|
|||||||
i_provider &provider,
|
i_provider &provider,
|
||||||
std::optional<boost::dynamic_bitset<>> read_state,
|
std::optional<boost::dynamic_bitset<>> read_state,
|
||||||
i_upload_manager &mgr)
|
i_upload_manager &mgr)
|
||||||
: open_file_base(chunk_size, chunk_timeout, fsi, open_data, provider),
|
: open_file_base(chunk_size, chunk_timeout, fsi, open_data, provider,
|
||||||
|
false),
|
||||||
mgr_(mgr) {
|
mgr_(mgr) {
|
||||||
REPERTORY_USES_FUNCTION_NAME();
|
REPERTORY_USES_FUNCTION_NAME();
|
||||||
|
|
||||||
@ -120,8 +121,8 @@ open_file::open_file(std::uint64_t chunk_size, std::uint8_t chunk_timeout,
|
|||||||
|
|
||||||
open_file::~open_file() { close(); }
|
open_file::~open_file() { close(); }
|
||||||
|
|
||||||
auto open_file::adjust_cache_size(std::uint64_t file_size, bool shrink)
|
auto open_file::adjust_cache_size(std::uint64_t file_size,
|
||||||
-> api_error {
|
bool shrink) -> api_error {
|
||||||
REPERTORY_USES_FUNCTION_NAME();
|
REPERTORY_USES_FUNCTION_NAME();
|
||||||
|
|
||||||
if (file_size == fsi_.size) {
|
if (file_size == fsi_.size) {
|
||||||
|
@ -40,7 +40,7 @@ ring_buffer_open_file::ring_buffer_open_file(std::string buffer_directory,
|
|||||||
filesystem_item fsi,
|
filesystem_item fsi,
|
||||||
i_provider &provider,
|
i_provider &provider,
|
||||||
std::size_t ring_size)
|
std::size_t ring_size)
|
||||||
: open_file_base(chunk_size, chunk_timeout, fsi, provider),
|
: open_file_base(chunk_size, chunk_timeout, fsi, provider, false),
|
||||||
ring_state_(ring_size),
|
ring_state_(ring_size),
|
||||||
source_path_(utils::path::combine(buffer_directory,
|
source_path_(utils::path::combine(buffer_directory,
|
||||||
{utils::create_uuid_string()})),
|
{utils::create_uuid_string()})),
|
||||||
|
Reference in New Issue
Block a user