From 6549ed98165efced82190281b777773b69a2ec4d Mon Sep 17 00:00:00 2001 From: Sanal P Date: Mon, 16 Sep 2024 20:41:05 -0700 Subject: [PATCH] Fix snapshot related issue during restart of follower. We should return false if we are not persistig snapshot. Same return null for last snapshot. --- conanfile.py | 2 +- .../replication_state_machine.cpp | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/conanfile.py b/conanfile.py index 8a57c6f..d38974c 100644 --- a/conanfile.py +++ b/conanfile.py @@ -9,7 +9,7 @@ class HomeObjectConan(ConanFile): name = "homeobject" - version = "2.1.2" + version = "2.1.3" homepage = "https://github.com/eBay/HomeObject" description = "Blob Store built on HomeReplication" diff --git a/src/lib/homestore_backend/replication_state_machine.cpp b/src/lib/homestore_backend/replication_state_machine.cpp index ad7f430..3978240 100644 --- a/src/lib/homestore_backend/replication_state_machine.cpp +++ b/src/lib/homestore_backend/replication_state_machine.cpp @@ -165,11 +165,14 @@ ReplicationStateMachine::create_snapshot(std::shared_ptr< homestore::snapshot_co auto s = ctx->nuraft_snapshot(); std::lock_guard lk(m_snapshot_lock); - auto current = dynamic_pointer_cast< homestore::nuraft_snapshot_context >(m_snapshot_context)->nuraft_snapshot(); - if (s->get_last_log_idx() < current->get_last_log_idx()) { - LOGI("Skipping create snapshot new idx/term: {}/{} current idx/term: {}/{}", s->get_last_log_idx(), - s->get_last_log_term(), current->get_last_log_idx(), current->get_last_log_term()); - return folly::makeSemiFuture< homestore::ReplResult< folly::Unit > >(folly::Unit{}); + if (m_snapshot_context) { + auto current = + dynamic_pointer_cast< homestore::nuraft_snapshot_context >(m_snapshot_context)->nuraft_snapshot(); + if (s->get_last_log_idx() < current->get_last_log_idx()) { + LOGI("Skipping create snapshot new idx/term: {}/{} current idx/term: {}/{}", s->get_last_log_idx(), + s->get_last_log_term(), current->get_last_log_idx(), current->get_last_log_term()); + return folly::makeSemiFuture< homestore::ReplResult< folly::Unit > >(folly::Unit{}); + } } LOGI("create snapshot last_log_idx: {} last_log_term: {}", s->get_last_log_idx(), s->get_last_log_term()); @@ -181,13 +184,13 @@ bool ReplicationStateMachine::apply_snapshot(std::shared_ptr< homestore::snapsho // TODO persist snapshot std::lock_guard lk(m_snapshot_lock); m_snapshot_context = context; - return true; + return false; } std::shared_ptr< homestore::snapshot_context > ReplicationStateMachine::last_snapshot() { std::lock_guard lk(m_snapshot_lock); auto snp = m_snapshot_context; - return snp; + return nullptr; } int ReplicationStateMachine::read_snapshot_data(std::shared_ptr< homestore::snapshot_context > context,