From e0470d3023cbbb13de14c022f63e14a332a01595 Mon Sep 17 00:00:00 2001 From: "shenshuwei.3" Date: Sat, 14 Nov 2026 18:29:25 +0800 Subject: [PATCH] [Bugfix] Report serving after HA rebuild gate opens Signed-off-by: shenshuwei.3 --- mooncake-store/src/master_admin_service.cpp | 5 ++++- mooncake-store/tests/master_admin_server_test.cpp | 11 ++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/mooncake-store/src/master_admin_service.cpp b/mooncake-store/src/master_admin_service.cpp index 5e87bfbac..c437ddd8f 100644 --- a/mooncake-store/src/master_admin_service.cpp +++ b/mooncake-store/src/master_admin_service.cpp @@ -351,7 +351,10 @@ void MasterAdminServer::SetServiceAvailable(bool available) { MasterAdminServer::RuntimeSnapshot MasterAdminServer::SnapshotState() const { std::lock_guard lock(state_mutex_); return RuntimeSnapshot{ - .state = state_, + .state = state_ == ha::MasterRuntimeState::kLeaderWarmup && service_ && + service_->IsServing() + ? ha::MasterRuntimeState::kServing + : state_, .leader_view = leader_view_, .service = service_, .service_available = diff --git a/mooncake-store/tests/master_admin_server_test.cpp b/mooncake-store/tests/master_admin_server_test.cpp index fca01e514..7a55f4ef0 100644 --- a/mooncake-store/tests/master_admin_server_test.cpp +++ b/mooncake-store/tests/master_admin_server_test.cpp @@ -408,6 +408,7 @@ TEST_F(MasterAdminServerTest, ReadinessFollowsRebuildGateWithoutHidingLeader) { WrappedMasterServiceConfig config; config.default_kv_lease_ttl = 5000; config.initially_serving = false; + config.enable_ha_rebuild = true; config.enable_metric_reporting = false; auto service = std::make_shared(config); const int port = getFreeTcpPort(); @@ -418,19 +419,19 @@ TEST_F(MasterAdminServerTest, ReadinessFollowsRebuildGateWithoutHidingLeader) { admin.SetRuntimeState(ha::MasterRuntimeState::kLeaderWarmup); auto health = HttpGet(port, "/health"); EXPECT_EQ(health.http_status, 200); + EXPECT_NE(health.body.find("\"ha_state\":\"leader_warmup\""), + std::string::npos); EXPECT_NE(health.body.find("\"service_ready\":false"), std::string::npos); EXPECT_EQ(HttpGet(port, "/role").body, "leader"); EXPECT_EQ(HttpGet(port, "/leader").http_status, 200); EXPECT_EQ(HttpGet(port, "/get_all_keys").http_status, 503); EXPECT_TRUE(service->ReMountSegment({}, generate_uuid())); - service->ForceServingAfterTimeout(); - EXPECT_EQ(service->GetServingState(), StoreServingState::DEGRADED); + service->LockRebuildExpectedClients({}); + EXPECT_EQ(service->GetServingState(), StoreServingState::SERVING); health = HttpGet(port, "/health"); + EXPECT_NE(health.body.find("\"ha_state\":\"serving\""), std::string::npos); EXPECT_NE(health.body.find("\"service_ready\":true"), std::string::npos); EXPECT_EQ(HttpGet(port, "/get_all_keys").http_status, 200); - service->SetServing(true); - EXPECT_NE(HttpGet(port, "/health").body.find("\"service_ready\":true"), - std::string::npos); admin.SetServiceAvailable(false); EXPECT_NE(HttpGet(port, "/health").body.find("\"service_ready\":false"), std::string::npos);