Skip to content

Commit 6f3327b

Browse files
committed
Support offset type field in resolve_offset_spec response
References #928
1 parent 37adf0f commit 6f3327b

4 files changed

Lines changed: 23 additions & 3 deletions

File tree

src/main/java/com/rabbitmq/stream/OffsetSpecification.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2020-2025 Broadcom. All Rights Reserved.
1+
// Copyright (c) 2020-2026 Broadcom. All Rights Reserved.
22
// The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
33
//
44
// This software, the RabbitMQ Stream Java client library, is dual-licensed under the

src/main/java/com/rabbitmq/stream/impl/Client.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2425,13 +2425,19 @@ public long getOffset() {
24252425

24262426
public static class ResolveOffsetSpecResponse extends Response {
24272427

2428+
private final short offsetType;
24282429
private final long offset;
24292430

2430-
ResolveOffsetSpecResponse(short responseCode, long offset) {
2431+
ResolveOffsetSpecResponse(short responseCode, short offsetType, long offset) {
24312432
super(responseCode);
2433+
this.offsetType = offsetType;
24322434
this.offset = offset;
24332435
}
24342436

2437+
public short offsetType() {
2438+
return offsetType;
2439+
}
2440+
24352441
public long offset() {
24362442
return offset;
24372443
}

src/main/java/com/rabbitmq/stream/impl/ServerFrameHandler.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1273,6 +1273,8 @@ int doHandle(Client client, ChannelHandlerContext ctx, ByteBuf message) {
12731273
int read = 4;
12741274
short responseCode = message.readShort();
12751275
read += 2;
1276+
short offsetType = message.readShort();
1277+
read += 2;
12761278
long offset = message.readLong();
12771279
read += 8;
12781280

@@ -1281,7 +1283,8 @@ int doHandle(Client client, ChannelHandlerContext ctx, ByteBuf message) {
12811283
if (outstandingRequest == null) {
12821284
logMissingOutstandingRequest(correlationId);
12831285
} else {
1284-
ResolveOffsetSpecResponse response = new ResolveOffsetSpecResponse(responseCode, offset);
1286+
ResolveOffsetSpecResponse response =
1287+
new ResolveOffsetSpecResponse(responseCode, offsetType, offset);
12851288
outstandingRequest.response().set(response);
12861289
outstandingRequest.countDown();
12871290
}

src/test/java/com/rabbitmq/stream/impl/ClientTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,18 +1146,22 @@ void resolveOffsetSpecShouldReturnResolvedOffset() {
11461146

11471147
static void doResolveOffsetSpecShouldReturnResolvedOffset(
11481148
TestUtils.ClientFactory cf, Client client, String stream) {
1149+
short typeOffset = OffsetSpecification.offset(0).getType();
11491150
// Test resolve_offset_spec on empty stream
11501151
Client.ResolveOffsetSpecResponse response =
11511152
client.resolveOffsetSpec(stream, OffsetSpecification.first());
11521153
assertThat(response).is(ok());
1154+
assertThat(response.offsetType()).isEqualTo(typeOffset);
11531155
assertThat(response.offset()).isEqualTo(0);
11541156

11551157
response = client.resolveOffsetSpec(stream, OffsetSpecification.last());
11561158
assertThat(response).is(ok());
1159+
assertThat(response.offsetType()).isEqualTo(typeOffset);
11571160
assertThat(response.offset()).isEqualTo(0);
11581161

11591162
response = client.resolveOffsetSpec(stream, OffsetSpecification.next());
11601163
assertThat(response).is(ok());
1164+
assertThat(response.offsetType()).isEqualTo(typeOffset);
11611165
assertThat(response.offset()).isEqualTo(0);
11621166

11631167
// Publish some messages
@@ -1167,34 +1171,41 @@ static void doResolveOffsetSpecShouldReturnResolvedOffset(
11671171
// Test resolve_offset_spec after publishing
11681172
response = client.resolveOffsetSpec(stream, OffsetSpecification.first());
11691173
assertThat(response).is(ok());
1174+
assertThat(response.offsetType()).isEqualTo(typeOffset);
11701175
assertThat(response.offset()).isEqualTo(0);
11711176

11721177
response = client.resolveOffsetSpec(stream, OffsetSpecification.last());
11731178
assertThat(response).is(ok());
1179+
assertThat(response.offsetType()).isEqualTo(typeOffset);
11741180
assertThat(response.offset()).isGreaterThanOrEqualTo(0);
11751181
assertThat(response.offset()).isLessThan(messageCount);
11761182

11771183
response = client.resolveOffsetSpec(stream, OffsetSpecification.next());
11781184
assertThat(response).is(ok());
1185+
assertThat(response.offsetType()).isEqualTo(typeOffset);
11791186
assertThat(response.offset()).isEqualTo(messageCount);
11801187

11811188
response = client.resolveOffsetSpec(stream, OffsetSpecification.offset(0));
11821189
assertThat(response).is(ok());
1190+
assertThat(response.offsetType()).isEqualTo(typeOffset);
11831191
assertThat(response.offset()).isEqualTo(0);
11841192

11851193
response = client.resolveOffsetSpec(stream, OffsetSpecification.offset(5));
11861194
assertThat(response).is(ok());
1195+
assertThat(response.offsetType()).isEqualTo(typeOffset);
11871196
// it should attach at the beginning of the chunk
11881197
assertThat(response.offset()).isLessThanOrEqualTo(5);
11891198

11901199
// Test with timestamp (far future should return next offset)
11911200
long futureTimestamp = System.currentTimeMillis() + 3600000;
11921201
response = client.resolveOffsetSpec(stream, OffsetSpecification.timestamp(futureTimestamp));
11931202
assertThat(response).is(ok());
1203+
assertThat(response.offsetType()).isEqualTo(typeOffset);
11941204
assertThat(response.offset()).isEqualTo(messageCount);
11951205

11961206
response = client.resolveOffsetSpec(stream, OffsetSpecification.offset(messageCount * 2));
11971207
assertThat(response).is(ok());
1208+
assertThat(response.offsetType()).isEqualTo(typeOffset);
11981209
assertThat(response.offset()).isEqualTo(messageCount);
11991210

12001211
// Test on non-existent stream

0 commit comments

Comments
 (0)