diff options
author | Arnaud Cogoluègnes <acogoluegnes@gmail.com> | 2021-12-01 17:59:14 +0100 |
---|---|---|
committer | Arnaud Cogoluègnes <acogoluegnes@gmail.com> | 2021-12-01 17:59:14 +0100 |
commit | 17d0ba9317cac650d097c1f307aca8749e01a49b (patch) | |
tree | f9adc11df3260debd47475572329ad182c663990 | |
parent | b5aecbd3e5469fee99e097d80ebb8e59ec00fd41 (diff) | |
download | rabbitmq-server-git-rabbitmq-server-3783-response-code-for-undefined-stored-offset.tar.gz |
Return "no offset" (19) code when stored offset is undefinedrabbitmq-server-3783-response-code-for-undefined-stored-offset
Fixes #3783
5 files changed, 16 insertions, 13 deletions
diff --git a/deps/rabbitmq_stream/docs/PROTOCOL.adoc b/deps/rabbitmq_stream/docs/PROTOCOL.adoc index 60a8e48d3e..ce59d11653 100644 --- a/deps/rabbitmq_stream/docs/PROTOCOL.adoc +++ b/deps/rabbitmq_stream/docs/PROTOCOL.adoc @@ -81,6 +81,7 @@ used to make the difference between a request (0) and a response (1). Example fo |Access refused|0x10 |Precondition failed|0x11 |Publisher does not exist|0x12 +|No offset|0x13 |=== diff --git a/deps/rabbitmq_stream/src/rabbit_stream_reader.erl b/deps/rabbitmq_stream/src/rabbit_stream_reader.erl index ede34d95c7..d93621006e 100644 --- a/deps/rabbitmq_stream/src/rabbit_stream_reader.erl +++ b/deps/rabbitmq_stream/src/rabbit_stream_reader.erl @@ -1991,14 +1991,14 @@ handle_frame_post_auth(Transport, 1), {?RESPONSE_CODE_STREAM_DOES_NOT_EXIST, 0, Connection0}; {LeaderPid, C} -> - {?RESPONSE_CODE_OK, - case osiris:read_tracking(LeaderPid, Reference) of - undefined -> - 0; - {offset, Offt} -> - Offt - end, - C} + {RC, O} = + case osiris:read_tracking(LeaderPid, Reference) of + undefined -> + {?RESPONSE_CODE_NO_OFFSET, 0}; + {offset, Offt} -> + {?RESPONSE_CODE_OK, Offt} + end, + {RC, O, C} end; error -> rabbit_global_counters:increase_protocol_counter(stream, diff --git a/deps/rabbitmq_stream/test/rabbit_stream_SUITE.erl b/deps/rabbitmq_stream/test/rabbit_stream_SUITE.erl index 3c2c8fe18e..bb40d7d9bf 100644 --- a/deps/rabbitmq_stream/test/rabbit_stream_SUITE.erl +++ b/deps/rabbitmq_stream/test/rabbit_stream_SUITE.erl @@ -30,9 +30,7 @@ -define(WAIT, 5000). all() -> - [{group, single_node}, - {group, single_node_1}, - {group, cluster}]. + [{group, single_node}, {group, single_node_1}, {group, cluster}]. groups() -> [{single_node, [], @@ -64,7 +62,8 @@ init_per_suite(Config) -> end_per_suite(Config) -> Config. -init_per_group(Group, Config) when Group == single_node orelse Group == single_node_1 -> +init_per_group(Group, Config) + when Group == single_node orelse Group == single_node_1 -> Config1 = rabbit_ct_helpers:set_config(Config, [{rmq_nodes_clustered, false}]), Config2 = diff --git a/deps/rabbitmq_stream_common/include/rabbit_stream.hrl b/deps/rabbitmq_stream_common/include/rabbit_stream.hrl index f946b1ecba..e552cc7a02 100644 --- a/deps/rabbitmq_stream_common/include/rabbit_stream.hrl +++ b/deps/rabbitmq_stream_common/include/rabbit_stream.hrl @@ -47,6 +47,8 @@ -define(RESPONSE_CODE_ACCESS_REFUSED, 16). -define(RESPONSE_CODE_PRECONDITION_FAILED, 17). -define(RESPONSE_CODE_PUBLISHER_DOES_NOT_EXIST, 18). +-define(RESPONSE_CODE_NO_OFFSET, 19). + -define(OFFSET_TYPE_FIRST, 1). -define(OFFSET_TYPE_LAST, 2). diff --git a/deps/rabbitmq_stream_common/src/rabbit_stream_core.erl b/deps/rabbitmq_stream_common/src/rabbit_stream_core.erl index f61fdea3f3..d16b887df1 100644 --- a/deps/rabbitmq_stream_common/src/rabbit_stream_core.erl +++ b/deps/rabbitmq_stream_common/src/rabbit_stream_core.erl @@ -56,7 +56,8 @@ ?RESPONSE_CODE_INTERNAL_ERROR | ?RESPONSE_CODE_ACCESS_REFUSED | ?RESPONSE_CODE_PRECONDITION_FAILED | - ?RESPONSE_CODE_PUBLISHER_DOES_NOT_EXIST. + ?RESPONSE_CODE_PUBLISHER_DOES_NOT_EXIST | + ?RESPONSE_CODE_NO_OFFSET. -type error_code() :: response_code(). -type sequence() :: non_neg_integer(). -type credit() :: non_neg_integer(). |