This is an automated email from the ASF dual-hosted git repository.

wangdan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git


The following commit(s) were added to refs/heads/master by this push:
     new 5eb1665e0 fix(cluster_balance_policy): clear partitions in migration 
info before outputting result into it (#2317)
5eb1665e0 is described below

commit 5eb1665e06302ebbdb8b15f41ed1c85b407d10d9
Author: Dan Wang <[email protected]>
AuthorDate: Wed Nov 12 11:10:12 2025 +0800

    fix(cluster_balance_policy): clear partitions in migration info before 
outputting result into it (#2317)
---
 src/meta/cluster_balance_policy.cpp           |  2 ++
 src/meta/test/cluster_balance_policy_test.cpp | 40 +++++++++++++++++----------
 2 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/src/meta/cluster_balance_policy.cpp 
b/src/meta/cluster_balance_policy.cpp
index 73cc448a6..d166d36c1 100644
--- a/src/meta/cluster_balance_policy.cpp
+++ b/src/meta/cluster_balance_policy.cpp
@@ -224,6 +224,8 @@ bool 
cluster_balance_policy::get_app_migration_info(std::shared_ptr<app_state> a
 {
     info.app_id = app->app_id;
     info.app_name = app->app_name;
+
+    info.partitions.clear();
     info.partitions.reserve(app->pcs.size());
     for (const auto &pc : app->pcs) {
         std::map<host_port, partition_status::type> pstatus_map;
diff --git a/src/meta/test/cluster_balance_policy_test.cpp 
b/src/meta/test/cluster_balance_policy_test.cpp
index fd1185f8c..5d6060d93 100644
--- a/src/meta/test/cluster_balance_policy_test.cpp
+++ b/src/meta/test/cluster_balance_policy_test.cpp
@@ -23,6 +23,7 @@
 #include <memory>
 #include <set>
 #include <string>
+#include <string_view>
 #include <unordered_map>
 #include <utility>
 #include <vector>
@@ -112,41 +113,52 @@ TEST(cluster_balance_policy, get_app_migration_info)
     meta_service svc;
     cluster_balance_policy policy(&svc);
 
-    int appid = 1;
-    std::string appname = "test";
+    constexpr int kAppId = 1;
+    constexpr std::string_view kAppName("test");
     const auto &hp = host_port("localhost", 10086);
+
     app_info info;
-    info.app_id = appid;
-    info.app_name = appname;
+    info.app_id = kAppId;
+    info.app_name = kAppName;
     info.partition_count = 1;
-    auto app = std::make_shared<app_state>(info);
+
+    const auto app = std::make_shared<app_state>(info);
     SET_IP_AND_HOST_PORT_BY_DNS(app->pcs[0], primary, hp);
 
     node_state ns;
     ns.set_hp(hp);
-    ns.put_partition(gpid(appid, 0), true);
+    ns.put_partition(gpid(kAppId, 0), true);
     node_mapper nodes;
     nodes[hp] = ns;
 
     cluster_balance_policy::app_migration_info migration_info;
+
     {
         app->pcs[0].max_replica_count = 100;
-        auto res =
+        const auto res =
             policy.get_app_migration_info(app, nodes, 
balance_type::COPY_PRIMARY, migration_info);
         ASSERT_FALSE(res);
     }
 
+    migration_info.partitions.emplace_back();
+    ASSERT_EQ(1, migration_info.partitions.size());
+
     {
         app->pcs[0].max_replica_count = 1;
-        auto res =
+        const auto res =
             policy.get_app_migration_info(app, nodes, 
balance_type::COPY_PRIMARY, migration_info);
         ASSERT_TRUE(res);
-        ASSERT_EQ(migration_info.app_id, appid);
-        ASSERT_EQ(migration_info.app_name, appname);
-        std::map<host_port, partition_status::type> pstatus_map;
-        pstatus_map[hp] = partition_status::type::PS_PRIMARY;
-        ASSERT_EQ(migration_info.partitions[0], pstatus_map);
-        ASSERT_EQ(migration_info.replicas_count[hp], 1);
+
+        ASSERT_EQ(kAppId, migration_info.app_id);
+        ASSERT_EQ(kAppName, migration_info.app_name);
+
+        ASSERT_EQ(1, migration_info.partitions.size());
+
+        std::map<host_port, partition_status::type> expected_status_map;
+        expected_status_map[hp] = partition_status::type::PS_PRIMARY;
+        ASSERT_EQ(expected_status_map, migration_info.partitions[0]);
+
+        ASSERT_EQ(1, migration_info.replicas_count[hp]);
     }
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to