Skip to content

Commit d0f2238

Browse files
committed
support ClusterInfo leader_since (2.12 feature)
1 parent 0ef27da commit d0f2238

File tree

6 files changed

+20
-6
lines changed

6 files changed

+20
-6
lines changed

src/main/java/io/nats/client/api/ClusterInfo.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,20 @@
1616
import io.nats.client.support.JsonValue;
1717
import org.jspecify.annotations.Nullable;
1818

19+
import java.time.ZonedDateTime;
1920
import java.util.List;
2021

2122
import static io.nats.client.support.ApiConstants.*;
22-
import static io.nats.client.support.JsonValueUtils.readString;
23-
import static io.nats.client.support.JsonValueUtils.readValue;
23+
import static io.nats.client.support.JsonValueUtils.*;
2424

2525
/**
2626
* Information about the cluster a stream is part of.
2727
*/
2828
public class ClusterInfo {
29+
2930
private final String name;
3031
private final String leader;
32+
private final ZonedDateTime leaderSince;
3133
private final List<Replica> replicas;
3234

3335
static ClusterInfo optionalInstance(JsonValue v) {
@@ -38,6 +40,7 @@ static ClusterInfo optionalInstance(JsonValue v) {
3840
name = readString(v, NAME);
3941
leader = readString(v, LEADER);
4042
replicas = Replica.optionalListOf(readValue(v, REPLICAS));
43+
leaderSince = readDate(v, LEADER_SINCE);
4144
}
4245

4346
/**
@@ -58,6 +61,11 @@ public String getLeader() {
5861
return leader;
5962
}
6063

64+
@Nullable
65+
public ZonedDateTime getLeaderSince() {
66+
return leaderSince;
67+
}
68+
6169
/**
6270
* The members of the RAFT cluster. May be null if there are no replicas.
6371
* @return the replicas or null
@@ -70,9 +78,10 @@ public List<Replica> getReplicas() {
7078
@Override
7179
public String toString() {
7280
return "ClusterInfo{" +
73-
"name='" + name + '\'' +
74-
", leader='" + leader + '\'' +
75-
", replicas=" + replicas +
76-
'}';
81+
"name='" + name + '\'' +
82+
", leader='" + leader + '\'' +
83+
", leaderSince=" + leaderSince +
84+
", replicas=" + replicas +
85+
'}';
7786
}
7887
}

src/main/java/io/nats/client/support/ApiConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ public interface ApiConstants {
9999
String LAST_SEQ = "last_seq";
100100
String LAST_TS = "last_ts";
101101
String LEADER = "leader";
102+
String LEADER_SINCE = "leader_since";
102103
String LEVEL = "level";
103104
String LIMIT = "limit";
104105
String LIMITS = "limits";

src/test/java/io/nats/client/api/ConsumerInfoTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public void testConsumerInfo() {
7777
assertNotNull(clusterInfo);
7878
assertEquals("clustername", clusterInfo.getName());
7979
assertEquals("clusterleader", clusterInfo.getLeader());
80+
assertEquals(DateTimeUtils.parseDateTime("2025-08-29T19:33:21.163377Z"), clusterInfo.getLeaderSince());
8081
List<Replica> reps = clusterInfo.getReplicas();
8182
assertNotNull(reps);
8283
assertEquals(2, reps.size());

src/test/java/io/nats/client/api/StreamInfoTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ private void validateStreamInfo(StreamInfo si) {
131131
assertNotNull(cli.toString()); // coverage
132132
assertEquals("clustername", cli.getName());
133133
assertEquals("clusterleader", cli.getLeader());
134+
assertEquals(DateTimeUtils.parseDateTime("2025-08-29T19:33:21.163377Z"), cli.getLeaderSince());
134135

135136
assertNotNull(cli.getReplicas()); // coverage
136137
assertEquals(2, cli.getReplicas().size());

src/test/resources/data/ConsumerInfo.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"cluster": {
5353
"name": "clustername",
5454
"leader": "clusterleader",
55+
"leader_since": "2025-08-29T19:33:21.163377Z",
5556
"replicas": [
5657
{
5758
"name": "name0",

src/test/resources/data/StreamInfo.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
"cluster": {
5656
"name": "clustername",
5757
"leader": "clusterleader",
58+
"leader_since": "2025-08-29T19:33:21.163377Z",
5859
"replicas": [
5960
{
6061
"name": "name0",

0 commit comments

Comments
 (0)