You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kvrocks.apache.org by hu...@apache.org on 2024/03/24 02:15:24 UTC

(kvrocks) branch unstable updated: Allow to retrieve the cluster node id via the CLUSTERX command (#2194)

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

hulk pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/kvrocks.git


The following commit(s) were added to refs/heads/unstable by this push:
     new c4956d6f Allow to retrieve the cluster node id via the CLUSTERX command (#2194)
c4956d6f is described below

commit c4956d6f52b4d4ea91e19b9efb8d8f0b4788f614
Author: hulk <hu...@gmail.com>
AuthorDate: Sun Mar 24 10:15:19 2024 +0800

    Allow to retrieve the cluster node id via the CLUSTERX command (#2194)
---
 src/commands/cmd_cluster.cc                      | 6 ++++--
 tests/gocase/integration/cluster/cluster_test.go | 9 +++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/commands/cmd_cluster.cc b/src/commands/cmd_cluster.cc
index 99a79f14..bd8de277 100644
--- a/src/commands/cmd_cluster.cc
+++ b/src/commands/cmd_cluster.cc
@@ -122,7 +122,7 @@ class CommandClusterX : public Commander {
   Status Parse(const std::vector<std::string> &args) override {
     subcommand_ = util::ToLower(args[1]);
 
-    if (args.size() == 2 && (subcommand_ == "version")) return Status::OK();
+    if (args.size() == 2 && (subcommand_ == "version" || subcommand_ == "myid")) return Status::OK();
 
     if (subcommand_ == "setnodeid" && args_.size() == 3 && args_[2].size() == kClusterNodeIdLen) return Status::OK();
 
@@ -208,7 +208,7 @@ class CommandClusterX : public Commander {
       return Status::OK();
     }
 
-    return {Status::RedisParseErr, "CLUSTERX command, CLUSTERX VERSION|SETNODEID|SETNODES|SETSLOT|MIGRATE"};
+    return {Status::RedisParseErr, "CLUSTERX command, CLUSTERX VERSION|MYID|SETNODEID|SETNODES|SETSLOT|MIGRATE"};
   }
 
   Status Execute(Server *srv, Connection *conn, std::string *output) override {
@@ -248,6 +248,8 @@ class CommandClusterX : public Commander {
     } else if (subcommand_ == "version") {
       int64_t v = srv->cluster->GetVersion();
       *output = redis::BulkString(std::to_string(v));
+    } else if (subcommand_ == "myid") {
+      *output = redis::BulkString(srv->cluster->GetMyId());
     } else if (subcommand_ == "migrate") {
       if (sync_migrate_) {
         sync_migrate_ctx_ = std::make_unique<SyncMigrateContext>(srv, conn, sync_migrate_timeout_);
diff --git a/tests/gocase/integration/cluster/cluster_test.go b/tests/gocase/integration/cluster/cluster_test.go
index 695eb33c..97c8ed88 100644
--- a/tests/gocase/integration/cluster/cluster_test.go
+++ b/tests/gocase/integration/cluster/cluster_test.go
@@ -305,6 +305,15 @@ func TestClusterMultiple(t *testing.T) {
 		require.NoError(t, rdb[i].Do(ctx, "clusterx", "setnodes", clusterNodes, "1").Err())
 	}
 
+	t.Run("check if the node id is correct", func(t *testing.T) {
+		// only node1, node2 and node3 was the member of the cluster
+		for i := 1; i < 4; i++ {
+			myid, err := rdb[i].Do(ctx, "clusterx", "myid").Text()
+			require.NoError(t, err)
+			require.Equal(t, nodeID[i], myid)
+		}
+	})
+
 	t.Run("cluster info command", func(t *testing.T) {
 		r := rdb[1].ClusterInfo(ctx).Val()
 		require.Contains(t, r, "cluster_state:ok")