diff --git a/src/rsync_client.cc b/src/rsync_client.cc index f8ee7aeae8..f65314c6ea 100644 --- a/src/rsync_client.cc +++ b/src/rsync_client.cc @@ -358,7 +358,9 @@ Status RsyncClient::PullRemoteMeta(std::string* snapshot_uuid, std::setcode() != RsyncService::kOk) { - s = Status::IOError("kRsyncMeta request failed! unknown reason"); + s = Status::IOError("kRsyncMeta request failed! db is not exist or doing bgsave"); + sleep(1); + retries++; continue; } LOG(INFO) << "receive rsync meta infos, snapshot_uuid: " << resp->snapshot_uuid() diff --git a/src/rsync_server.cc b/src/rsync_server.cc index 1aac50a530..ea339af59c 100644 --- a/src/rsync_server.cc +++ b/src/rsync_server.cc @@ -116,10 +116,6 @@ void RsyncServerConn::HandleMetaRsyncRequest(void* arg) { std::shared_ptr conn = task_arg->conn; std::string db_name = req->db_name(); std::shared_ptr db = g_pika_server->GetDB(db_name); - if (!db || db->IsBgSaving()) { - LOG(WARNING) << "waiting bgsave done..."; - return; - } RsyncService::RsyncResponse response; response.set_reader_index(req->reader_index()); @@ -133,8 +129,16 @@ void RsyncServerConn::HandleMetaRsyncRequest(void* arg) { */ response.set_slot_id(0); - std::vector filenames; std::string snapshot_uuid; + if (!db || db->IsBgSaving()) { + LOG(WARNING) << "waiting bgsave done..."; + response.set_snapshot_uuid(snapshot_uuid); + response.set_code(RsyncService::kErr); + RsyncWriteResp(response, conn); + return; + } + + std::vector filenames; g_pika_server->GetDumpMeta(db_name, &filenames, &snapshot_uuid); response.set_snapshot_uuid(snapshot_uuid);