@@ -61,6 +61,9 @@ namespace pbft
6161 virtual void commit_new_view (
6262 const pbft::NewView& new_view, pbft::NewViewsMap& pbft_new_views_map) = 0;
6363 virtual std::shared_ptr<kv::AbstractTxEncryptor> get_encryptor () = 0;
64+ virtual void set_view (Term t) = 0;
65+
66+ virtual kv::TxID next_txid () = 0;
6467 };
6568
6669 template <typename T, typename S>
@@ -93,16 +96,16 @@ namespace pbft
9396 auto p = x.lock ();
9497 if (p)
9598 {
96- auto version = p->next_version ();
99+ auto txid = p->next_txid ();
97100 LOG_TRACE_FMT (" Storing pre prepare at seqno {}" , pp.seqno );
98101 auto success = p->commit (
99- version ,
100- [version ,
102+ txid ,
103+ [txid ,
101104 &pbft_pre_prepares_map,
102105 &signatures,
103106 pp,
104107 root = std::vector<uint8_t >(root.p , root.p + root.n )]() {
105- kv::Tx tx (version);
108+ kv::Tx tx (txid. version );
106109 auto pp_view = tx.get_view (pbft_pre_prepares_map);
107110 pp_view->put (0 , pp);
108111 auto sig_view = tx.get_view (signatures);
@@ -113,7 +116,7 @@ namespace pbft
113116 false );
114117 if (success == kv::CommitSuccess::OK)
115118 {
116- return version;
119+ return txid. version ;
117120 }
118121 }
119122 return kv::NoVersion;
@@ -147,25 +150,21 @@ namespace pbft
147150 auto p = x.lock ();
148151 if (p)
149152 {
150- auto version = p->next_version ();
153+ auto txid = p->next_txid ();
151154 LOG_TRACE_FMT (
152155 " Storing new view message at view {} for node {}" ,
153156 new_view.view ,
154157 new_view.node_id );
155158
156159 auto success = p->commit (
157- version ,
158- [version , &pbft_new_views_map, new_view]() {
159- kv::Tx tx (version);
160+ txid ,
161+ [txid , &pbft_new_views_map, new_view]() {
162+ kv::Tx tx (txid. version );
160163 auto vc_view = tx.get_view (pbft_new_views_map);
161164 vc_view->put (0 , new_view);
162165 return tx.commit_reserved ();
163166 },
164167 false );
165- if (success == kv::CommitSuccess::OK)
166- {
167- return ;
168- }
169168 }
170169 }
171170
@@ -175,7 +174,6 @@ namespace pbft
175174 if (p)
176175 {
177176 p->compact (v);
178- return ;
179177 }
180178 }
181179
@@ -198,6 +196,25 @@ namespace pbft
198196 return kv::NoVersion;
199197 }
200198
199+ kv::TxID next_txid ()
200+ {
201+ auto p = x.lock ();
202+ if (p)
203+ {
204+ return p->next_txid ();
205+ }
206+ return {0 , kv::NoVersion};
207+ }
208+
209+ void set_view (Term view)
210+ {
211+ auto p = x.lock ();
212+ if (p)
213+ {
214+ p->set_term (view);
215+ }
216+ }
217+
201218 std::shared_ptr<kv::AbstractTxEncryptor> get_encryptor ()
202219 {
203220 auto p = x.lock ();
0 commit comments