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]