Skip to content

Commit f80d42d

Browse files
authored
Stream state subjects as a map (#1177)
1 parent c2e2d18 commit f80d42d

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

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

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
import io.nats.client.support.JsonValue;
1717

1818
import java.time.ZonedDateTime;
19+
import java.util.HashMap;
1920
import java.util.List;
21+
import java.util.Map;
2022

2123
import static io.nats.client.support.ApiConstants.*;
2224
import static io.nats.client.support.JsonValueUtils.*;
@@ -34,6 +36,7 @@ public class StreamState {
3436
private final List<Subject> subjects;
3537
private final List<Long> deletedStreamSequences;
3638
private final LostStreamData lostStreamData;
39+
private final Map<String, Long> subjectMap;
3740

3841
StreamState(JsonValue vStreamState) {
3942
msgs = readLong(vStreamState, MESSAGES, 0);
@@ -48,6 +51,11 @@ public class StreamState {
4851
subjects = Subject.listOf(readValue(vStreamState, SUBJECTS));
4952
deletedStreamSequences = readLongList(vStreamState, DELETED);
5053
lostStreamData = LostStreamData.optionalInstance(readValue(vStreamState, LOST));
54+
55+
subjectMap = new HashMap<>();
56+
for (Subject s : subjects) {
57+
subjectMap.put(s.getName(), s.getCount());
58+
}
5159
}
5260

5361
/**
@@ -122,14 +130,22 @@ public long getSubjectCount() {
122130
}
123131

124132
/**
125-
* Get a list of the Subject objects. May be null if the Stream Info request did not ask for subjects
126-
* or if there are no subjects.
133+
* Get a list of the Subject objects. May be empty, for instance
134+
* if the Stream Info request did not ask for subjects or if there are no subjects.
127135
* @return the list of subjects
128136
*/
129137
public List<Subject> getSubjects() {
130138
return subjects;
131139
}
132140

141+
/**
142+
* Get a map of subjects instead of a list of Subject objects.
143+
* @return the map
144+
*/
145+
public Map<String, Long> getSubjectMap() {
146+
return subjectMap;
147+
}
148+
133149
/**
134150
* Gets the count of deleted messages
135151
*

src/test/java/io/nats/client/impl/JetStreamManagementTests.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ public void testGetStreamInfo() throws Exception {
403403
assertEquals(0, si.getStreamState().getSubjects().size());
404404
assertEquals(0, si.getStreamState().getDeletedCount());
405405
assertEquals(0, si.getStreamState().getDeleted().size());
406+
assertTrue(si.getStreamState().getSubjectMap().isEmpty());
406407

407408
if (nc.getServerInfo().isOlderThanVersion("2.10")) {
408409
assertNull(si.getTimestamp());
@@ -427,6 +428,7 @@ public void testGetStreamInfo() throws Exception {
427428
assertEquals(0, si.getStreamState().getSubjects().size());
428429
assertEquals(5, si.getStreamState().getDeletedCount());
429430
assertEquals(0, si.getStreamState().getDeleted().size());
431+
assertTrue(si.getStreamState().getSubjectMap().isEmpty());
430432

431433
si = jsm.getStreamInfo(stream, StreamInfoOptions.builder().allSubjects().deletedDetails().build());
432434
assertEquals(stream, si.getConfiguration().getName());
@@ -448,6 +450,7 @@ public void testGetStreamInfo() throws Exception {
448450
Subject sf = map.get(subjectIx5 + ".bar");
449451
assertNotNull(sf);
450452
assertEquals(6, sf.getCount());
453+
assertEquals(6, si.getStreamState().getSubjectMap().size());
451454

452455
for (PublishAck pa : packs) {
453456
assertTrue(si.getStreamState().getDeleted().contains(pa.getSeqno()));

0 commit comments

Comments
 (0)