From 9ec44a5e7c93145dedf4c63d4cfc8fef735eb990 Mon Sep 17 00:00:00 2001 From: YoEight Date: Mon, 3 Mar 2025 22:27:16 -0500 Subject: [PATCH 1/7] refactor!: move ExpectedRevision to StreamState. --- .../eventstore/dbclient/AppendToStream.java | 18 +++--- .../com/eventstore/dbclient/GrpcUtils.java | 4 +- .../OptionsWithExpectedRevisionBase.java | 10 ++-- ...ExpectedRevision.java => StreamState.java} | 58 +++++++++---------- .../com/eventstore/dbclient/WriteResult.java | 6 +- .../WrongExpectedVersionException.java | 12 ++-- .../dbclient/misc/ExpectedRevisionTests.java | 56 +++++++++--------- .../appending_events/AppendingEvents.java | 7 +-- .../opentelemetry/Instrumentation.java | 2 +- .../dbclient/streams/AppendTests.java | 4 +- .../dbclient/streams/DeleteTests.java | 2 +- .../StreamsTracingInstrumentationTests.java | 10 ++-- 12 files changed, 94 insertions(+), 95 deletions(-) rename db-client-java/src/main/java/com/eventstore/dbclient/{ExpectedRevision.java => StreamState.java} (76%) diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java b/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java index 2f3a8140..acc5059c 100644 --- a/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java +++ b/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java @@ -58,28 +58,28 @@ private CompletableFuture append(ManagedChannel channel, List extends OptionsBase { - private ExpectedRevision expectedRevision; + private StreamState expectedRevision; protected OptionsWithExpectedRevisionBase() { - this.expectedRevision = ExpectedRevision.any(); + this.expectedRevision = StreamState.any(); } - ExpectedRevision getExpectedRevision() { + StreamState getExpectedRevision() { return this.expectedRevision; } @@ -18,7 +18,7 @@ ExpectedRevision getExpectedRevision() { * @return updated options. */ @SuppressWarnings("unchecked") - public T expectedRevision(ExpectedRevision revision) { + public T expectedRevision(StreamState revision) { this.expectedRevision = revision; return (T) this; } @@ -31,6 +31,6 @@ public T expectedRevision(ExpectedRevision revision) { * @return updated options. */ public T expectedRevision(long revision) { - return expectedRevision(ExpectedRevision.expectedRevision(revision)); + return expectedRevision(StreamState.streamRevision(revision)); } } diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/ExpectedRevision.java b/db-client-java/src/main/java/com/eventstore/dbclient/StreamState.java similarity index 76% rename from db-client-java/src/main/java/com/eventstore/dbclient/ExpectedRevision.java rename to db-client-java/src/main/java/com/eventstore/dbclient/StreamState.java index c04d8271..68210f6f 100644 --- a/db-client-java/src/main/java/com/eventstore/dbclient/ExpectedRevision.java +++ b/db-client-java/src/main/java/com/eventstore/dbclient/StreamState.java @@ -14,66 +14,66 @@ * guarantee it. Any other ExpectedRevision instances are meant for optimistic concurrency checks. *

*/ -public abstract class ExpectedRevision { +public abstract class StreamState { /** * This writes should not conflict with anything and should always succeed. */ - public static ExpectedRevision any() { - return new AnyExpectedRevision(); + public static StreamState any() { + return new AnyStreamState(); } /** * The stream being written to should not yet exist. If it does exist, treats that as a concurrency problem. */ - public static ExpectedRevision noStream() { - return new NoStreamExpectedRevision(); + public static StreamState noStream() { + return new NoStreamState(); } /** * The stream should exist. If it or a metadata stream does not exist, treats that as a concurrency problem. */ - public static ExpectedRevision streamExists() { - return new StreamExistsExpectedRevision(); + public static StreamState streamExists() { + return new StreamExistsState(); } /** * States that the last event written to the stream should have an event revision matching your expected value. */ - public static ExpectedRevision expectedRevision(long revision) { - return new SpecificExpectedRevision(revision); + public static StreamState streamRevision(long revision) { + return new StreamRevisionStreamState(revision); } - public static ExpectedRevision fromRawLong(long revision) { + public static StreamState fromRawLong(long revision) { if (revision == -1) - return ExpectedRevision.noStream(); + return StreamState.noStream(); if (revision == -2) - return ExpectedRevision.any(); + return StreamState.any(); if (revision == -4) - return ExpectedRevision.streamExists(); + return StreamState.streamExists(); if (revision < 0) - throw new RuntimeException(String.format("Invalid expected revision long representation '%s'", revision)); + throw new RuntimeException(String.format("Invalid stream revision long representation '%s'", revision)); - return ExpectedRevision.expectedRevision(revision); + return StreamState.streamRevision(revision); } - ExpectedRevision() {} + StreamState() {} abstract StreamsOuterClass.AppendReq.Options.Builder applyOnWire(StreamsOuterClass.AppendReq.Options.Builder options); abstract StreamsOuterClass.DeleteReq.Options.Builder applyOnWire(StreamsOuterClass.DeleteReq.Options.Builder options); abstract StreamsOuterClass.TombstoneReq.Options.Builder applyOnWire(StreamsOuterClass.TombstoneReq.Options.Builder options); public long toRawLong() { - if (this instanceof NoStreamExpectedRevision) + if (this instanceof NoStreamState) return -1; - if (this instanceof AnyExpectedRevision) + if (this instanceof AnyStreamState) return -2; - if (this instanceof StreamExistsExpectedRevision) + if (this instanceof StreamExistsState) return -4; - SpecificExpectedRevision revision = (SpecificExpectedRevision) this; + StreamRevisionStreamState revision = (StreamRevisionStreamState) this; return revision.version; } @@ -89,7 +89,7 @@ public int hashCode() { return Objects.hash(getClass()); } - public static class NoStreamExpectedRevision extends ExpectedRevision { + public static class NoStreamState extends StreamState { @Override public StreamsOuterClass.AppendReq.Options.Builder applyOnWire(StreamsOuterClass.AppendReq.Options.Builder options) { return options.setNoStream(Shared.Empty.getDefaultInstance()); @@ -107,11 +107,11 @@ public StreamsOuterClass.TombstoneReq.Options.Builder applyOnWire(StreamsOuterCl @Override public String toString() { - return "ExpectedNoStream"; + return "NoStreamState"; } } - public static class AnyExpectedRevision extends ExpectedRevision { + public static class AnyStreamState extends StreamState { @Override public StreamsOuterClass.AppendReq.Options.Builder applyOnWire(StreamsOuterClass.AppendReq.Options.Builder options) { return options.setAny(Shared.Empty.getDefaultInstance()); @@ -129,11 +129,11 @@ public StreamsOuterClass.TombstoneReq.Options.Builder applyOnWire(StreamsOuterCl @Override public String toString() { - return "ExpectedAny"; + return "AnyStreamState"; } } - public static class StreamExistsExpectedRevision extends ExpectedRevision { + public static class StreamExistsState extends StreamState { @Override public StreamsOuterClass.AppendReq.Options.Builder applyOnWire(StreamsOuterClass.AppendReq.Options.Builder options) { return options.setStreamExists(Shared.Empty.getDefaultInstance()); @@ -151,14 +151,14 @@ public StreamsOuterClass.TombstoneReq.Options.Builder applyOnWire(StreamsOuterCl @Override public String toString() { - return "ExpectedStreamExists"; + return "StreamsExistsState"; } } - public static class SpecificExpectedRevision extends ExpectedRevision { + public static class StreamRevisionStreamState extends StreamState { final long version; - SpecificExpectedRevision(long version) { + StreamRevisionStreamState(long version) { this.version = version; } @@ -166,7 +166,7 @@ public static class SpecificExpectedRevision extends ExpectedRevision { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - SpecificExpectedRevision that = (SpecificExpectedRevision) o; + StreamRevisionStreamState that = (StreamRevisionStreamState) o; return version == that.version; } diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/WriteResult.java b/db-client-java/src/main/java/com/eventstore/dbclient/WriteResult.java index 941fa1d6..87dd82f7 100644 --- a/db-client-java/src/main/java/com/eventstore/dbclient/WriteResult.java +++ b/db-client-java/src/main/java/com/eventstore/dbclient/WriteResult.java @@ -6,10 +6,10 @@ * Returned after writing to a stream. */ public class WriteResult { - private final ExpectedRevision nextExpectedRevision; + private final StreamState nextExpectedRevision; private final Position logPosition; - WriteResult(ExpectedRevision nextExpectedRevision, Position logPosition) { + WriteResult(StreamState nextExpectedRevision, Position logPosition) { this.nextExpectedRevision = nextExpectedRevision; this.logPosition = logPosition; } @@ -17,7 +17,7 @@ public class WriteResult { /** * Next expected version of the stream. */ - public ExpectedRevision getNextExpectedRevision() { + public StreamState getNextExpectedRevision() { return nextExpectedRevision; } diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/WrongExpectedVersionException.java b/db-client-java/src/main/java/com/eventstore/dbclient/WrongExpectedVersionException.java index 7c7e31e3..3fc82484 100644 --- a/db-client-java/src/main/java/com/eventstore/dbclient/WrongExpectedVersionException.java +++ b/db-client-java/src/main/java/com/eventstore/dbclient/WrongExpectedVersionException.java @@ -7,13 +7,13 @@ */ public class WrongExpectedVersionException extends RuntimeException { private final String streamName; - private final ExpectedRevision nextExpectedRevision; - private final ExpectedRevision actualRevision; + private final StreamState nextExpectedRevision; + private final StreamState actualRevision; WrongExpectedVersionException( @NotNull String streamName, - @NotNull ExpectedRevision nextExpected, - @NotNull ExpectedRevision actualRevision) { + @NotNull StreamState nextExpected, + @NotNull StreamState actualRevision) { super(String.format("Expected %s but got %s instead", nextExpected, actualRevision)); this.streamName = streamName; this.nextExpectedRevision = nextExpected; @@ -30,14 +30,14 @@ public String getStreamName() { /** * Returns the expected revision by the request. */ - public ExpectedRevision getNextExpectedRevision() { + public StreamState getNextExpectedRevision() { return nextExpectedRevision; } /** * Returns the actual revision of the stream when the check was performed. */ - public ExpectedRevision getActualVersion() { + public StreamState getActualVersion() { return actualRevision; } } diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java b/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java index 8c3c8ed4..9246fac6 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java @@ -1,7 +1,7 @@ package com.eventstore.dbclient.misc; -import com.eventstore.dbclient.ExpectedRevision; +import com.eventstore.dbclient.StreamState; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -9,52 +9,52 @@ public class ExpectedRevisionTests { @Test public void testExpectedRevisionEquality() { - Assertions.assertEquals(ExpectedRevision.any(), new ExpectedRevision.AnyExpectedRevision()); - Assertions.assertEquals(ExpectedRevision.noStream(), new ExpectedRevision.NoStreamExpectedRevision()); - Assertions.assertEquals(ExpectedRevision.streamExists(), new ExpectedRevision.StreamExistsExpectedRevision()); - Assertions.assertEquals(ExpectedRevision.expectedRevision(1L), ExpectedRevision.expectedRevision(1L)); + Assertions.assertEquals(StreamState.any(), new StreamState.AnyStreamState()); + Assertions.assertEquals(StreamState.noStream(), new StreamState.NoStreamState()); + Assertions.assertEquals(StreamState.streamExists(), new StreamState.StreamExistsState()); + Assertions.assertEquals(StreamState.streamRevision(1L), StreamState.streamRevision(1L)); } @Test public void testExpectedRevisionNonEquality() { - Assertions.assertNotEquals(ExpectedRevision.any(), ExpectedRevision.noStream()); - Assertions.assertNotEquals(ExpectedRevision.any(), ExpectedRevision.streamExists()); - Assertions.assertNotEquals(ExpectedRevision.any(), ExpectedRevision.expectedRevision(0L)); - Assertions.assertNotEquals(ExpectedRevision.noStream(), ExpectedRevision.streamExists()); - Assertions.assertNotEquals(ExpectedRevision.noStream(), ExpectedRevision.expectedRevision(0L)); - Assertions.assertNotEquals(ExpectedRevision.streamExists(), ExpectedRevision.expectedRevision(0L)); + Assertions.assertNotEquals(StreamState.any(), StreamState.noStream()); + Assertions.assertNotEquals(StreamState.any(), StreamState.streamExists()); + Assertions.assertNotEquals(StreamState.any(), StreamState.streamRevision(0L)); + Assertions.assertNotEquals(StreamState.noStream(), StreamState.streamExists()); + Assertions.assertNotEquals(StreamState.noStream(), StreamState.streamRevision(0L)); + Assertions.assertNotEquals(StreamState.streamExists(), StreamState.streamRevision(0L)); } @Test public void testExpectedRevisionHashCode() { - Assertions.assertEquals(ExpectedRevision.any().hashCode(), new ExpectedRevision.AnyExpectedRevision().hashCode()); - Assertions.assertEquals(ExpectedRevision.noStream().hashCode(), new ExpectedRevision.NoStreamExpectedRevision().hashCode()); - Assertions.assertEquals(ExpectedRevision.streamExists().hashCode(), new ExpectedRevision.StreamExistsExpectedRevision().hashCode()); - Assertions.assertEquals(ExpectedRevision.expectedRevision(1L).hashCode(), ExpectedRevision.expectedRevision(1L).hashCode()); + Assertions.assertEquals(StreamState.any().hashCode(), new StreamState.AnyStreamState().hashCode()); + Assertions.assertEquals(StreamState.noStream().hashCode(), new StreamState.NoStreamState().hashCode()); + Assertions.assertEquals(StreamState.streamExists().hashCode(), new StreamState.StreamExistsState().hashCode()); + Assertions.assertEquals(StreamState.streamRevision(1L).hashCode(), StreamState.streamRevision(1L).hashCode()); } @Test public void testHumanRepresentation() { - Assertions.assertEquals("ExpectedAny", ExpectedRevision.any().toString()); - Assertions.assertEquals("ExpectedStreamExists", ExpectedRevision.streamExists().toString()); - Assertions.assertEquals("ExpectedNoStream", ExpectedRevision.noStream().toString()); - Assertions.assertEquals("42", ExpectedRevision.expectedRevision(42).toString()); + Assertions.assertEquals("ExpectedAny", StreamState.any().toString()); + Assertions.assertEquals("ExpectedStreamExists", StreamState.streamExists().toString()); + Assertions.assertEquals("ExpectedNoStream", StreamState.noStream().toString()); + Assertions.assertEquals("42", StreamState.streamRevision(42).toString()); } @Test public void testRawLong() { - Assertions.assertEquals(-2, ExpectedRevision.any().toRawLong()); - Assertions.assertEquals(-1, ExpectedRevision.noStream().toRawLong()); - Assertions.assertEquals(-4, ExpectedRevision.streamExists().toRawLong()); - Assertions.assertEquals(42, ExpectedRevision.expectedRevision(42).toRawLong()); + Assertions.assertEquals(-2, StreamState.any().toRawLong()); + Assertions.assertEquals(-1, StreamState.noStream().toRawLong()); + Assertions.assertEquals(-4, StreamState.streamExists().toRawLong()); + Assertions.assertEquals(42, StreamState.streamRevision(42).toRawLong()); } @Test public void testRawLongConversion() { - Assertions.assertEquals(ExpectedRevision.fromRawLong(-2), ExpectedRevision.any()); - Assertions.assertEquals(ExpectedRevision.fromRawLong(-1), ExpectedRevision.noStream()); - Assertions.assertEquals(ExpectedRevision.fromRawLong(-4), ExpectedRevision.streamExists()); - Assertions.assertEquals(ExpectedRevision.fromRawLong(42), ExpectedRevision.expectedRevision(42)); - Assertions.assertThrowsExactly(RuntimeException.class, () -> ExpectedRevision.fromRawLong(-5)); + Assertions.assertEquals(StreamState.fromRawLong(-2), StreamState.any()); + Assertions.assertEquals(StreamState.fromRawLong(-1), StreamState.noStream()); + Assertions.assertEquals(StreamState.fromRawLong(-4), StreamState.streamExists()); + Assertions.assertEquals(StreamState.fromRawLong(42), StreamState.streamRevision(42)); + Assertions.assertThrowsExactly(RuntimeException.class, () -> StreamState.fromRawLong(-5)); } } diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/samples/appending_events/AppendingEvents.java b/db-client-java/src/test/java/com/eventstore/dbclient/samples/appending_events/AppendingEvents.java index 9a3e04e8..101af3b5 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/samples/appending_events/AppendingEvents.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/samples/appending_events/AppendingEvents.java @@ -3,7 +3,6 @@ import com.eventstore.dbclient.*; import com.eventstore.dbclient.samples.TestEvent; -import java.util.List; import java.util.UUID; import java.util.concurrent.ExecutionException; @@ -21,7 +20,7 @@ private static void appendToStream(EventStoreDBClient client) throws ExecutionEx .build(); AppendToStreamOptions options = AppendToStreamOptions.get() - .expectedRevision(ExpectedRevision.noStream()); + .expectedRevision(StreamState.noStream()); client.appendToStream("some-stream", options, eventData) .get(); @@ -41,7 +40,7 @@ private static void appendWithSameId(EventStoreDBClient client) throws Execution .build(); AppendToStreamOptions options = AppendToStreamOptions.get() - .expectedRevision(ExpectedRevision.any()); + .expectedRevision(StreamState.any()); client.appendToStream("same-event-stream", options, eventData) .get(); @@ -75,7 +74,7 @@ private static void appendWithNoStream(EventStoreDBClient client) throws Executi .build(); AppendToStreamOptions options = AppendToStreamOptions.get() - .expectedRevision(ExpectedRevision.noStream()); + .expectedRevision(StreamState.noStream()); client.appendToStream("no-stream-stream", options, eventDataOne) .get(); diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/samples/opentelemetry/Instrumentation.java b/db-client-java/src/test/java/com/eventstore/dbclient/samples/opentelemetry/Instrumentation.java index e505eca7..79796baf 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/samples/opentelemetry/Instrumentation.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/samples/opentelemetry/Instrumentation.java @@ -55,7 +55,7 @@ private static void tracing(EventStoreDBClient client) throws ExecutionException // endregion setup-client-for-tracing AppendToStreamOptions options = AppendToStreamOptions.get() - .expectedRevision(ExpectedRevision.any()); + .expectedRevision(StreamState.any()); WriteResult appendResult = client.appendToStream("some-stream", options, eventData) .get(); diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/streams/AppendTests.java b/db-client-java/src/test/java/com/eventstore/dbclient/streams/AppendTests.java index b2b5ff24..91958985 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/streams/AppendTests.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/streams/AppendTests.java @@ -24,12 +24,12 @@ default void testAppendSingleEventNoStream() throws Throwable { .build(); AppendToStreamOptions appendOptions = AppendToStreamOptions.get() - .expectedRevision(ExpectedRevision.noStream()); + .expectedRevision(StreamState.noStream()); WriteResult appendResult = client.appendToStream(streamName, appendOptions, event) .get(); - Assertions.assertEquals(ExpectedRevision.expectedRevision(0), appendResult.getNextExpectedRevision()); + Assertions.assertEquals(StreamState.streamRevision(0), appendResult.getNextExpectedRevision()); ReadStreamOptions readStreamOptions = ReadStreamOptions.get() .fromEnd() diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/streams/DeleteTests.java b/db-client-java/src/test/java/com/eventstore/dbclient/streams/DeleteTests.java index 57f9bd2f..788e77a5 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/streams/DeleteTests.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/streams/DeleteTests.java @@ -39,7 +39,7 @@ default void testDeleteStreamWhenDoesntExist() throws Throwable { String streamName = generateName(); DeleteStreamOptions options = DeleteStreamOptions.get() - .expectedRevision(ExpectedRevision.streamExists()); + .expectedRevision(StreamState.streamExists()); Assertions.assertThrows(WrongExpectedVersionException.class, () -> { try { diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/telemetry/StreamsTracingInstrumentationTests.java b/db-client-java/src/test/java/com/eventstore/dbclient/telemetry/StreamsTracingInstrumentationTests.java index 8cb2fe07..4e9ebdb9 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/telemetry/StreamsTracingInstrumentationTests.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/telemetry/StreamsTracingInstrumentationTests.java @@ -23,7 +23,7 @@ default void testAppendIsInstrumentedWithTracingAsExpected() throws Throwable { client.appendToStream( streamName, - AppendToStreamOptions.get().expectedRevision(ExpectedRevision.noStream()), + AppendToStreamOptions.get().expectedRevision(StreamState.noStream()), EventData.builderAsJson("TestEvent", mapper.writeValueAsBytes(new Foo())) .eventId(UUID.randomUUID()) .build()) @@ -42,7 +42,7 @@ default void testTracingContextIsInjectedAsExpectedWhenUserMetadataIsJsonObject( client.appendToStream( streamName, - AppendToStreamOptions.get().expectedRevision(ExpectedRevision.noStream()), + AppendToStreamOptions.get().expectedRevision(StreamState.noStream()), EventData.builderAsJson("TestEvent", mapper.writeValueAsBytes(new Foo())) .metadataAsBytes(mapper.writeValueAsBytes(new Foo())) .eventId(UUID.randomUUID()) @@ -82,7 +82,7 @@ default void testTracingContextInjectionIsIgnoredAsExpectedWhenUserMetadataIsNon client.appendToStream( streamName, - AppendToStreamOptions.get().expectedRevision(ExpectedRevision.noStream()), + AppendToStreamOptions.get().expectedRevision(StreamState.noStream()), eventWithValidMetadata, eventWithInvalidMetadata) .get(); @@ -132,7 +132,7 @@ default void testAppendInstrumentationHandlesExceptionsAsExpected() throws Throw client.appendToStream( streamName, // Force WrongExpectedVersionException to be thrown. - AppendToStreamOptions.get().expectedRevision(ExpectedRevision.streamExists()), + AppendToStreamOptions.get().expectedRevision(StreamState.streamExists()), EventData.builderAsJson("TestEvent", mapper.writeValueAsBytes(new Foo())) .eventId(UUID.randomUUID()) .build()) @@ -263,7 +263,7 @@ default void testCatchupSubscriptionTracingIsNotRestoredOnDeletedEvents() throws WriteResult appendResult = client.appendToStream(streamName, events).get(); Assertions.assertNotNull(appendResult); - DeleteResult deleteResult = client.deleteStream(streamName, DeleteStreamOptions.get().expectedRevision(ExpectedRevision.streamExists())).get(); + DeleteResult deleteResult = client.deleteStream(streamName, DeleteStreamOptions.get().expectedRevision(StreamState.streamExists())).get(); Assertions.assertNotNull(deleteResult); CountDownLatch subscribeSpansLatch = new CountDownLatch(events.length); From e336ad5f343272fc733321d282fbd5cb8c53ce45 Mon Sep 17 00:00:00 2001 From: YoEight Date: Mon, 3 Mar 2025 22:35:52 -0500 Subject: [PATCH 2/7] fixup --- .../eventstore/dbclient/AppendToStream.java | 2 +- .../dbclient/AppendToStreamOptions.java | 2 +- .../com/eventstore/dbclient/DeleteStream.java | 5 ++- .../dbclient/DeleteStreamOptions.java | 2 +- .../OptionsWithExpectedRevisionBase.java | 36 ------------------- .../dbclient/OptionsWithStreamStateBase.java | 36 +++++++++++++++++++ .../appending_events/AppendingEvents.java | 8 ++--- .../opentelemetry/Instrumentation.java | 2 +- .../dbclient/streams/AppendTests.java | 2 +- .../dbclient/streams/DeleteTests.java | 2 +- .../StreamsTracingInstrumentationTests.java | 10 +++--- 11 files changed, 53 insertions(+), 54 deletions(-) delete mode 100644 db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithExpectedRevisionBase.java create mode 100644 db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithStreamStateBase.java diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java b/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java index acc5059c..8935dada 100644 --- a/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java +++ b/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java @@ -42,7 +42,7 @@ public CompletableFuture execute() { private CompletableFuture append(ManagedChannel channel, List events) { CompletableFuture result = new CompletableFuture<>(); - StreamsOuterClass.AppendReq.Options.Builder options = this.options.getExpectedRevision().applyOnWire(StreamsOuterClass.AppendReq.Options.newBuilder() + StreamsOuterClass.AppendReq.Options.Builder options = this.options.getStreamState().applyOnWire(StreamsOuterClass.AppendReq.Options.newBuilder() .setStreamIdentifier(Shared.StreamIdentifier.newBuilder() .setStreamName(ByteString.copyFromUtf8(streamName)) .build())); diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStreamOptions.java b/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStreamOptions.java index 12d657fb..2b572a88 100644 --- a/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStreamOptions.java +++ b/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStreamOptions.java @@ -3,7 +3,7 @@ /** * Options of the append stream request. */ -public class AppendToStreamOptions extends OptionsWithExpectedRevisionBase { +public class AppendToStreamOptions extends OptionsWithStreamStateBase { private AppendToStreamOptions() { } diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/DeleteStream.java b/db-client-java/src/main/java/com/eventstore/dbclient/DeleteStream.java index ffd13568..422de9c4 100644 --- a/db-client-java/src/main/java/com/eventstore/dbclient/DeleteStream.java +++ b/db-client-java/src/main/java/com/eventstore/dbclient/DeleteStream.java @@ -4,7 +4,6 @@ import com.eventstore.dbclient.proto.streams.StreamsGrpc; import com.eventstore.dbclient.proto.streams.StreamsOuterClass; import com.google.protobuf.ByteString; -import io.grpc.Metadata; import java.util.concurrent.CompletableFuture; @@ -28,7 +27,7 @@ public CompletableFuture execute() { if (this.softDelete) { StreamsOuterClass.DeleteReq req = StreamsOuterClass.DeleteReq.newBuilder() - .setOptions(this.options.getExpectedRevision().applyOnWire(StreamsOuterClass.DeleteReq.Options.newBuilder() + .setOptions(this.options.getStreamState().applyOnWire(StreamsOuterClass.DeleteReq.Options.newBuilder() .setStreamIdentifier(Shared.StreamIdentifier.newBuilder() .setStreamName(ByteString.copyFromUtf8(streamName)) .build()))) @@ -45,7 +44,7 @@ public CompletableFuture execute() { } StreamsOuterClass.TombstoneReq req = StreamsOuterClass.TombstoneReq.newBuilder() - .setOptions(this.options.getExpectedRevision().applyOnWire(StreamsOuterClass.TombstoneReq.Options.newBuilder() + .setOptions(this.options.getStreamState().applyOnWire(StreamsOuterClass.TombstoneReq.Options.newBuilder() .setStreamIdentifier(Shared.StreamIdentifier.newBuilder() .setStreamName(ByteString.copyFromUtf8(streamName)) .build()))) diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/DeleteStreamOptions.java b/db-client-java/src/main/java/com/eventstore/dbclient/DeleteStreamOptions.java index 062af4d4..c2a3928f 100644 --- a/db-client-java/src/main/java/com/eventstore/dbclient/DeleteStreamOptions.java +++ b/db-client-java/src/main/java/com/eventstore/dbclient/DeleteStreamOptions.java @@ -3,7 +3,7 @@ /** * Options of the delete or tombstone stream request. */ -public class DeleteStreamOptions extends OptionsWithExpectedRevisionBase { +public class DeleteStreamOptions extends OptionsWithStreamStateBase { DeleteStreamOptions() {} /** diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithExpectedRevisionBase.java b/db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithExpectedRevisionBase.java deleted file mode 100644 index 12e74465..00000000 --- a/db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithExpectedRevisionBase.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.eventstore.dbclient; - -class OptionsWithExpectedRevisionBase extends OptionsBase { - private StreamState expectedRevision; - - protected OptionsWithExpectedRevisionBase() { - this.expectedRevision = StreamState.any(); - } - - StreamState getExpectedRevision() { - return this.expectedRevision; - } - - /** - * Asks the server to check that the stream receiving is at the given expected version. - - * @param revision - expected revision. - * @return updated options. - */ - @SuppressWarnings("unchecked") - public T expectedRevision(StreamState revision) { - this.expectedRevision = revision; - return (T) this; - } - - - /** - * Asks the server to check that the stream receiving is at the given expected version. - - * @param revision - expected revision. - * @return updated options. - */ - public T expectedRevision(long revision) { - return expectedRevision(StreamState.streamRevision(revision)); - } -} diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithStreamStateBase.java b/db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithStreamStateBase.java new file mode 100644 index 00000000..036c208a --- /dev/null +++ b/db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithStreamStateBase.java @@ -0,0 +1,36 @@ +package com.eventstore.dbclient; + +class OptionsWithStreamStateBase extends OptionsBase { + private StreamState streamState; + + protected OptionsWithStreamStateBase() { + this.streamState = StreamState.any(); + } + + StreamState getStreamState() { + return this.streamState; + } + + /** + * Asks the server to check that the stream receiving is at the expected state. + + * @param state - expected revision. + * @return updated options. + */ + @SuppressWarnings("unchecked") + public T streamState(StreamState state) { + this.streamState = state; + return (T) this; + } + + + /** + * Asks the server to check that the stream receiving is at the given expected version. + + * @param revision - expected revision. + * @return updated options. + */ + public T streamRevision(long revision) { + return streamState(StreamState.streamRevision(revision)); + } +} diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/samples/appending_events/AppendingEvents.java b/db-client-java/src/test/java/com/eventstore/dbclient/samples/appending_events/AppendingEvents.java index 101af3b5..ae157093 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/samples/appending_events/AppendingEvents.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/samples/appending_events/AppendingEvents.java @@ -20,7 +20,7 @@ private static void appendToStream(EventStoreDBClient client) throws ExecutionEx .build(); AppendToStreamOptions options = AppendToStreamOptions.get() - .expectedRevision(StreamState.noStream()); + .streamState(StreamState.noStream()); client.appendToStream("some-stream", options, eventData) .get(); @@ -40,7 +40,7 @@ private static void appendWithSameId(EventStoreDBClient client) throws Execution .build(); AppendToStreamOptions options = AppendToStreamOptions.get() - .expectedRevision(StreamState.any()); + .streamState(StreamState.any()); client.appendToStream("same-event-stream", options, eventData) .get(); @@ -74,7 +74,7 @@ private static void appendWithNoStream(EventStoreDBClient client) throws Executi .build(); AppendToStreamOptions options = AppendToStreamOptions.get() - .expectedRevision(StreamState.noStream()); + .streamState(StreamState.noStream()); client.appendToStream("no-stream-stream", options, eventDataOne) .get(); @@ -117,7 +117,7 @@ private static void appendWithConcurrencyCheck(EventStoreDBClient client) throws AppendToStreamOptions options = AppendToStreamOptions.get() - .expectedRevision(result.getLastStreamPosition()); + .streamRevision(result.getLastStreamPosition()); client.appendToStream("concurrency-stream", options, clientOneData) .get(); diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/samples/opentelemetry/Instrumentation.java b/db-client-java/src/test/java/com/eventstore/dbclient/samples/opentelemetry/Instrumentation.java index 79796baf..ab1ad3a6 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/samples/opentelemetry/Instrumentation.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/samples/opentelemetry/Instrumentation.java @@ -55,7 +55,7 @@ private static void tracing(EventStoreDBClient client) throws ExecutionException // endregion setup-client-for-tracing AppendToStreamOptions options = AppendToStreamOptions.get() - .expectedRevision(StreamState.any()); + .streamState(StreamState.any()); WriteResult appendResult = client.appendToStream("some-stream", options, eventData) .get(); diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/streams/AppendTests.java b/db-client-java/src/test/java/com/eventstore/dbclient/streams/AppendTests.java index 91958985..58e76c5a 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/streams/AppendTests.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/streams/AppendTests.java @@ -24,7 +24,7 @@ default void testAppendSingleEventNoStream() throws Throwable { .build(); AppendToStreamOptions appendOptions = AppendToStreamOptions.get() - .expectedRevision(StreamState.noStream()); + .streamState(StreamState.noStream()); WriteResult appendResult = client.appendToStream(streamName, appendOptions, event) .get(); diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/streams/DeleteTests.java b/db-client-java/src/test/java/com/eventstore/dbclient/streams/DeleteTests.java index 788e77a5..3298b781 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/streams/DeleteTests.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/streams/DeleteTests.java @@ -39,7 +39,7 @@ default void testDeleteStreamWhenDoesntExist() throws Throwable { String streamName = generateName(); DeleteStreamOptions options = DeleteStreamOptions.get() - .expectedRevision(StreamState.streamExists()); + .streamState(StreamState.streamExists()); Assertions.assertThrows(WrongExpectedVersionException.class, () -> { try { diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/telemetry/StreamsTracingInstrumentationTests.java b/db-client-java/src/test/java/com/eventstore/dbclient/telemetry/StreamsTracingInstrumentationTests.java index 4e9ebdb9..00f762b1 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/telemetry/StreamsTracingInstrumentationTests.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/telemetry/StreamsTracingInstrumentationTests.java @@ -23,7 +23,7 @@ default void testAppendIsInstrumentedWithTracingAsExpected() throws Throwable { client.appendToStream( streamName, - AppendToStreamOptions.get().expectedRevision(StreamState.noStream()), + AppendToStreamOptions.get().streamState(StreamState.noStream()), EventData.builderAsJson("TestEvent", mapper.writeValueAsBytes(new Foo())) .eventId(UUID.randomUUID()) .build()) @@ -42,7 +42,7 @@ default void testTracingContextIsInjectedAsExpectedWhenUserMetadataIsJsonObject( client.appendToStream( streamName, - AppendToStreamOptions.get().expectedRevision(StreamState.noStream()), + AppendToStreamOptions.get().streamState(StreamState.noStream()), EventData.builderAsJson("TestEvent", mapper.writeValueAsBytes(new Foo())) .metadataAsBytes(mapper.writeValueAsBytes(new Foo())) .eventId(UUID.randomUUID()) @@ -82,7 +82,7 @@ default void testTracingContextInjectionIsIgnoredAsExpectedWhenUserMetadataIsNon client.appendToStream( streamName, - AppendToStreamOptions.get().expectedRevision(StreamState.noStream()), + AppendToStreamOptions.get().streamState(StreamState.noStream()), eventWithValidMetadata, eventWithInvalidMetadata) .get(); @@ -132,7 +132,7 @@ default void testAppendInstrumentationHandlesExceptionsAsExpected() throws Throw client.appendToStream( streamName, // Force WrongExpectedVersionException to be thrown. - AppendToStreamOptions.get().expectedRevision(StreamState.streamExists()), + AppendToStreamOptions.get().streamState(StreamState.streamExists()), EventData.builderAsJson("TestEvent", mapper.writeValueAsBytes(new Foo())) .eventId(UUID.randomUUID()) .build()) @@ -263,7 +263,7 @@ default void testCatchupSubscriptionTracingIsNotRestoredOnDeletedEvents() throws WriteResult appendResult = client.appendToStream(streamName, events).get(); Assertions.assertNotNull(appendResult); - DeleteResult deleteResult = client.deleteStream(streamName, DeleteStreamOptions.get().expectedRevision(StreamState.streamExists())).get(); + DeleteResult deleteResult = client.deleteStream(streamName, DeleteStreamOptions.get().streamState(StreamState.streamExists())).get(); Assertions.assertNotNull(deleteResult); CountDownLatch subscribeSpansLatch = new CountDownLatch(events.length); From 3e1884b157feba05a55bfce68a18c33a265963ad Mon Sep 17 00:00:00 2001 From: YoEight Date: Mon, 3 Mar 2025 22:37:08 -0500 Subject: [PATCH 3/7] fixup --- .../com/eventstore/dbclient/OptionsWithStreamStateBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithStreamStateBase.java b/db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithStreamStateBase.java index 036c208a..24776b27 100644 --- a/db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithStreamStateBase.java +++ b/db-client-java/src/main/java/com/eventstore/dbclient/OptionsWithStreamStateBase.java @@ -25,7 +25,7 @@ public T streamState(StreamState state) { /** - * Asks the server to check that the stream receiving is at the given expected version. + * Asks the server to check that the stream receiving is at the given expected revision. * @param revision - expected revision. * @return updated options. From a0e34a3bbf37a0cae43fcbe4486195399b0e1995 Mon Sep 17 00:00:00 2001 From: YoEight Date: Mon, 3 Mar 2025 22:46:11 -0500 Subject: [PATCH 4/7] fixup --- .../eventstore/dbclient/AppendToStream.java | 8 +++--- .../WrongExpectedVersionException.java | 26 +++++++++---------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java b/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java index 8935dada..bcf93cfa 100644 --- a/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java +++ b/db-client-java/src/main/java/com/eventstore/dbclient/AppendToStream.java @@ -75,16 +75,16 @@ private CompletableFuture append(ManagedChannel channel, List Date: Mon, 3 Mar 2025 23:25:04 -0500 Subject: [PATCH 5/7] fixup test --- .../com/eventstore/dbclient/misc/ExpectedRevisionTests.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java b/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java index 9246fac6..32ef06ba 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java @@ -35,9 +35,9 @@ public void testExpectedRevisionHashCode() { @Test public void testHumanRepresentation() { - Assertions.assertEquals("ExpectedAny", StreamState.any().toString()); - Assertions.assertEquals("ExpectedStreamExists", StreamState.streamExists().toString()); - Assertions.assertEquals("ExpectedNoStream", StreamState.noStream().toString()); + Assertions.assertEquals("AnyStreamState", StreamState.any().toString()); + Assertions.assertEquals("StreamExistsState", StreamState.streamExists().toString()); + Assertions.assertEquals("NoStreamStream", StreamState.noStream().toString()); Assertions.assertEquals("42", StreamState.streamRevision(42).toString()); } From a14483f38efd243da9849a1d300eb49367242445 Mon Sep 17 00:00:00 2001 From: YoEight Date: Mon, 3 Mar 2025 23:30:25 -0500 Subject: [PATCH 6/7] fixup --- .../src/main/java/com/eventstore/dbclient/StreamState.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db-client-java/src/main/java/com/eventstore/dbclient/StreamState.java b/db-client-java/src/main/java/com/eventstore/dbclient/StreamState.java index 68210f6f..d2598571 100644 --- a/db-client-java/src/main/java/com/eventstore/dbclient/StreamState.java +++ b/db-client-java/src/main/java/com/eventstore/dbclient/StreamState.java @@ -151,7 +151,7 @@ public StreamsOuterClass.TombstoneReq.Options.Builder applyOnWire(StreamsOuterCl @Override public String toString() { - return "StreamsExistsState"; + return "StreamExistsState"; } } From 8eadff29b1f504f3f7b596a095983bedca9031be Mon Sep 17 00:00:00 2001 From: YoEight Date: Mon, 3 Mar 2025 23:32:18 -0500 Subject: [PATCH 7/7] fixup --- .../com/eventstore/dbclient/misc/ExpectedRevisionTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java b/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java index 32ef06ba..e053eb61 100644 --- a/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java +++ b/db-client-java/src/test/java/com/eventstore/dbclient/misc/ExpectedRevisionTests.java @@ -37,7 +37,7 @@ public void testExpectedRevisionHashCode() { public void testHumanRepresentation() { Assertions.assertEquals("AnyStreamState", StreamState.any().toString()); Assertions.assertEquals("StreamExistsState", StreamState.streamExists().toString()); - Assertions.assertEquals("NoStreamStream", StreamState.noStream().toString()); + Assertions.assertEquals("NoStreamState", StreamState.noStream().toString()); Assertions.assertEquals("42", StreamState.streamRevision(42).toString()); }