From 254c86786eb984d5c92973840e2bd3f3d5996fc6 Mon Sep 17 00:00:00 2001 From: Roy Jacobson Date: Tue, 29 Aug 2023 15:29:40 +0300 Subject: [PATCH] fix(replication): Handle errors instead of crashing. (#1757) --- src/server/journal/serializer.cc | 6 +++++- src/server/replica.cc | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/server/journal/serializer.cc b/src/server/journal/serializer.cc index 32a5dad9d..7a700d3cc 100644 --- a/src/server/journal/serializer.cc +++ b/src/server/journal/serializer.cc @@ -106,7 +106,11 @@ std::error_code JournalReader::EnsureRead(size_t num) { // Try reading at least how much we need, but possibly more uint64_t read; SET_OR_RETURN(source_->ReadAtLeast(buf_.AppendBuffer(), remainder), read); - CHECK(read >= remainder); + + // Happens on end of stream (for example, a too-small string buffer or a closed socket) + if (read < remainder) { + return make_error_code(errc::io_error); + } buf_.CommitWrite(read); return {}; diff --git a/src/server/replica.cc b/src/server/replica.cc index 4fa7ab80f..f7c6c52b4 100644 --- a/src/server/replica.cc +++ b/src/server/replica.cc @@ -666,7 +666,10 @@ error_code DflyShardReplica::StartStableSyncFlow(Context* cntx) { ProactorBase* mythread = ProactorBase::me(); CHECK(mythread); - CHECK(Sock()->IsOpen()); + if (!Sock()->IsOpen()) { + return std::make_error_code(errc::io_error); + } + sync_fb_ = fb2::Fiber("shard_stable_sync_read", &DflyShardReplica::StableSyncDflyReadFb, this, cntx); if (use_multi_shard_exe_sync_) {