chore(ds): slightly simplify working with storage generations
This commit is contained in:
parent
2d074df209
commit
b8b9b7739b
|
@ -259,14 +259,14 @@ get_streams(Shard, TopicFilter, StartTime) ->
|
|||
lists:flatmap(
|
||||
fun(GenId) ->
|
||||
?tp(get_streams_get_gen, #{gen_id => GenId}),
|
||||
case generation_get_safe(Shard, GenId) of
|
||||
{ok, #{module := Mod, data := GenData}} ->
|
||||
case generation_get(Shard, GenId) of
|
||||
#{module := Mod, data := GenData} ->
|
||||
Streams = Mod:get_streams(Shard, GenData, TopicFilter, StartTime),
|
||||
[
|
||||
{GenId, ?stream_v2(GenId, InnerStream)}
|
||||
|| InnerStream <- Streams
|
||||
];
|
||||
{error, not_found} ->
|
||||
not_found ->
|
||||
%% race condition: generation was dropped before getting its streams?
|
||||
[]
|
||||
end
|
||||
|
@ -282,14 +282,14 @@ get_delete_streams(Shard, TopicFilter, StartTime) ->
|
|||
lists:flatmap(
|
||||
fun(GenId) ->
|
||||
?tp(get_streams_get_gen, #{gen_id => GenId}),
|
||||
case generation_get_safe(Shard, GenId) of
|
||||
{ok, #{module := Mod, data := GenData}} ->
|
||||
case generation_get(Shard, GenId) of
|
||||
#{module := Mod, data := GenData} ->
|
||||
Streams = Mod:get_delete_streams(Shard, GenData, TopicFilter, StartTime),
|
||||
[
|
||||
?delete_stream(GenId, InnerStream)
|
||||
|| InnerStream <- Streams
|
||||
];
|
||||
{error, not_found} ->
|
||||
not_found ->
|
||||
%% race condition: generation was dropped before getting its streams?
|
||||
[]
|
||||
end
|
||||
|
@ -302,8 +302,8 @@ get_delete_streams(Shard, TopicFilter, StartTime) ->
|
|||
make_iterator(
|
||||
Shard, ?stream_v2(GenId, Stream), TopicFilter, StartTime
|
||||
) ->
|
||||
case generation_get_safe(Shard, GenId) of
|
||||
{ok, #{module := Mod, data := GenData}} ->
|
||||
case generation_get(Shard, GenId) of
|
||||
#{module := Mod, data := GenData} ->
|
||||
case Mod:make_iterator(Shard, GenData, Stream, TopicFilter, StartTime) of
|
||||
{ok, Iter} ->
|
||||
{ok, #{
|
||||
|
@ -314,7 +314,7 @@ make_iterator(
|
|||
{error, _} = Err ->
|
||||
Err
|
||||
end;
|
||||
{error, not_found} ->
|
||||
not_found ->
|
||||
{error, unrecoverable, generation_not_found}
|
||||
end.
|
||||
|
||||
|
@ -323,8 +323,8 @@ make_iterator(
|
|||
make_delete_iterator(
|
||||
Shard, ?delete_stream(GenId, Stream), TopicFilter, StartTime
|
||||
) ->
|
||||
case generation_get_safe(Shard, GenId) of
|
||||
{ok, #{module := Mod, data := GenData}} ->
|
||||
case generation_get(Shard, GenId) of
|
||||
#{module := Mod, data := GenData} ->
|
||||
case Mod:make_delete_iterator(Shard, GenData, Stream, TopicFilter, StartTime) of
|
||||
{ok, Iter} ->
|
||||
{ok, #{
|
||||
|
@ -335,7 +335,7 @@ make_delete_iterator(
|
|||
{error, _} = Err ->
|
||||
Err
|
||||
end;
|
||||
{error, not_found} ->
|
||||
not_found ->
|
||||
{error, end_of_stream}
|
||||
end.
|
||||
|
||||
|
@ -346,8 +346,8 @@ update_iterator(
|
|||
#{?tag := ?IT, ?generation := GenId, ?enc := OldIter},
|
||||
DSKey
|
||||
) ->
|
||||
case generation_get_safe(Shard, GenId) of
|
||||
{ok, #{module := Mod, data := GenData}} ->
|
||||
case generation_get(Shard, GenId) of
|
||||
#{module := Mod, data := GenData} ->
|
||||
case Mod:update_iterator(Shard, GenData, OldIter, DSKey) of
|
||||
{ok, Iter} ->
|
||||
{ok, #{
|
||||
|
@ -358,15 +358,15 @@ update_iterator(
|
|||
{error, _} = Err ->
|
||||
Err
|
||||
end;
|
||||
{error, not_found} ->
|
||||
not_found ->
|
||||
{error, unrecoverable, generation_not_found}
|
||||
end.
|
||||
|
||||
-spec next(shard_id(), iterator(), pos_integer()) ->
|
||||
emqx_ds:next_result(iterator()).
|
||||
next(Shard, Iter = #{?tag := ?IT, ?generation := GenId, ?enc := GenIter0}, BatchSize) ->
|
||||
case generation_get_safe(Shard, GenId) of
|
||||
{ok, #{module := Mod, data := GenData}} ->
|
||||
case generation_get(Shard, GenId) of
|
||||
#{module := Mod, data := GenData} ->
|
||||
Current = generation_current(Shard),
|
||||
case Mod:next(Shard, GenData, GenIter0, BatchSize) of
|
||||
{ok, _GenIter, []} when GenId < Current ->
|
||||
|
@ -379,7 +379,7 @@ next(Shard, Iter = #{?tag := ?IT, ?generation := GenId, ?enc := GenIter0}, Batch
|
|||
Error = {error, _, _} ->
|
||||
Error
|
||||
end;
|
||||
{error, not_found} ->
|
||||
not_found ->
|
||||
%% generation was possibly dropped by GC
|
||||
{error, unrecoverable, generation_not_found}
|
||||
end.
|
||||
|
@ -392,8 +392,8 @@ delete_next(
|
|||
Selector,
|
||||
BatchSize
|
||||
) ->
|
||||
case generation_get_safe(Shard, GenId) of
|
||||
{ok, #{module := Mod, data := GenData}} ->
|
||||
case generation_get(Shard, GenId) of
|
||||
#{module := Mod, data := GenData} ->
|
||||
Current = generation_current(Shard),
|
||||
case Mod:delete_next(Shard, GenData, GenIter0, Selector, BatchSize) of
|
||||
{ok, _GenIter, _Deleted = 0, _IteratedOver = 0} when GenId < Current ->
|
||||
|
@ -406,7 +406,7 @@ delete_next(
|
|||
Error = {error, _} ->
|
||||
Error
|
||||
end;
|
||||
{error, not_found} ->
|
||||
not_found ->
|
||||
%% generation was possibly dropped by GC
|
||||
{ok, end_of_stream}
|
||||
end.
|
||||
|
@ -777,18 +777,13 @@ generation_current(Shard) ->
|
|||
#{current_generation := Current} = get_schema_runtime(Shard),
|
||||
Current.
|
||||
|
||||
-spec generation_get(shard_id(), gen_id()) -> generation().
|
||||
-spec generation_get(shard_id(), gen_id()) -> generation() | not_found.
|
||||
generation_get(Shard, GenId) ->
|
||||
{ok, GenData} = generation_get_safe(Shard, GenId),
|
||||
GenData.
|
||||
|
||||
-spec generation_get_safe(shard_id(), gen_id()) -> {ok, generation()} | {error, not_found}.
|
||||
generation_get_safe(Shard, GenId) ->
|
||||
case get_schema_runtime(Shard) of
|
||||
#{?GEN_KEY(GenId) := GenData} ->
|
||||
{ok, GenData};
|
||||
GenData;
|
||||
#{} ->
|
||||
{error, not_found}
|
||||
not_found
|
||||
end.
|
||||
|
||||
-spec generations_since(shard_id(), emqx_ds:time()) -> [gen_id()].
|
||||
|
|
Loading…
Reference in New Issue