From 45e963d5d628c40e8c6241fcd05a3abfba575629 Mon Sep 17 00:00:00 2001 From: Jie Yao Date: Mon, 11 Mar 2024 08:25:06 -0700 Subject: [PATCH] enable shard recovery test --- .../tests/hs_shard_tests.cpp | 75 +++++-------------- 1 file changed, 19 insertions(+), 56 deletions(-) diff --git a/src/lib/homestore_backend/tests/hs_shard_tests.cpp b/src/lib/homestore_backend/tests/hs_shard_tests.cpp index 2204834c..d6f81a7b 100644 --- a/src/lib/homestore_backend/tests/hs_shard_tests.cpp +++ b/src/lib/homestore_backend/tests/hs_shard_tests.cpp @@ -125,41 +125,16 @@ TEST_F(TestFixture, MockSealShard) { } #endif -class FixtureAppWithRecovery : public FixtureApp { - std::string fpath_{"/tmp/test_shard_manager.data." + std::to_string(rand())}; - -public: - std::list< std::filesystem::path > devices() const override { - auto device_info = std::list< std::filesystem::path >(); - device_info.emplace_back(std::filesystem::canonical(fpath_)); - return device_info; - } - - std::string path() const { return fpath_; } -}; - class ShardManagerTestingRecovery : public ::testing::Test { public: - void SetUp() override { app = std::make_shared< FixtureAppWithRecovery >(); } - + void SetUp() override { app = std::make_shared< FixtureApp >(); } void TearDown() override { app->clean(); } protected: std::shared_ptr< FixtureApp > app; }; -// TODO: enable the following test case after we fix raft repl dev recovery issue. -/* TEST_F(ShardManagerTestingRecovery, ShardManagerRecovery) { - // prepare the env first; - auto app_with_recovery = dp_cast< FixtureAppWithRecovery >(app); - const std::string fpath = app_with_recovery->path(); - if (std::filesystem::exists(fpath)) { std::filesystem::remove(fpath); } - LOGI("creating device files with size {} ", homestore::in_bytes(2 * Gi)); - LOGI("creating {} device file", fpath); - std::ofstream ofs{fpath, std::ios::binary | std::ios::out | std::ios::trunc}; - std::filesystem::resize_file(fpath, 2 * Gi); - homeobject::pg_id_t _pg_id{1u}; homeobject::peer_id_t _peer1; homeobject::peer_id_t _peer2; @@ -201,15 +176,15 @@ TEST_F(ShardManagerTestingRecovery, ShardManagerRecovery) { EXPECT_EQ(ShardInfo::State::OPEN, check_shard->info.state); auto hs_shard = d_cast< homeobject::HSHomeObject::HS_Shard* >(check_shard); - EXPECT_TRUE(hs_shard->info == shard_info); - EXPECT_TRUE(hs_shard->sb_->id == shard_info.id); - EXPECT_TRUE(hs_shard->sb_->placement_group == shard_info.placement_group); - EXPECT_TRUE(hs_shard->sb_->state == shard_info.state); - EXPECT_TRUE(hs_shard->sb_->created_time == shard_info.created_time); - EXPECT_TRUE(hs_shard->sb_->last_modified_time == shard_info.last_modified_time); - EXPECT_TRUE(hs_shard->sb_->available_capacity_bytes == shard_info.available_capacity_bytes); - EXPECT_TRUE(hs_shard->sb_->total_capacity_bytes == shard_info.total_capacity_bytes); - EXPECT_TRUE(hs_shard->sb_->deleted_capacity_bytes == shard_info.deleted_capacity_bytes); + auto& recovered_shard_info = hs_shard->info; + EXPECT_TRUE(recovered_shard_info == shard_info); + EXPECT_TRUE(recovered_shard_info.placement_group == shard_info.placement_group); + EXPECT_TRUE(recovered_shard_info.state == shard_info.state); + EXPECT_TRUE(recovered_shard_info.created_time == shard_info.created_time); + EXPECT_TRUE(recovered_shard_info.last_modified_time == shard_info.last_modified_time); + EXPECT_TRUE(recovered_shard_info.available_capacity_bytes == shard_info.available_capacity_bytes); + EXPECT_TRUE(recovered_shard_info.total_capacity_bytes == shard_info.total_capacity_bytes); + EXPECT_TRUE(recovered_shard_info.deleted_capacity_bytes == shard_info.deleted_capacity_bytes); // seal the shard when shard is recovery e = _home_object->shard_manager()->seal_shard(shard_id).get(); @@ -237,19 +212,9 @@ TEST_F(ShardManagerTestingRecovery, ShardManagerRecovery) { EXPECT_EQ(2, pg_iter->second->shard_sequence_num_); // finally close the homeobject and homestore. _home_object.reset(); - std::filesystem::remove(fpath); } TEST_F(ShardManagerTestingRecovery, SealedShardRecovery) { - // prepare the env first; - auto app_with_recovery = dp_cast< FixtureAppWithRecovery >(app); - const std::string fpath = app_with_recovery->path(); - if (std::filesystem::exists(fpath)) { std::filesystem::remove(fpath); } - LOGI("creating device files with size {} ", homestore::in_bytes(2 * Gi)); - LOGI("creating {} device file", fpath); - std::ofstream ofs{fpath, std::ios::binary | std::ios::out | std::ios::trunc}; - std::filesystem::resize_file(fpath, 2 * Gi); - homeobject::pg_id_t _pg_id{1u}; homeobject::peer_id_t _peer1; homeobject::peer_id_t _peer2; @@ -292,17 +257,15 @@ TEST_F(ShardManagerTestingRecovery, SealedShardRecovery) { EXPECT_TRUE(pg_iter != ho->_pg_map.end()); EXPECT_EQ(1, pg_iter->second->shards_.size()); auto hs_shard = d_cast< homeobject::HSHomeObject::HS_Shard* >(pg_iter->second->shards_.front().get()); - EXPECT_TRUE(hs_shard->info == shard_info); - EXPECT_TRUE(hs_shard->sb_->id == shard_info.id); - EXPECT_TRUE(hs_shard->sb_->placement_group == shard_info.placement_group); - EXPECT_TRUE(hs_shard->sb_->state == shard_info.state); - EXPECT_TRUE(hs_shard->sb_->created_time == shard_info.created_time); - EXPECT_TRUE(hs_shard->sb_->last_modified_time == shard_info.last_modified_time); - EXPECT_TRUE(hs_shard->sb_->available_capacity_bytes == shard_info.available_capacity_bytes); - EXPECT_TRUE(hs_shard->sb_->total_capacity_bytes == shard_info.total_capacity_bytes); - EXPECT_TRUE(hs_shard->sb_->deleted_capacity_bytes == shard_info.deleted_capacity_bytes); + auto& recovered_shard_info = hs_shard->info; + EXPECT_TRUE(recovered_shard_info == shard_info); + EXPECT_TRUE(recovered_shard_info.placement_group == shard_info.placement_group); + EXPECT_TRUE(recovered_shard_info.state == shard_info.state); + EXPECT_TRUE(recovered_shard_info.created_time == shard_info.created_time); + EXPECT_TRUE(recovered_shard_info.last_modified_time == shard_info.last_modified_time); + EXPECT_TRUE(recovered_shard_info.available_capacity_bytes == shard_info.available_capacity_bytes); + EXPECT_TRUE(recovered_shard_info.total_capacity_bytes == shard_info.total_capacity_bytes); + EXPECT_TRUE(recovered_shard_info.deleted_capacity_bytes == shard_info.deleted_capacity_bytes); // finally close the homeobject and homestore. _home_object.reset(); - std::filesystem::remove(fpath); } -*/