Joedb 9.1.4
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
File_Connection.cpp
Go to the documentation of this file.
3
4namespace joedb
5{
6 //////////////////////////////////////////////////////////////////////////
8 //////////////////////////////////////////////////////////////////////////
9 (
10 Readonly_Journal &client_journal,
11 bool content_check
12 )
13 {
14 if (content_check)
15 {
16 const int64_t min = std::min
17 (
18 server_journal.get_checkpoint_position(),
19 client_journal.get_checkpoint_position()
20 );
21
22 if
23 (
24 Journal_Hasher::get_hash(client_journal, min) !=
25 Journal_Hasher::get_hash(server_journal, min)
26 )
27 {
28 content_mismatch();
29 }
30 }
31
32 return server_journal.get_checkpoint_position();
33 }
34
35 //////////////////////////////////////////////////////////////////////////
37 //////////////////////////////////////////////////////////////////////////
38 (
39 Writable_Journal &client_journal,
40 std::chrono::milliseconds milliseconds
41 )
42 {
43 server_journal.pull();
44 client_journal.pull_from(server_journal);
45 return server_journal.get_checkpoint_position();
46 }
47
48 //////////////////////////////////////////////////////////////////////////
50 //////////////////////////////////////////////////////////////////////////
51 (
52 Readonly_Journal &client_journal,
53 std::chrono::milliseconds milliseconds
54 )
55 {
56 server_journal.pull();
57 return server_journal.get_checkpoint_position();
58 }
59
60
61 //////////////////////////////////////////////////////////////////////////
63 //////////////////////////////////////////////////////////////////////////
64 (
65 Writable_Journal &client_journal,
66 std::chrono::milliseconds milliseconds
67 )
68 {
69 throw Exception("Connected to a read-only journal: can't lock");
70 }
71
72 //////////////////////////////////////////////////////////////////////////
74 //////////////////////////////////////////////////////////////////////////
75 (
76 Readonly_Journal &client_journal,
77 const int64_t from_checkpoint,
78 const int64_t until_checkpoint,
79 bool unlock_after
80 )
81 {
82 throw Exception("Connected to a read-only journal: can't push");
83 }
84
85 //////////////////////////////////////////////////////////////////////////
87 //////////////////////////////////////////////////////////////////////////
88 (
89 Writable_Journal &client_journal,
90 std::chrono::milliseconds milliseconds
91 )
92 {
93 get_journal().lock_pull();
94 client_journal.pull_from(server_journal);
95 return server_journal.get_checkpoint_position();
96 }
97
98 //////////////////////////////////////////////////////////////////////////
100 //////////////////////////////////////////////////////////////////////////
101 (
102 Readonly_Journal &client_journal,
103 const int64_t from_checkpoint,
104 const int64_t until_checkpoint,
105 bool unlock_after
106 )
107 {
108 if (!get_journal().is_locked())
109 get_journal().lock_pull();
110
111 static_cast<Writable_Journal &>(server_journal).pull_from
112 (
113 client_journal,
114 until_checkpoint
115 );
116
117 if (unlock_after)
118 get_journal().unlock();
119
120 return server_journal.get_checkpoint_position();
121 }
122
123 //////////////////////////////////////////////////////////////////////////
125 //////////////////////////////////////////////////////////////////////////
126 {
127 get_journal().unlock();
128 }
129
130 //////////////////////////////////////////////////////////////////////////
132 //////////////////////////////////////////////////////////////////////////
133 {
134 get_journal().unlock();
135 }
136}
void unlock() override
Can be used to cancel a transaction without pushing.
int64_t lock_pull(Writable_Journal &client_journal, std::chrono::milliseconds) override
Fused lock_pull, executed at the start of a write transaction.
int64_t push_until(Readonly_Journal &client_journal, const int64_t from_checkpoint, const int64_t until_checkpoint, bool unlock_after) override
Push new data to the connection.
static SHA_256::Hash get_hash(const Readonly_Journal &journal, int64_t checkpoint)
int64_t get_checkpoint(Readonly_Journal &client_journal, std::chrono::milliseconds) override
Get new connection checkpoint without pulling.
int64_t push_until(Readonly_Journal &client_journal, const int64_t from_checkpoint, const int64_t until_checkpoint, bool unlock_after) override
Push new data to the connection.
int64_t lock_pull(Writable_Journal &client_journal, std::chrono::milliseconds) override
Fused lock_pull, executed at the start of a write transaction.
int64_t pull(Writable_Journal &client_journal, std::chrono::milliseconds) override
Pull new data from the connection.
int64_t handshake(Readonly_Journal &client_journal, bool content_check) override
Called during Client construction.
Definition Blob.h:7