Joedb 10.4.6
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
joedb::Server_File Class Reference

Directly read file served from joedb_server. More...

#include <joedb/concurrency/Server_File.h>

Inheritance diagram for joedb::Server_File:
Collaboration diagram for joedb::Server_File:

Public Member Functions

 Server_File (const Connector &connector, Logger &logger=Logger::dummy_logger)
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.
Public Member Functions inherited from joedb::Robust_Connection
 Robust_Connection (const Connector &connector, Logger &logger)
size_t pread (char *data, size_t size, int64_t offset) const
void unlock () override
 Unlock the connection.
bool is_pullonly () const override
Public Member Functions inherited from joedb::Connection
virtual ~Connection ()
Public Member Functions inherited from joedb::Abstract_File
 Abstract_File (Open_Mode mode)
bool is_shared () const noexcept
bool is_readonly () const noexcept
Open_Mode get_mode () const noexcept
void full_pread (char *data, size_t size, int64_t offset) const
 Fill the buffer, or throw if the end of the file is reached.
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.
void exclusive_lock_tail ()
void unlock_tail () noexcept
void exclusive_lock_head ()
void shared_lock_head ()
void unlock_head () noexcept
std::string read_blob (Blob blob, int64_t max_size=-1) const
virtual void copy_to (Abstract_File &destination, int64_t start, int64_t size) const
virtual bool equal_to (const Abstract_File &destination, int64_t from, int64_t until) const
void copy_to (Abstract_File &destination) const
virtual ~Abstract_File ()=default

Additional Inherited Members

Static Public Member Functions inherited from joedb::Abstract_File
static void reading_past_end_of_file ()
Static Public Attributes inherited from joedb::Connection
static Connection dummy
 Since this class has no internal state, this global variable can be used instead of creating an instance.
Protected Member Functions inherited from joedb::Robust_Connection
void reconnect (const std::exception *e) const
template<typename F>
auto try_until_success (const F &f) const
Protected Member Functions inherited from joedb::Connection
 Connection ()=default
Protected Member Functions inherited from joedb::Abstract_File
void make_readonly ()
void make_writable ()
Static Protected Member Functions inherited from joedb::Connection
static void content_mismatch ()
 Called by handshake when the file and the connection do not match.
Protected Attributes inherited from joedb::Robust_Connection
std::unique_ptr< Server_Connection > connection
Static Protected Attributes inherited from joedb::Abstract_File
static constexpr int64_t last_position = (1ULL << 63) - 1

Detailed Description

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.

#include <iostream>
int main()
{
joedb::Local_Connector connector("blobs.joedb.sock");
joedb::Server_File server_file(connector);
joedb::Writable_Journal_Client client(server_file, server_file);
const auto blob = client.transaction([](joedb::Writable_Journal &journal)
{
return journal.write_blob("blob");
});
std::cout << server_file.read_blob(blob) << '\n';
return 0;
}
Directly read file served from joedb_server.
Definition Server_File.h:22
Blob write_blob(std::string_view data) override
int main()

Definition at line 21 of file Server_File.h.

Constructor & Destructor Documentation

◆ Server_File()

joedb::Server_File::Server_File ( const Connector & connector,
Logger & logger = Logger::dummy_logger )

Definition at line 21 of file Server_File.cpp.

Member Function Documentation

◆ get_size()

int64_t joedb::Server_File::get_size ( ) const
inlineoverridevirtual

Reimplemented from joedb::Abstract_File.

Definition at line 69 of file Server_File.h.

◆ handshake()

int64_t joedb::Server_File::handshake ( const Readonly_Journal & client_journal,
Content_Check content_check )
overridevirtual
Parameters
client_journalmay be used to check matching content
content_checkindicates how matching content is tested
Returns
connection checkpoint

Reimplemented from joedb::Robust_Connection.

Definition at line 62 of file Server_File.cpp.

◆ pread()

size_t joedb::Server_File::pread ( char * data,
size_t size,
int64_t offset ) const
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.

◆ pull()

int64_t joedb::Server_File::pull ( Lock_Action lock_action,
Data_Transfer data_transfer,
Writable_Journal & client_journal,
std::chrono::milliseconds wait )
overridevirtual
Parameters
lock_actionwhether the connection should be locked before pulling
data_transferwhether data should be transferred
client_journaljournal to pull into
waitduration during which the connection may wait for new data if the pull would otherwise be empty
Returns
connection checkpoint

Reimplemented from joedb::Robust_Connection.

Definition at line 34 of file Server_File.cpp.

◆ push()

int64_t joedb::Server_File::push ( const Readonly_Journal & client_journal,
int64_t from,
int64_t until,
Unlock_Action unlock_action )
overridevirtual
Returns
connection checkpoint

Reimplemented from joedb::Robust_Connection.

Definition at line 75 of file Server_File.cpp.

◆ pwrite()

void joedb::Server_File::pwrite ( const char * data,
size_t size,
int64_t offset )
overridevirtual

Reimplemented from joedb::Abstract_File.

Definition at line 117 of file Server_File.cpp.


The documentation for this class was generated from the following files: