From 1ddbbca90e9a3f70df15abf5fe9100ae35ce57c0 Mon Sep 17 00:00:00 2001 From: ieQu1 <99872536+ieQu1@users.noreply.github.com> Date: Tue, 7 May 2024 18:26:59 +0200 Subject: [PATCH] feat(ds): Allow incremental update of the LTS trie --- apps/emqx_durable_storage/src/emqx_ds_lts.erl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/emqx_durable_storage/src/emqx_ds_lts.erl b/apps/emqx_durable_storage/src/emqx_ds_lts.erl index e087504de..184f709e9 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_lts.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_lts.erl @@ -21,6 +21,7 @@ trie_create/1, trie_create/0, destroy/1, trie_restore/2, + trie_update/2, trie_copy_learned_paths/2, topic_key/3, match_topics/2, @@ -126,7 +127,11 @@ destroy(#trie{trie = Trie, stats = Stats}) -> %% @doc Restore trie from a dump -spec trie_restore(options(), [{_Key, _Val}]) -> trie(). trie_restore(Options, Dump) -> - Trie = trie_create(Options), + trie_update(trie_create(Options), Dump). + +%% @doc Update a trie with a dump of operations (used for replication) +-spec trie_update(trie(), [{_Key, _Val}]) -> trie(). +trie_update(Trie, Dump) -> lists:foreach( fun({{StateFrom, Token}, StateTo}) -> trie_insert(Trie, StateFrom, Token, StateTo)