|
|
@@ -248,8 +248,8 @@
|
|
|
) ->
|
|
|
emqx_ds:make_delete_iterator_result(_Iterator).
|
|
|
|
|
|
--callback next(shard_id(), _Data, Iter, pos_integer(), emqx_ds:time()) ->
|
|
|
- {ok, Iter, [emqx_types:message()]} | {error, _}.
|
|
|
+-callback next(shard_id(), _Data, Iter, pos_integer(), emqx_ds:time(), _IsCurrent :: boolean()) ->
|
|
|
+ {ok, Iter, [emqx_types:message()]} | {ok, end_of_stream} | {error, _}.
|
|
|
|
|
|
-callback delete_next(
|
|
|
shard_id(), _Data, DeleteIterator, emqx_ds:delete_selector(), pos_integer(), emqx_ds:time()
|
|
|
@@ -449,15 +449,12 @@ update_iterator(
|
|
|
next(Shard, Iter = #{?tag := ?IT, ?generation := GenId, ?enc := GenIter0}, BatchSize, Now) ->
|
|
|
case generation_get(Shard, GenId) of
|
|
|
#{module := Mod, data := GenData} ->
|
|
|
- Current = generation_current(Shard),
|
|
|
- case Mod:next(Shard, GenData, GenIter0, BatchSize, Now) of
|
|
|
- {ok, _GenIter, []} when GenId < Current ->
|
|
|
- %% This is a past generation. Storage layer won't write
|
|
|
- %% any more messages here. The iterator reached the end:
|
|
|
- %% the stream has been fully replayed.
|
|
|
- {ok, end_of_stream};
|
|
|
+ IsCurrent = GenId =:= generation_current(Shard),
|
|
|
+ case Mod:next(Shard, GenData, GenIter0, BatchSize, Now, IsCurrent) of
|
|
|
{ok, GenIter, Batch} ->
|
|
|
{ok, Iter#{?enc := GenIter}, Batch};
|
|
|
+ {ok, end_of_stream} ->
|
|
|
+ {ok, end_of_stream};
|
|
|
Error = {error, _, _} ->
|
|
|
Error
|
|
|
end;
|