From 05d97397d32f24406429ea6b630da8ff921a1cf5 Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Mon, 17 Jun 2024 16:13:53 +0200 Subject: [PATCH] fix(dsstore): use correct comparison when walking over generations --- .../src/emqx_ds_storage_layer.erl | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl b/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl index b908b2819..d6d36bf97 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl @@ -972,17 +972,17 @@ generation_get(Shard, GenId) -> -spec generations_since(shard_id(), emqx_ds:time()) -> [gen_id()]. generations_since(Shard, Since) -> - Schema = get_schema_runtime(Shard), - maps:fold( - fun - (?GEN_KEY(GenId), #{until := Until}, Acc) when Until >= Since -> - [GenId | Acc]; - (_K, _V, Acc) -> - Acc - end, - [], - Schema - ). + Schema = #{current_generation := Current} = get_schema_runtime(Shard), + list_generations_since(Schema, Current, Since). + +list_generations_since(Schema, GenId, Since) -> + case Schema of + #{?GEN_KEY(GenId) := #{until := Until}} when Until > Since -> + [GenId | list_generations_since(Schema, GenId - 1, Since)]; + #{} -> + %% No more live generations. + [] + end. format_state(#s{shard_id = ShardId, db = DB, cf_refs = CFRefs, schema = Schema, shard = Shard}) -> #{