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

cmccabe pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 3066019efa1 KAFKA-16521: Have Raft endpoints printed as 
name://host:port (#16830)
3066019efa1 is described below

commit 3066019efa1cabe7fe52bb7ac663d4363bb9be84
Author: Alyssa Huang <[email protected]>
AuthorDate: Thu Aug 8 09:22:23 2024 -0700

    KAFKA-16521: Have Raft endpoints printed as name://host:port (#16830)
    
    Reviewers: Colin P. McCabe <[email protected]>
---
 .../java/org/apache/kafka/clients/admin/RaftVoterEndpoint.java |  8 +++-----
 .../java/org/apache/kafka/tools/MetadataQuorumCommand.java     | 10 ++++++----
 .../java/org/apache/kafka/tools/MetadataQuorumCommandTest.java |  3 ++-
 3 files changed, 11 insertions(+), 10 deletions(-)

diff --git 
a/clients/src/main/java/org/apache/kafka/clients/admin/RaftVoterEndpoint.java 
b/clients/src/main/java/org/apache/kafka/clients/admin/RaftVoterEndpoint.java
index ec9cbfd1fb0..984ac999393 100644
--- 
a/clients/src/main/java/org/apache/kafka/clients/admin/RaftVoterEndpoint.java
+++ 
b/clients/src/main/java/org/apache/kafka/clients/admin/RaftVoterEndpoint.java
@@ -91,10 +91,8 @@ public class RaftVoterEndpoint {
 
     @Override
     public String toString() {
-        return "RaftVoterEndpoint" +
-            "(name=" + name +
-            ", host=" + host +
-            ", port=" + port +
-            ")";
+        // enclose IPv6 hosts in square brackets for readability
+        String hostString = host.contains(":") ? "[" + host + "]" : host;
+        return name + "://" + hostString + ":" + port;
     }
 }
diff --git 
a/tools/src/main/java/org/apache/kafka/tools/MetadataQuorumCommand.java 
b/tools/src/main/java/org/apache/kafka/tools/MetadataQuorumCommand.java
index 1fdc600cbcc..8b7b70bf063 100644
--- a/tools/src/main/java/org/apache/kafka/tools/MetadataQuorumCommand.java
+++ b/tools/src/main/java/org/apache/kafka/tools/MetadataQuorumCommand.java
@@ -241,7 +241,7 @@ public class MetadataQuorumCommand {
     }
 
     // Constructs the CurrentVoters string
-    // CurrentVoters: [{"id": 0, "directoryId": "UUID1", "endpoints": 
[{"name": "C", "securityProtocol": "SSL", "host": "controller-0", "port": 
1234}]}, {"id": 1, ... }]}]
+    // CurrentVoters: [{"id": 0, "directoryId": "UUID1", "endpoints": 
["C://controller-0:1234"]}]
     private static String printVoterState(QuorumInfo quorumInfo) {
         return printReplicaState(quorumInfo, quorumInfo.voters());
     }
@@ -279,13 +279,15 @@ public class MetadataQuorumCommand {
             StringBuilder sb = new StringBuilder();
             sb.append("{");
             sb.append("\"id\": ").append(id).append(", ");
-            sb.append("\"directoryId\": 
").append("\"").append(directoryId.equals(Uuid.ZERO_UUID) ? "null" : 
directoryId).append("\"");
+            sb.append("\"directoryId\": 
").append(directoryId.equals(Uuid.ZERO_UUID) ? "null" : "\"" + directoryId + 
"\"");
             if (!endpoints.isEmpty()) {
-                sb.append(", \"endpoints\": ");
+                sb.append(", \"endpoints\": [");
                 for (RaftVoterEndpoint endpoint : endpoints) {
-                    sb.append(endpoint.toString()).append(", ");
+                    sb.append("\"");
+                    sb.append(endpoint.toString()).append("\", ");
                 }
                 sb.setLength(sb.length() - 2);  // remove the last comma and 
space
+                sb.append("]");
             }
             sb.append("}");
             return sb.toString();
diff --git 
a/tools/src/test/java/org/apache/kafka/tools/MetadataQuorumCommandTest.java 
b/tools/src/test/java/org/apache/kafka/tools/MetadataQuorumCommandTest.java
index 809ce1ee161..37c7650766c 100644
--- a/tools/src/test/java/org/apache/kafka/tools/MetadataQuorumCommandTest.java
+++ b/tools/src/test/java/org/apache/kafka/tools/MetadataQuorumCommandTest.java
@@ -118,7 +118,8 @@ class MetadataQuorumCommandTest {
         assertTrue(outputs[4].matches("MaxFollowerLag:\\s+\\d+"), 
describeOutput);
         assertTrue(outputs[5].matches("MaxFollowerLagTimeMs:\\s+-?\\d+"), 
describeOutput);
         assertTrue(
-            
outputs[6].matches("CurrentVoters:\\s+\\[\\{\"id\":\\s+\\d+,\\s+\"directoryId\":\\s+\\S+,\\s+\"endpoints\":\\s+.*}]"),
+            
outputs[6].matches("CurrentVoters:\\s+\\[\\{\"id\":\\s+\\d+,\\s+\"directoryId\":\\s+\\S+,\\s+"
 +
+                "\"endpoints\":\\s+\\[\"\\S+://\\[?\\S+]?:\\d+\",?.*]"),
             describeOutput
         );
 

Reply via email to