Joedb 10.3.0
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
Public Member Functions | List of all members
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:
Inheritance graph
[legend]
Collaboration diagram for joedb::Server_File:
Collaboration graph
[legend]

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
 
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) 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_Connectionconnection
 
- 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(const std::string &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

For very large reads, the returned value may be less than size, even if the end of the file is not reached. It is assumed that small reads (such as the 41 bytes of the joedb header) will not be truncated. 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: