Joedb 10.0.1
The Journal-Only Embedded Database
|
Directly read file served from joedb_server. More...
#include <joedb/concurrency/Server_File.h>
Public Member Functions | |
Server_File (const Connector &connector, std::ostream *log=nullptr) | |
int64_t | handshake (const Readonly_Journal &client_journal, Content_Check content_check) override |
Called during Client construction. | |
int64_t | pull (Lock_Action lock_action, Data_Transfer data_transfer, Writable_Journal &client_journal, std::chrono::milliseconds wait) override |
Pull from the connection. | |
int64_t | push (const Readonly_Journal &client_journal, int64_t server_position, int64_t until_position, Unlock_Action unlock_action) override |
Push new data to the connection. | |
size_t | pread (char *data, size_t size, int64_t offset) const override |
Read a range of bytes. | |
void | pwrite (const char *data, size_t size, int64_t offset) override |
Write a range of bytes. Extend file size if necessary. | |
int64_t | get_size () const override |
Get the size of the file, or -1 if it is unknown. | |
![]() | |
Robust_Connection (const Connector &connector, std::ostream *log) | |
size_t | pread (char *data, size_t size, int64_t offset) const |
void | unlock () override |
Unlock the connection. | |
bool | is_pullonly () const override |
![]() | |
virtual | ~Connection () |
![]() | |
Buffered_File (Open_Mode mode) | |
void | flush () |
void | flush_for_writing () |
void | exclusive_lock_tail () |
void | unlock_tail () noexcept |
bool | tail_is_locked () const noexcept |
void | shared_lock_head () |
void | exclusive_lock_head () |
void | unlock_head () noexcept |
bool | is_shared () const noexcept |
bool | is_readonly () const noexcept |
Open_Mode | get_mode () const noexcept |
void | set_position (int64_t position) |
int64_t | get_position () const noexcept |
virtual void | copy_to (Buffered_File &destination, int64_t start, int64_t size) const |
virtual bool | equal_to (Buffered_File &destination, int64_t from, int64_t until) const |
void | copy_to (Buffered_File &destination) const |
template<typename T > | |
void | write (T x) |
template<typename T > | |
T | read () |
template<typename T > | |
void | compact_write (T x) |
template<typename T > | |
T | compact_read () |
template<typename T > | |
T | read_strong_type () |
void | write_reference (Record_Id id) |
Record_Id | read_reference () |
void | write_string (const std::string &s) |
std::string | read_string () |
std::string | safe_read_string (int64_t max_size) |
void | write_blob (Blob blob) |
Blob | read_blob () |
void | write_data (const char *data, size_t n) |
size_t | read_data (char *data, const size_t n) |
void | ignore (const int64_t n) |
std::string | read_blob (Blob blob) const |
![]() | |
void | sequential_seek (int64_t new_position) |
size_t | sequential_read (char *data, size_t size) |
void | sequential_write (const char *data, size_t size) |
int64_t | get_position () const |
![]() | |
virtual void | sync () |
Write data durably (including file-size change) | |
virtual void | datasync () |
Write data durably (no file-size change) | |
virtual void | shared_lock (int64_t start, int64_t size) |
Lock a range of bytes for reading (prevents writes, not reads) | |
virtual void | exclusive_lock (int64_t start, int64_t size) |
Lock a range of bytes for writing (prevents both writes and reads) | |
virtual void | unlock (int64_t start, int64_t size) noexcept |
Remove a lock. The range should match the range of a corresponding lock. | |
virtual | ~Abstract_File ()=default |
Additional Inherited Members | |
![]() | |
static void | reading_past_end_of_file () |
![]() | |
void | reconnect (const std::exception *e) const |
template<typename F > | |
auto | try_until_success (const F &f) const |
![]() | |
void | destructor_flush () noexcept |
void | make_readonly () |
void | make_writable () |
![]() | |
static void | content_mismatch () |
Called by handshake when the file and the connection do not match. | |
![]() | |
std::unique_ptr< Server_Connection > | connection |
![]() | |
static constexpr int64_t | last_position = (1ULL << 63) - 1 |
This class allows reading a remote file via the joedb network protocol. It is convenient for reading blobs from a large remote database without having to download a local replica. This file can also be written to: the head and tail of the file are stored in RAM locally, and can be pushed to the remote server if used in a client.
Definition at line 21 of file Server_File.h.
joedb::Server_File::Server_File | ( | const Connector & | connector, |
std::ostream * | log = nullptr |
||
) |
Definition at line 21 of file Server_File.cpp.
|
inlineoverridevirtual |
Reimplemented from joedb::Abstract_File.
Definition at line 65 of file Server_File.h.
|
overridevirtual |
client_journal | may be used to check matching content |
content_check | indicates how matching content is tested |
Reimplemented from joedb::Robust_Connection.
Definition at line 62 of file Server_File.cpp.
|
overridevirtual |
The returned value may be less than size, even if the end of the file is not reached. 0 is returned if the end of the file is reached.
Reimplemented from joedb::Abstract_File.
Definition at line 104 of file Server_File.cpp.
|
overridevirtual |
lock_action | whether the connection should be locked before pulling |
data_transfer | whether data should be transferred |
client_journal | journal to pull into |
wait | duration during which the connection may wait for new data if the pull would otherwise be empty |
Reimplemented from joedb::Robust_Connection.
Definition at line 34 of file Server_File.cpp.
|
overridevirtual |
Reimplemented from joedb::Robust_Connection.
Definition at line 75 of file Server_File.cpp.
|
overridevirtual |
Reimplemented from joedb::Abstract_File.
Definition at line 117 of file Server_File.cpp.