@@ -148,13 +148,15 @@ void RaftReplDev::async_alloc_write(sisl::blob const& header, sisl::blob const&
148148 repl_req_ptr_t rreq) {
149149 if (!rreq) { auto rreq = repl_req_ptr_t (new repl_req_ctx{}); }
150150
151- auto const guard = m_stage.access ();
152- if (auto const stage = *guard.get (); stage != repl_dev_stage_t ::ACTIVE) {
153- RD_LOGW (" Raft channel: Not ready to accept writes, stage={}" , enum_name (stage));
154- handle_error (rreq,
155- (stage == repl_dev_stage_t ::INIT) ? ReplServiceError::SERVER_IS_JOINING
156- : ReplServiceError::SERVER_IS_LEAVING);
157- return ;
151+ {
152+ auto const guard = m_stage.access ();
153+ if (auto const stage = *guard.get (); stage != repl_dev_stage_t ::ACTIVE) {
154+ RD_LOGW (" Raft channel: Not ready to accept writes, stage={}" , enum_name (stage));
155+ handle_error (rreq,
156+ (stage == repl_dev_stage_t ::INIT) ? ReplServiceError::SERVER_IS_JOINING
157+ : ReplServiceError::SERVER_IS_LEAVING);
158+ return ;
159+ }
158160 }
159161
160162 rreq->init (repl_key{.server_id = server_id (), .term = raft_server ()->get_term (), .dsn = m_next_dsn.fetch_add (1 )},
@@ -249,6 +251,11 @@ void RaftReplDev::push_data_to_all_followers(repl_req_ptr_t rreq, sisl::sg_list
249251
250252void RaftReplDev::on_push_data_received (intrusive< sisl::GenericRpcData >& rpc_data) {
251253 auto const & incoming_buf = rpc_data->request_blob ();
254+ if (!incoming_buf.cbytes ()) {
255+ RD_LOGW (" Data Channel: PushData received with empty buffer, ignoring this call" );
256+ rpc_data->send_response ();
257+ return ;
258+ }
252259 auto const fb_size =
253260 flatbuffers::ReadScalar< flatbuffers::uoffset_t >(incoming_buf.cbytes ()) + sizeof (flatbuffers::uoffset_t );
254261 auto push_req = GetSizePrefixedPushDataRequest (incoming_buf.cbytes ());
@@ -517,7 +524,7 @@ void RaftReplDev::check_and_fetch_remote_data(std::vector< repl_req_ptr_t > rreq
517524void RaftReplDev::fetch_data_from_remote (std::vector< repl_req_ptr_t > rreqs) {
518525 if (rreqs.size () == 0 ) { return ; }
519526
520- std::vector<::flatbuffers::Offset< RequestEntry > > entries;
527+ std::vector< ::flatbuffers::Offset< RequestEntry > > entries;
521528 entries.reserve (rreqs.size ());
522529
523530 shared< flatbuffers::FlatBufferBuilder > builder = std::make_shared< flatbuffers::FlatBufferBuilder >();
@@ -597,6 +604,11 @@ void RaftReplDev::fetch_data_from_remote(std::vector< repl_req_ptr_t > rreqs) {
597604
598605void RaftReplDev::on_fetch_data_received (intrusive< sisl::GenericRpcData >& rpc_data) {
599606 auto const & incoming_buf = rpc_data->request_blob ();
607+ if (!incoming_buf.cbytes ()) {
608+ RD_LOGW (" Data Channel: PushData received with empty buffer, ignoring this call" );
609+ rpc_data->send_response ();
610+ return ;
611+ }
600612 auto fetch_req = GetSizePrefixedFetchData (incoming_buf.cbytes ());
601613
602614 RD_LOGD (" Data Channel: FetchData received: fetch_req.size={}" , fetch_req->request ()->entries ()->size ());
0 commit comments