Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions conanfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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"
self.cpp_info.names["cmake_find_package_multi"] = "HomeObject"
7 changes: 4 additions & 3 deletions src/include/homeobject/pg_manager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -133,17 +134,17 @@ struct PGStats {
};

struct PGReplaceMemberStatus {
uuid_t task_id;
std::string task_id;
PGReplaceMemberTaskStatus status = PGReplaceMemberTaskStatus::UNKNOWN;
std::vector< peer_info > members;
};

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;
Expand Down
8 changes: 4 additions & 4 deletions src/lib/homeobject_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions src/lib/homestore_backend/hs_homeobject.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);

Expand All @@ -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);

Expand Down
17 changes: 9 additions & 8 deletions src/lib/homestore_backend/hs_pg_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()) {
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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);

Expand Down
4 changes: 2 additions & 2 deletions src/lib/homestore_backend/replication_state_machine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
4 changes: 2 additions & 2 deletions src/lib/homestore_backend/replication_state_machine.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions src/lib/homestore_backend/tests/homeobj_fixture.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -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, "")); }
Expand All @@ -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");
Expand All @@ -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, "")); }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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})
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions src/lib/memory_backend/mem_homeobject.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions src/lib/memory_backend/mem_pg_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
Loading