Files
scylladb/sstables/random_access_reader.hh
Botond Dénes bce89c0f5e sstables: replace SCYLLA_ASSERT() with parse_assert() on the read path
So parse errors on corrupt SSTables don't result in crashes, instead
just aborting the read in process.
There are a lot of SCYLLA_ASSERT() usages remaining in sstables/. This
patch tried to focus on those usages which are in the read path. Some
places not only used on the read path may have been converted too, where
the usage of said method is not clear.
2025-06-24 09:16:28 +03:00

59 lines
1.4 KiB
C++

/*
* Copyright (C) 2018-present ScyllaDB
*/
/*
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
*/
#pragma once
#include "exceptions.hh"
#include <memory>
#include <seastar/core/file.hh>
#include <seastar/core/fstream.hh>
#include <seastar/core/future.hh>
#include <seastar/core/gate.hh>
#include <seastar/core/iostream.hh>
#include <seastar/core/temporary_buffer.hh>
#include "seastarx.hh"
namespace sstables {
class random_access_reader {
std::unique_ptr <input_stream<char>> _in;
protected:
virtual input_stream<char> open_at(uint64_t pos) = 0;
void set(input_stream<char> in) {
parse_assert(!_in);
_in = std::make_unique<input_stream<char>>(std::move(in));
}
public:
future <temporary_buffer<char>> read_exactly(size_t n) noexcept;
future<> seek(uint64_t pos) noexcept;
bool eof() const noexcept { return _in->eof(); }
virtual future<> close() noexcept;
virtual ~random_access_reader() {}
};
class file_random_access_reader : public random_access_reader {
file _file;
uint64_t _file_size;
size_t _buffer_size;
unsigned _read_ahead;
public:
virtual input_stream<char> open_at(uint64_t pos) override;
explicit file_random_access_reader(file f, uint64_t file_size, size_t buffer_size = 8192, unsigned read_ahead = 4);
virtual future<> close() noexcept override;
};
}