Skip to content
API Documentation
BastionGuard™
fault_tolerant_reader.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "bad_block_map.hpp"
4#include "disk_reader.hpp"
5
6#include <cstddef>
7#include <cstdint>
8#include <functional>
9#include <mutex>
10#include <string>
11
12struct ReadResult {
13 bool success {false};
14 size_t bytes_read {0};
15 bool partial {false};
16 bool timeout {false};
17 std::string error;
18};
19
21 size_t initial_chunk_size {1024 * 1024};
22 size_t min_chunk_size {4096};
23 int max_retries {3};
24 bool mark_slow_ranges {true};
25};
26
28public:
29 using CancelCallback = std::function<bool()>;
30
32
33 bool open(const std::string& path, std::string& error);
34 void close();
35
36 bool is_open() const;
37 uint64_t size() const;
38 uint32_t logical_sector_size() const;
39 const std::string& path() const;
40
43
44 ReadResult read_at(uint64_t offset, void* buffer, size_t size);
45 ReadResult read_rescue(uint64_t offset, void* buffer, size_t size);
46
47 const BadBlockMap& bad_block_map() const;
49
50private:
51 ReadResult read_rescue_recursive(uint64_t offset, unsigned char* buffer, size_t size);
52
57 mutable std::mutex mutex_;
58};
std::function< bool()> CancelCallback
FaultTolerantReader()=default
FaultTolerantReaderConfig config_
const std::string & path() const
bool open(const std::string &path, std::string &error)
uint32_t logical_sector_size() const
void set_cancel_callback(CancelCallback cb)
void set_config(const FaultTolerantReaderConfig &cfg)
ReadResult read_rescue(uint64_t offset, void *buffer, size_t size)
ReadResult read_at(uint64_t offset, void *buffer, size_t size)
ReadResult read_rescue_recursive(uint64_t offset, unsigned char *buffer, size_t size)
const BadBlockMap & bad_block_map() const