@@ -179,6 +179,7 @@ raft_buf_ptr_t RaftStateMachine::pre_commit_ext(nuraft::state_machine::ext_op_pa
179179
180180 repl_req_ptr_t rreq = lsn_to_req (lsn);
181181 RD_LOGD (" Raft channel: Precommit rreq=[{}]" , rreq->to_compact_string ());
182+ // Fixme: Check return value of on_pre_commit
182183 m_rd.m_listener ->on_pre_commit (rreq->lsn (), rreq->header (), rreq->key (), rreq);
183184
184185 return m_success_ptr;
@@ -195,12 +196,23 @@ raft_buf_ptr_t RaftStateMachine::commit_ext(nuraft::state_machine::ext_op_params
195196 // This is the time to ensure flushing of journal happens in the proposer
196197 rreq->add_state (repl_req_state_t ::LOG_FLUSHED);
197198 }
198-
199+ // Fixme: Check return value of handle_commit
199200 m_rd.handle_commit (rreq);
200201
201202 return m_success_ptr;
202203}
203204
205+ void RaftStateMachine::rollback_ext (const nuraft::state_machine::ext_op_params& params) {
206+ int64_t lsn = s_cast< int64_t >(params.log_idx );
207+ RD_LOGD (" Raft channel: Received rollback message lsn {}, store {}, logdev {}" , lsn,
208+ m_rd.m_data_journal ->logstore_id (), m_rd.m_data_journal ->logdev_id ());
209+ repl_req_ptr_t rreq = lsn_to_req (lsn);
210+ RD_DBG_ASSERT (rreq != nullptr , " Raft channel got null rreq" );
211+ RD_LOGD (" Raft channel: rollback rreq=[{}]" , rreq->to_compact_string ());
212+ // Fixme: Check return value of on_rollback
213+ m_rd.m_listener ->on_rollback (rreq->lsn (), rreq->header (), rreq->key (), rreq);
214+ }
215+
204216void RaftStateMachine::iterate_repl_reqs (std::function< void (int64_t , repl_req_ptr_t rreq) > const & cb) {
205217 for (auto [key, rreq] : m_lsn_req_map) {
206218 cb (key, rreq);
0 commit comments