Joedb 9.4.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, 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.
 
- Public Member Functions inherited from joedb::Robust_Connection
 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.
 
- Public Member Functions inherited from joedb::Connection
virtual ~Connection ()
 
- Public Member Functions inherited from joedb::Buffered_File
 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
 
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 >
read ()
 
template<typename T >
void compact_write (T x)
 
template<typename T >
compact_read ()
 
template<typename 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
 
- Public Member Functions inherited from joedb::Sequential_File
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
 
- Public Member Functions inherited from joedb::Abstract_File
virtual void sync ()
 Write data and meta-data (such as file size) durably to permanent storage.
 
virtual void datasync ()
 Write data durably to permanent storage.
 
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 Public Member Functions inherited from joedb::Buffered_File
static void reading_past_end_of_file ()
 
- Static Public Attributes inherited from joedb::Buffered_File
static constexpr int64_t last_position = (1ULL << 63) - 1
 
- 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::Buffered_File
void destructor_flush () noexcept
 
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
 

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::Network_Connector connector("localhost", "1234");
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) final
int main()

Definition at line 21 of file Server_File.h.

Constructor & Destructor Documentation

◆ Server_File()

joedb::Server_File::Server_File ( const Connector connector,
std::ostream *  log = nullptr 
)

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 65 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
Return values
connectioncheckpoint

Reimplemented from joedb::Robust_Connection.

Definition at line 61 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 103 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
Return values
servercheckpoint

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
Return values
servercheckpoint

Reimplemented from joedb::Robust_Connection.

Definition at line 74 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 116 of file Server_File.cpp.


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