Skip to content

Commit 0a08043

Browse files
committed
Add osiris:get_stat/1 API
To get the first and committed offset from any member of a stream
1 parent 28e645e commit 0a08043

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

src/osiris.erl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
start_writer/1,
2626
start_replica/2,
2727
delete_cluster/1,
28-
configure_logger/1]).
28+
configure_logger/1,
29+
get_stats/1]).
2930

3031
%% holds static or rarely changing fields
3132
-record(cfg, {}).
@@ -273,3 +274,12 @@ start_replicas(Config, [Node | Nodes], ReplicaPids) ->
273274
configure_logger(Module) ->
274275
persistent_term:put('$osiris_logger', Module).
275276

277+
-spec get_stats(pid()) -> #{committed_chunk_id => integer(),
278+
first_chunk_id => integer()}.
279+
get_stats(Pid)
280+
when node(Pid) =:= node() ->
281+
{ok, #{offset_ref := ORef}} = gen:call(Pid, '$gen_call', get_reader_context),
282+
#{committed_chunk_id => atomics:get(ORef, 1),
283+
first_chunk_id => atomics:get(ORef, 2)};
284+
get_stats(Pid) when is_pid(Pid) ->
285+
erpc:call(node(Pid), ?MODULE, ?FUNCTION_NAME, [Pid]).

test/osiris_SUITE.erl

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -636,12 +636,11 @@ cluster_restart(Config) ->
636636

637637
timer:sleep(1),
638638
RangesBeforeRecovery =
639-
[ erpc:call(node(P),
640-
fun () ->
641-
{ok, #{offset_ref := ORef}} = gen:call(P, '$gen_call', get_reader_context),
642-
{atomics:get(ORef, 2), atomics:get(ORef, 1)}
643-
end)
644-
|| P <- [Leader, Replica1, Replica2]],
639+
[begin
640+
#{committed_chunk_id := E,
641+
first_chunk_id := S} = osiris:get_stats(P),
642+
{S, E}
643+
end || P <- [Leader, Replica1, Replica2]],
645644

646645
?assertEqual([{0,0}, {0,0}, {0,0}], RangesBeforeRecovery),
647646

@@ -655,12 +654,11 @@ cluster_restart(Config) ->
655654
%% get all log ranges after recovery for each member and validate they are all
656655
%% the same
657656
RangesAfterRecovery =
658-
[ erpc:call(node(P),
659-
fun () ->
660-
{ok, #{offset_ref := ORef}} = gen:call(P, '$gen_call', get_reader_context),
661-
{atomics:get(ORef, 2), atomics:get(ORef, 1)}
662-
end)
663-
|| P <- [Leader1, ReplicaPid1, ReplicaPid2]],
657+
[begin
658+
#{committed_chunk_id := E,
659+
first_chunk_id := S} = osiris:get_stats(P),
660+
{S, E}
661+
end || P <- [Leader1, ReplicaPid1, ReplicaPid2]],
664662
?assertEqual([{0,0}, {0,0}, {0,0}], RangesAfterRecovery),
665663
ct:pal("~p ~p", [RangesBeforeRecovery, RangesAfterRecovery]),
666664
ok = validate_log_offset_reader(Leader1, [{0, <<"before-restart">>}]),

0 commit comments

Comments
 (0)