From ffb543783b83928b7656136c519531be67e2fb4a Mon Sep 17 00:00:00 2001 From: yuwmao Date: Thu, 26 Jun 2025 11:28:29 +0800 Subject: [PATCH] change task_id to string --- conanfile.py | 6 +++--- src/include/homeobject/pg_manager.hpp | 7 ++++--- src/lib/homeobject_impl.hpp | 8 ++++---- src/lib/homestore_backend/hs_homeobject.hpp | 8 ++++---- src/lib/homestore_backend/hs_pg_manager.cpp | 17 +++++++++-------- .../replication_state_machine.cpp | 4 ++-- .../replication_state_machine.hpp | 4 ++-- .../homestore_backend/tests/homeobj_fixture.hpp | 8 ++++---- .../tests/test_homestore_backend_dynamic.cpp | 8 ++++---- src/lib/memory_backend/mem_homeobject.hpp | 4 ++-- src/lib/memory_backend/mem_pg_manager.cpp | 4 ++-- src/lib/pg_manager.cpp | 10 +++++----- src/lib/tests/PGManagerTest.cpp | 5 +++-- 13 files changed, 48 insertions(+), 45 deletions(-) diff --git a/conanfile.py b/conanfile.py index 4a4433bf8..3490170fa 100644 --- a/conanfile.py +++ b/conanfile.py @@ -9,7 +9,7 @@ class HomeObjectConan(ConanFile): name = "homeobject" - version = "2.5.5" + version = "2.6.0" homepage = "https://github.com/eBay/HomeObject" description = "Blob Store built on HomeReplication" @@ -49,7 +49,7 @@ def build_requirements(self): def requirements(self): self.requires("sisl/[^12.2]@oss/master", transitive_headers=True) - self.requires("homestore/[~6.17.1]@oss/master") + self.requires("homestore/[~6.18.0]@oss/master") self.requires("iomgr/[^11.3]@oss/master") self.requires("lz4/1.9.4", override=True) self.requires("openssl/3.3.1", override=True) @@ -127,4 +127,4 @@ def package_info(self): self.cpp_info.components["memory"].exelinkflags.append("-fsanitize=undefined") self.cpp_info.names["cmake_find_package"] = "HomeObject" - self.cpp_info.names["cmake_find_package_multi"] = "HomeObject" \ No newline at end of file + self.cpp_info.names["cmake_find_package_multi"] = "HomeObject" diff --git a/src/include/homeobject/pg_manager.hpp b/src/include/homeobject/pg_manager.hpp index e0769a8e7..514f3ff3a 100644 --- a/src/include/homeobject/pg_manager.hpp +++ b/src/include/homeobject/pg_manager.hpp @@ -112,6 +112,7 @@ struct PGStats { num_active_objects{0}, num_tombstone_objects{0}, pg_state{0}, + snp_progress{0}, members{} {} std::string to_string() { @@ -133,7 +134,7 @@ struct PGStats { }; struct PGReplaceMemberStatus { - uuid_t task_id; + std::string task_id; PGReplaceMemberTaskStatus status = PGReplaceMemberTaskStatus::UNKNOWN; std::vector< peer_info > members; }; @@ -141,9 +142,9 @@ struct PGReplaceMemberStatus { class PGManager : public Manager< PGError > { public: virtual NullAsyncResult create_pg(PGInfo&& pg_info, trace_id_t tid = 0) = 0; - virtual NullAsyncResult replace_member(pg_id_t id, uuid_t task_id, peer_id_t const& old_member, PGMember const& new_member, + virtual NullAsyncResult replace_member(pg_id_t id, std::string& task_id, peer_id_t const& old_member, PGMember const& new_member, u_int32_t commit_quorum = 0, trace_id_t tid = 0) = 0; - virtual PGReplaceMemberStatus get_replace_member_status(pg_id_t id, uuid_t task_id, const PGMember& old_member, + virtual PGReplaceMemberStatus get_replace_member_status(pg_id_t id, std::string& task_id, const PGMember& old_member, const PGMember& new_member, const std::vector< PGMember >& others, uint64_t trace_id = 0) const = 0; diff --git a/src/lib/homeobject_impl.hpp b/src/lib/homeobject_impl.hpp index b1b783259..9cba6d504 100644 --- a/src/lib/homeobject_impl.hpp +++ b/src/lib/homeobject_impl.hpp @@ -98,10 +98,10 @@ class HomeObjectImpl : public HomeObject, virtual PGManager::NullAsyncResult _create_pg(PGInfo&& pg_info, std::set< peer_id_t > const& peers, trace_id_t tid) = 0; - virtual PGManager::NullAsyncResult _replace_member(pg_id_t id, uuid_t task_id, peer_id_t const& old_member, + virtual PGManager::NullAsyncResult _replace_member(pg_id_t id, std::string& task_id, peer_id_t const& old_member, PGMember const& new_member, uint32_t commit_quorum, trace_id_t trace_id) = 0; - virtual PGReplaceMemberStatus _get_replace_member_status(pg_id_t id, uuid_t task_id, const PGMember& old_member, + virtual PGReplaceMemberStatus _get_replace_member_status(pg_id_t id, std::string& task_id, const PGMember& old_member, const PGMember& new_member, const std::vector< PGMember >& others, uint64_t trace_id) const = 0; @@ -151,10 +151,10 @@ class HomeObjectImpl : public HomeObject, /// PgManager PGManager::NullAsyncResult create_pg(PGInfo&& pg_info, trace_id_t tid) final; - PGManager::NullAsyncResult replace_member(pg_id_t id, uuid_t task_id, peer_id_t const& old_member, + PGManager::NullAsyncResult replace_member(pg_id_t id, std::string& task_id, peer_id_t const& old_member, PGMember const& new_member, u_int32_t commit_quorum, trace_id_t trace_id) final; - PGReplaceMemberStatus get_replace_member_status(pg_id_t id, uuid_t task_id, const PGMember& member_out, + PGReplaceMemberStatus get_replace_member_status(pg_id_t id, std::string& task_id, const PGMember& member_out, const PGMember& member_in, const std::vector< PGMember >& others, uint64_t trace_id) const final; // see api comments in base class; diff --git a/src/lib/homestore_backend/hs_homeobject.hpp b/src/lib/homestore_backend/hs_homeobject.hpp index c6a51c69d..56125662d 100644 --- a/src/lib/homestore_backend/hs_homeobject.hpp +++ b/src/lib/homestore_backend/hs_homeobject.hpp @@ -64,10 +64,10 @@ class HSHomeObject : public HomeObjectImpl { PGManager::NullAsyncResult _create_pg(PGInfo&& pg_info, std::set< peer_id_t > const& peers, trace_id_t tid) override; - PGManager::NullAsyncResult _replace_member(pg_id_t id, uuid_t task_id, peer_id_t const& old_member, + PGManager::NullAsyncResult _replace_member(pg_id_t id, std::string& task_id, peer_id_t const& old_member, PGMember const& new_member, uint32_t commit_quorum, trace_id_t tid) override; - PGReplaceMemberStatus _get_replace_member_status(pg_id_t id, uuid_t task_id, const PGMember& old_member, + PGReplaceMemberStatus _get_replace_member_status(pg_id_t id, std::string& task_id, const PGMember& old_member, const PGMember& new_member, const std::vector< PGMember >& others, uint64_t trace_id) const override; @@ -737,7 +737,7 @@ class HSHomeObject : public HomeObjectImpl { * @param member_out Member which is removed from group * @param member_in Member which is added to group * */ - void on_pg_start_replace_member(homestore::group_id_t group_id, uuid_t task_id, + void on_pg_start_replace_member(homestore::group_id_t group_id, const std::string& task_id, const homestore::replica_member_info& member_out, const homestore::replica_member_info& member_in, trace_id_t tid); @@ -748,7 +748,7 @@ class HSHomeObject : public HomeObjectImpl { * @param member_out Member which is removed from group * @param member_in Member which is added to group * */ - void on_pg_complete_replace_member(homestore::group_id_t group_id, uuid_t task_id, + void on_pg_complete_replace_member(homestore::group_id_t group_id, const std::string& task_id, const homestore::replica_member_info& member_out, const homestore::replica_member_info& member_in, trace_id_t tid); diff --git a/src/lib/homestore_backend/hs_pg_manager.cpp b/src/lib/homestore_backend/hs_pg_manager.cpp index 73e23601c..209578983 100644 --- a/src/lib/homestore_backend/hs_pg_manager.cpp +++ b/src/lib/homestore_backend/hs_pg_manager.cpp @@ -271,7 +271,7 @@ void HSHomeObject::on_create_pg_message_commit(int64_t lsn, sisl::blob const& he // 1. Set the old member to learner and add the new member. This step will call `on_pg_start_replace_member`. // 2. HS takes the responsiblity to track the replication progress, and complete the replace member(remove the old // member) when the new member is fully synced. This step will call `on_pg_complete_replace_member`. -PGManager::NullAsyncResult HSHomeObject::_replace_member(pg_id_t pg_id, uuid_t task_id, peer_id_t const& old_member_id, +PGManager::NullAsyncResult HSHomeObject::_replace_member(pg_id_t pg_id, std::string& task_id, peer_id_t const& old_member_id, PGMember const& new_member, uint32_t commit_quorum, trace_id_t tid) { if (is_shutting_down()) { @@ -327,7 +327,7 @@ replica_member_info HSHomeObject::to_replica_member_info(const PGMember& pg_memb return replica_info; } -void HSHomeObject::on_pg_start_replace_member(group_id_t group_id, uuid_t task_id, +void HSHomeObject::on_pg_start_replace_member(group_id_t group_id, const std::string& task_id, const replica_member_info& member_out, const replica_member_info& member_in, trace_id_t tid) { auto lg = std::shared_lock(_pg_lock); @@ -353,18 +353,18 @@ void HSHomeObject::on_pg_start_replace_member(group_id_t group_id, uuid_t task_i hs_pg->pg_sb_->num_dynamic_members = pg->pg_info_.members.size(); // Update the latest membership info to pg superblk. hs_pg->pg_sb_.write(); - LOGI("PG start replace member done member_out={} member_in={}, member_nums={}, trace_id={}", - boost::uuids::to_string(member_out.id), boost::uuids::to_string(member_in.id), + LOGI("PG start replace member done, task_id={} member_out={} member_in={}, member_nums={}, trace_id={}", + task_id, boost::uuids::to_string(member_out.id), boost::uuids::to_string(member_in.id), pg->pg_info_.members.size(), tid); return; } } - LOGE("PG replace member failed member_out={} member_in={}, trace_id={}", boost::uuids::to_string(member_out.id), - boost::uuids::to_string(member_in.id), tid); + LOGE("PG replace member failed task_id={}, member_out={} member_in={}, trace_id={}", task_id, + boost::uuids::to_string(member_out.id), boost::uuids::to_string(member_in.id), tid); } -void HSHomeObject::on_pg_complete_replace_member(group_id_t group_id, uuid_t task_id, +void HSHomeObject::on_pg_complete_replace_member(group_id_t group_id, const std::string& task_id, const replica_member_info& member_out, const replica_member_info& member_in, trace_id_t tid) { auto lg = std::shared_lock(_pg_lock); @@ -400,7 +400,7 @@ void HSHomeObject::on_pg_complete_replace_member(group_id_t group_id, uuid_t tas boost::uuids::to_string(member_out.id), boost::uuids::to_string(member_in.id), tid); } -PGReplaceMemberStatus HSHomeObject::_get_replace_member_status(pg_id_t id, uuid_t task_id, const PGMember& old_member, +PGReplaceMemberStatus HSHomeObject::_get_replace_member_status(pg_id_t id, std::string& task_id, const PGMember& old_member, const PGMember& new_member, const std::vector< PGMember >& others, uint64_t trace_id) const { @@ -571,6 +571,7 @@ PGInfo HSHomeObject::deserialize_pg_info(const unsigned char* json_str, size_t s } void HSHomeObject::on_pg_meta_blk_found(sisl::byte_view const& buf, void* meta_cookie) { + LOGI("on_pg_meta_blk_found is called") homestore::superblk< pg_info_superblk > pg_sb(_pg_meta_name); pg_sb.load(buf, meta_cookie); diff --git a/src/lib/homestore_backend/replication_state_machine.cpp b/src/lib/homestore_backend/replication_state_machine.cpp index 9439a6161..3b475bf6d 100644 --- a/src/lib/homestore_backend/replication_state_machine.cpp +++ b/src/lib/homestore_backend/replication_state_machine.cpp @@ -260,13 +260,13 @@ ReplicationStateMachine::get_blk_alloc_hints(sisl::blob const& header, uint32_t return homestore::blk_alloc_hints(); } -void ReplicationStateMachine::on_start_replace_member(const uuid_t& task_id, +void ReplicationStateMachine::on_start_replace_member(const std::string& task_id, const homestore::replica_member_info& member_out, const homestore::replica_member_info& member_in, trace_id_t tid) { home_object_->on_pg_start_replace_member(repl_dev()->group_id(), task_id, member_out, member_in, tid); } -void ReplicationStateMachine::on_complete_replace_member(const uuid_t& task_id, +void ReplicationStateMachine::on_complete_replace_member(const std::string& task_id, const homestore::replica_member_info& member_out, const homestore::replica_member_info& member_in, trace_id_t tid) { diff --git a/src/lib/homestore_backend/replication_state_machine.hpp b/src/lib/homestore_backend/replication_state_machine.hpp index d5bcb8a8a..fa1a1bac4 100644 --- a/src/lib/homestore_backend/replication_state_machine.hpp +++ b/src/lib/homestore_backend/replication_state_machine.hpp @@ -172,11 +172,11 @@ class ReplicationStateMachine : public homestore::ReplDevListener { cintrusive< homestore::repl_req_ctx >& hs_ctx) override; /// @brief Called when start replacing an existing member with a new member - void on_start_replace_member(const uuid_t& task_id, const homestore::replica_member_info& member_out, + void on_start_replace_member(const std::string& task_id, const homestore::replica_member_info& member_out, const homestore::replica_member_info& member_in, trace_id_t tid = 0) override; /// @brief Called when complete replacing an existing member with a new member - void on_complete_replace_member(const uuid_t& task_id, const homestore::replica_member_info& member_out, + void on_complete_replace_member(const std::string& task_id, const homestore::replica_member_info& member_out, const homestore::replica_member_info& member_in, trace_id_t tid = 0) override; /// @brief Called when the replica is being destroyed by nuraft; diff --git a/src/lib/homestore_backend/tests/homeobj_fixture.hpp b/src/lib/homestore_backend/tests/homeobj_fixture.hpp index bf90cd52a..4174682f2 100644 --- a/src/lib/homestore_backend/tests/homeobj_fixture.hpp +++ b/src/lib/homestore_backend/tests/homeobj_fixture.hpp @@ -560,7 +560,7 @@ class HomeObjectFixture : public ::testing::Test { EXPECT_EQ(lhs.current_leader, rhs.current_leader); } - bool verify_start_replace_member_result(pg_id_t pg_id, uuid_t task_id, peer_id_t out_member_id, + bool verify_start_replace_member_result(pg_id_t pg_id, std::string& task_id, peer_id_t out_member_id, peer_id_t in_member_id) { auto hs_pg = _obj_inst->get_hs_pg(pg_id); RELEASE_ASSERT(hs_pg, "PG not found"); @@ -577,7 +577,7 @@ class HomeObjectFixture : public ::testing::Test { LOGERROR("out_member not found, out_member={}", boost::uuids::to_string(out_member_id)); return false; } - run_on_pg_leader(pg_id, [this, pg_id, task_id, &out_member, &in_member]() { + run_on_pg_leader(pg_id, [this, pg_id, &task_id, &out_member, &in_member]() { std::vector< PGMember > others; for (auto m : g_helper->members_) { if (m.first != out_member.id && m.first != in_member.id) { others.emplace_back(PGMember(m.first, "")); } @@ -601,7 +601,7 @@ class HomeObjectFixture : public ::testing::Test { return hs_pg->get_snp_progress(); } - bool verify_complete_replace_member_result(pg_id_t pg_id, uuid_t task_id, peer_id_t out_member_id, + bool verify_complete_replace_member_result(pg_id_t pg_id, std::string& task_id, peer_id_t out_member_id, peer_id_t in_member_id) { auto hs_pg = _obj_inst->get_hs_pg(pg_id); RELEASE_ASSERT(hs_pg, "PG not found"); @@ -623,7 +623,7 @@ class HomeObjectFixture : public ::testing::Test { return false; } - run_on_pg_leader(pg_id, [this, pg_id, task_id, &out_member, &in_member]() { + run_on_pg_leader(pg_id, [this, pg_id, &task_id, &out_member, &in_member]() { std::vector< PGMember > others; for (auto m : g_helper->members_) { if (m.first != out_member.id && m.first != in_member.id) { others.emplace_back(PGMember(m.first, "")); } diff --git a/src/lib/homestore_backend/tests/test_homestore_backend_dynamic.cpp b/src/lib/homestore_backend/tests/test_homestore_backend_dynamic.cpp index ba01a9f6c..18f0fb2e8 100644 --- a/src/lib/homestore_backend/tests/test_homestore_backend_dynamic.cpp +++ b/src/lib/homestore_backend/tests/test_homestore_backend_dynamic.cpp @@ -132,7 +132,7 @@ void HomeObjectFixture::RestartFollowerDuringBaselineResyncUsingSigKill(uint64_t } } #endif - auto task_id = boost::uuids::random_generator()(); + std::string task_id = "task_id"; if (!is_restart) { for (uint64_t j = 0; j < num_shards_per_pg; j++) create_shard(pg_id, 64 * Mi); @@ -293,7 +293,7 @@ TEST_F(HomeObjectFixture, RestartFollowerDuringBaselineResyncUsingGracefulShutdo g_helper->sync(); // ======== Stage 2: replace a member ======== - auto task_id = boost::uuids::random_generator()(); + std::string task_id = "task_id"; run_on_pg_leader(pg_id, [&]() { auto r = _obj_inst->pg_manager() ->replace_member(pg_id, task_id, out_member_id, PGMember{in_member_id, "new_member", 0}) @@ -453,7 +453,7 @@ void HomeObjectFixture::ReplaceMember(bool withGC) { set_basic_flip("snapshot_receiver_blob_write_data_error", 4, 15); // simulate blob write data error set_basic_flip("snapshot_receiver_blk_allocation_error", 4, 15); // simulate blob allocation error #endif - auto task_id = boost::uuids::random_generator()(); + std::string task_id = "task_id"; LOGINFO("start replace member, pg={}, task_id={}", pg_id, task_id); run_on_pg_leader(pg_id, [&]() { auto r = _obj_inst->pg_manager() @@ -574,7 +574,7 @@ void HomeObjectFixture::RestartLeaderDuringBaselineResyncUsingSigKill(uint64_t f auto hs_pg = _obj_inst->get_hs_pg(pg_id); index_table_uuid_str = uuids::to_string(hs_pg->pg_sb_->index_table_uuid); } - auto task_id = boost::uuids::random_generator()(); + std::string task_id = "task_id"; if (!is_restart) { auto kill_until_shard = pg_shard_id_vec[pg_id].back(); auto kill_until_blob = num_blobs_per_shard * num_shards_per_pg - 1; diff --git a/src/lib/memory_backend/mem_homeobject.hpp b/src/lib/memory_backend/mem_homeobject.hpp index 3b1cd2788..408c229d2 100644 --- a/src/lib/memory_backend/mem_homeobject.hpp +++ b/src/lib/memory_backend/mem_homeobject.hpp @@ -46,9 +46,9 @@ class MemoryHomeObject : public HomeObjectImpl { // PGManager PGManager::NullAsyncResult _create_pg(PGInfo&& pg_info, std::set< peer_id_t > const& peers, trace_id_t tid) override; - PGManager::NullAsyncResult _replace_member(pg_id_t id, uuid_t task_id, peer_id_t const& old_member, PGMember const& new_member, + PGManager::NullAsyncResult _replace_member(pg_id_t id, std::string& task_id, peer_id_t const& old_member, PGMember const& new_member, uint32_t commit_quorum, trace_id_t tid) override; - PGReplaceMemberStatus _get_replace_member_status(pg_id_t id, uuid_t task_id, const PGMember& old_member, + PGReplaceMemberStatus _get_replace_member_status(pg_id_t id, std::string& task_id, const PGMember& old_member, const PGMember& new_member, const std::vector< PGMember >& others, uint64_t trace_id) const override; diff --git a/src/lib/memory_backend/mem_pg_manager.cpp b/src/lib/memory_backend/mem_pg_manager.cpp index 7ad1a991f..4956b8f55 100644 --- a/src/lib/memory_backend/mem_pg_manager.cpp +++ b/src/lib/memory_backend/mem_pg_manager.cpp @@ -9,7 +9,7 @@ PGManager::NullAsyncResult MemoryHomeObject::_create_pg(PGInfo&& pg_info, std::s return folly::makeSemiFuture< PGManager::NullResult >(folly::Unit()); } -PGManager::NullAsyncResult MemoryHomeObject::_replace_member(pg_id_t id, uuid_t task_id, peer_id_t const& old_member, +PGManager::NullAsyncResult MemoryHomeObject::_replace_member(pg_id_t id, std::string& task_id, peer_id_t const& old_member, PGMember const& new_member, uint32_t commit_quorum, trace_id_t tid) { (void)old_member; @@ -24,7 +24,7 @@ PGManager::NullAsyncResult MemoryHomeObject::_replace_member(pg_id_t id, uuid_t return folly::makeSemiFuture< PGManager::NullResult >(folly::makeUnexpected(PGError::UNSUPPORTED_OP)); } -PGReplaceMemberStatus MemoryHomeObject::_get_replace_member_status(pg_id_t id, uuid_t task_id, const PGMember& old_member, +PGReplaceMemberStatus MemoryHomeObject::_get_replace_member_status(pg_id_t id, std::string& task_id, const PGMember& old_member, const PGMember& new_member, const std::vector< PGMember >& others, uint64_t trace_id) const { (void)id; diff --git a/src/lib/pg_manager.cpp b/src/lib/pg_manager.cpp index 765299b22..7b87e05fd 100644 --- a/src/lib/pg_manager.cpp +++ b/src/lib/pg_manager.cpp @@ -20,20 +20,20 @@ PGManager::NullAsyncResult HomeObjectImpl::create_pg(PGInfo&& pg_info, trace_id_ return _create_pg(std::move(pg_info), peers, tid); } -PGManager::NullAsyncResult HomeObjectImpl::replace_member(pg_id_t id, uuid_t task_id, peer_id_t const& old_member, +PGManager::NullAsyncResult HomeObjectImpl::replace_member(pg_id_t id, std::string& task_id, peer_id_t const& old_member, PGMember const& new_member, uint32_t commit_quorum, trace_id_t tid) { - LOGI("[pg={}] replace member [{}] with [{}] quorum [{}] trace_id [{}]", - id, to_string(old_member), to_string(new_member.id), commit_quorum, tid); + LOGI("[pg={}] replace member [{}] with [{}] task_id [{}] quorum [{}] trace_id [{}]", + id, to_string(old_member), to_string(new_member.id), task_id, commit_quorum, tid); if (old_member == new_member.id) { - LOGW("rejecting identical replacement SvcId [{}]! trace_id [{}]", to_string(old_member), tid); + LOGW("rejecting identical replacement SvcId [{}]! task_id [{}] trace_id [{}]", to_string(old_member), task_id, tid); return folly::makeUnexpected(PGError::INVALID_ARG); } return _replace_member(id, task_id, old_member, new_member, commit_quorum, tid); } -PGReplaceMemberStatus HomeObjectImpl::get_replace_member_status(pg_id_t id, uuid_t task_id, const PGMember& old_member, +PGReplaceMemberStatus HomeObjectImpl::get_replace_member_status(pg_id_t id, std::string& task_id, const PGMember& old_member, const PGMember& new_member, const std::vector< PGMember >& others, uint64_t trace_id) const { diff --git a/src/lib/tests/PGManagerTest.cpp b/src/lib/tests/PGManagerTest.cpp index 5be2123f9..c51fac47f 100644 --- a/src/lib/tests/PGManagerTest.cpp +++ b/src/lib/tests/PGManagerTest.cpp @@ -31,13 +31,14 @@ TEST_F(TestFixture, CreateDuplicatePg) { } TEST_F(TestFixture, Migrate) { + std::string task_id = "task_id"; EXPECT_EQ(homeobj_->pg_manager() - ->replace_member(UINT16_MAX, boost::uuids::random_generator()(),boost::uuids::random_generator()(), + ->replace_member(UINT16_MAX, task_id,boost::uuids::random_generator()(), PGMember{boost::uuids::random_generator()()}, 0) .get() .error(), PGError::UNKNOWN_PG); - EXPECT_EQ(homeobj_->pg_manager()->replace_member(_pg_id, boost::uuids::random_generator()(), _peer1, PGMember{_peer1}).get().error(), + EXPECT_EQ(homeobj_->pg_manager()->replace_member(_pg_id, task_id, _peer1, PGMember{_peer1}).get().error(), PGError::INVALID_ARG); // TODO enable after HO test framework is enabled #if 0