diff --git a/src/main/java/io/nats/client/api/SourceBase.java b/src/main/java/io/nats/client/api/SourceBase.java index 9dfbdfa8c..3b499e427 100644 --- a/src/main/java/io/nats/client/api/SourceBase.java +++ b/src/main/java/io/nats/client/api/SourceBase.java @@ -29,7 +29,7 @@ import static io.nats.client.support.JsonUtils.beginJson; import static io.nats.client.support.JsonUtils.endJson; import static io.nats.client.support.JsonValueUtils.readValue; -import static io.nats.client.support.Validator.consumerFilterSubjectsAreEquivalent; +import static io.nats.client.support.Validator.listsAreEquivalent; public abstract class SourceBase implements JsonSerializable { private final String name; @@ -194,7 +194,7 @@ public boolean equals(Object o) { if (!Objects.equals(filterSubject, that.filterSubject)) return false; if (!Objects.equals(external, that.external)) return false; - return consumerFilterSubjectsAreEquivalent(subjectTransforms, that.subjectTransforms); + return listsAreEquivalent(subjectTransforms, that.subjectTransforms); } @Override diff --git a/src/main/java/io/nats/client/impl/NatsJetStream.java b/src/main/java/io/nats/client/impl/NatsJetStream.java index 4f2b85844..c3c612a0b 100644 --- a/src/main/java/io/nats/client/impl/NatsJetStream.java +++ b/src/main/java/io/nats/client/impl/NatsJetStream.java @@ -395,7 +395,7 @@ else if (!serverCC.getDeliverGroup().equals(settledDeliverGroup)) { settledFilterSubjects = serverCC.getFilterSubjects(); } } - else if (!consumerFilterSubjectsAreEquivalent(settledFilterSubjects, serverCC.getFilterSubjects())) { + else if (!listsAreEquivalent(settledFilterSubjects, serverCC.getFilterSubjects())) { throw JsSubSubjectDoesNotMatchFilter.instance(); } @@ -528,9 +528,9 @@ public List getChanges(ConsumerConfiguration serverCc) { if (deliverSubject != null && !deliverSubject.equals(serverCcc.deliverSubject)) { changes.add("deliverSubject"); } if (deliverGroup != null && !deliverGroup.equals(serverCcc.deliverGroup)) { changes.add("deliverGroup"); } - if (backoff != null && !consumerFilterSubjectsAreEquivalent(backoff, serverCcc.backoff)) { changes.add("backoff"); } + if (backoff != null && !listsAreEquivalent(backoff, serverCcc.backoff)) { changes.add("backoff"); } if (metadata != null && !mapsAreEquivalent(metadata, serverCcc.metadata)) { changes.add("metadata"); } - if (filterSubjects != null && !consumerFilterSubjectsAreEquivalent(filterSubjects, serverCcc.filterSubjects)) { changes.add("filterSubjects"); } + if (filterSubjects != null && !listsAreEquivalent(filterSubjects, serverCcc.filterSubjects)) { changes.add("filterSubjects"); } // do not need to check Durable because the original is retrieved by the durable name diff --git a/src/main/java/io/nats/client/support/ApiConstants.java b/src/main/java/io/nats/client/support/ApiConstants.java index e3479b4b8..823f60dcc 100644 --- a/src/main/java/io/nats/client/support/ApiConstants.java +++ b/src/main/java/io/nats/client/support/ApiConstants.java @@ -78,6 +78,7 @@ public interface ApiConstants { String FIRST_TS = "first_ts"; String FLOW_CONTROL = "flow_control"; String GO = "go"; + String GROUP = "group"; String HDRS = "hdrs"; String HEADERS = "headers"; String HEADERS_ONLY = "headers_only"; @@ -117,6 +118,8 @@ public interface ApiConstants { String MAX_STORAGE = "max_storage"; String MAX_STREAMS = "max_streams"; String MAX_WAITING = "max_waiting"; // this is correct! the meaning name is different than the field name + String MIN_PENDING = "min_pending"; + String MIN_ACK_PENDING = "min_ack_pending"; String MEM_STORAGE = "mem_storage"; String MEMORY = "memory"; String MEMORY_MAX_STREAM_BYTES = "memory_max_stream_bytes"; @@ -153,6 +156,8 @@ public interface ApiConstants { String PAUSE_UNTIL = "pause_until"; String PLACEMENT = "placement"; String PORT = "port"; + String PRIORITY_GROUPS = "priority_groups"; + String PRIORITY_POLICY = "priority_policy"; String PROCESSING_TIME = "processing_time"; String PROTO = "proto"; String PURGED = "purged"; diff --git a/src/main/java/io/nats/client/support/Status.java b/src/main/java/io/nats/client/support/Status.java index ecdf0ab79..dd2de4705 100644 --- a/src/main/java/io/nats/client/support/Status.java +++ b/src/main/java/io/nats/client/support/Status.java @@ -27,6 +27,7 @@ public class Status { public static final int NOT_FOUND_CODE = 404; public static final int REQUEST_TIMEOUT_CODE = 408; public static final int CONFLICT_CODE = 409; + public static final int EOB = 204; public static String BAD_REQUEST = "Bad Request"; // 400 public static String NO_MESSAGES = "No Messages"; // 404 diff --git a/src/main/java/io/nats/client/support/Validator.java b/src/main/java/io/nats/client/support/Validator.java index e8dcbf109..e650da816 100644 --- a/src/main/java/io/nats/client/support/Validator.java +++ b/src/main/java/io/nats/client/support/Validator.java @@ -623,7 +623,7 @@ public static boolean isSemVer(String s) { // This function tests filter subject equivalency // It does not care what order and also assumes that there are no duplicates. // From the server: consumer subject filters cannot overlap [10138] - public static boolean consumerFilterSubjectsAreEquivalent(List l1, List l2) + public static boolean listsAreEquivalent(List l1, List l2) { if (l1 == null || l1.isEmpty()) { return l2 == null || l2.isEmpty(); diff --git a/src/test/java/io/nats/client/support/ValidatorTests.java b/src/test/java/io/nats/client/support/ValidatorTests.java index 381dc1f38..2563db948 100644 --- a/src/test/java/io/nats/client/support/ValidatorTests.java +++ b/src/test/java/io/nats/client/support/ValidatorTests.java @@ -560,47 +560,47 @@ public void testConsumerFilterSubjectsAreEquivalent() { List l5 = null; List l6 = new ArrayList<>(); - assertTrue(consumerFilterSubjectsAreEquivalent(l1, l1)); - assertTrue(consumerFilterSubjectsAreEquivalent(l1, l2)); - assertFalse(consumerFilterSubjectsAreEquivalent(l1, l3)); - assertFalse(consumerFilterSubjectsAreEquivalent(l1, l4)); - assertFalse(consumerFilterSubjectsAreEquivalent(l1, l5)); - assertFalse(consumerFilterSubjectsAreEquivalent(l1, l6)); - - assertTrue(consumerFilterSubjectsAreEquivalent(l2, l1)); - assertTrue(consumerFilterSubjectsAreEquivalent(l2, l2)); - assertFalse(consumerFilterSubjectsAreEquivalent(l2, l3)); - assertFalse(consumerFilterSubjectsAreEquivalent(l2, l4)); - assertFalse(consumerFilterSubjectsAreEquivalent(l2, l5)); - assertFalse(consumerFilterSubjectsAreEquivalent(l2, l6)); - - assertFalse(consumerFilterSubjectsAreEquivalent(l3, l1)); - assertFalse(consumerFilterSubjectsAreEquivalent(l3, l2)); - assertTrue(consumerFilterSubjectsAreEquivalent(l3, l3)); - assertFalse(consumerFilterSubjectsAreEquivalent(l3, l4)); - assertFalse(consumerFilterSubjectsAreEquivalent(l3, l5)); - assertFalse(consumerFilterSubjectsAreEquivalent(l3, l6)); - - assertFalse(consumerFilterSubjectsAreEquivalent(l4, l1)); - assertFalse(consumerFilterSubjectsAreEquivalent(l4, l2)); - assertFalse(consumerFilterSubjectsAreEquivalent(l4, l3)); - assertTrue(consumerFilterSubjectsAreEquivalent(l4, l4)); - assertFalse(consumerFilterSubjectsAreEquivalent(l4, l5)); - assertFalse(consumerFilterSubjectsAreEquivalent(l4, l6)); - - assertFalse(consumerFilterSubjectsAreEquivalent(l5, l1)); - assertFalse(consumerFilterSubjectsAreEquivalent(l5, l2)); - assertFalse(consumerFilterSubjectsAreEquivalent(l5, l3)); - assertFalse(consumerFilterSubjectsAreEquivalent(l5, l4)); - assertTrue(consumerFilterSubjectsAreEquivalent(l5, l5)); - assertTrue(consumerFilterSubjectsAreEquivalent(l5, l6)); - - assertFalse(consumerFilterSubjectsAreEquivalent(l6, l1)); - assertFalse(consumerFilterSubjectsAreEquivalent(l6, l2)); - assertFalse(consumerFilterSubjectsAreEquivalent(l6, l3)); - assertFalse(consumerFilterSubjectsAreEquivalent(l6, l4)); - assertTrue(consumerFilterSubjectsAreEquivalent(l6, l5)); - assertTrue(consumerFilterSubjectsAreEquivalent(l6, l6)); + assertTrue(listsAreEquivalent(l1, l1)); + assertTrue(listsAreEquivalent(l1, l2)); + assertFalse(listsAreEquivalent(l1, l3)); + assertFalse(listsAreEquivalent(l1, l4)); + assertFalse(listsAreEquivalent(l1, l5)); + assertFalse(listsAreEquivalent(l1, l6)); + + assertTrue(listsAreEquivalent(l2, l1)); + assertTrue(listsAreEquivalent(l2, l2)); + assertFalse(listsAreEquivalent(l2, l3)); + assertFalse(listsAreEquivalent(l2, l4)); + assertFalse(listsAreEquivalent(l2, l5)); + assertFalse(listsAreEquivalent(l2, l6)); + + assertFalse(listsAreEquivalent(l3, l1)); + assertFalse(listsAreEquivalent(l3, l2)); + assertTrue(listsAreEquivalent(l3, l3)); + assertFalse(listsAreEquivalent(l3, l4)); + assertFalse(listsAreEquivalent(l3, l5)); + assertFalse(listsAreEquivalent(l3, l6)); + + assertFalse(listsAreEquivalent(l4, l1)); + assertFalse(listsAreEquivalent(l4, l2)); + assertFalse(listsAreEquivalent(l4, l3)); + assertTrue(listsAreEquivalent(l4, l4)); + assertFalse(listsAreEquivalent(l4, l5)); + assertFalse(listsAreEquivalent(l4, l6)); + + assertFalse(listsAreEquivalent(l5, l1)); + assertFalse(listsAreEquivalent(l5, l2)); + assertFalse(listsAreEquivalent(l5, l3)); + assertFalse(listsAreEquivalent(l5, l4)); + assertTrue(listsAreEquivalent(l5, l5)); + assertTrue(listsAreEquivalent(l5, l6)); + + assertFalse(listsAreEquivalent(l6, l1)); + assertFalse(listsAreEquivalent(l6, l2)); + assertFalse(listsAreEquivalent(l6, l3)); + assertFalse(listsAreEquivalent(l6, l4)); + assertTrue(listsAreEquivalent(l6, l5)); + assertTrue(listsAreEquivalent(l6, l6)); } @Test