Просмотр исходного кода

fix(ds): Destroy LTS tries when the generation is dropped

ieQu1 1 год назад
Родитель
Сommit
bcfa7b2209

+ 7 - 0
apps/emqx_durable_storage/src/emqx_ds_lts.erl

@@ -19,6 +19,7 @@
 %% API:
 -export([
     trie_create/1, trie_create/0,
+    destroy/1,
     trie_restore/2,
     trie_copy_learned_paths/2,
     topic_key/3,
@@ -116,6 +117,12 @@ trie_create(UserOpts) ->
 trie_create() ->
     trie_create(#{}).
 
+-spec destroy(trie()) -> ok.
+destroy(#trie{trie = Trie, stats = Stats}) ->
+    catch ets:delete(Trie),
+    catch ets:delete(Stats),
+    ok.
+
 %% @doc Restore trie from a dump
 -spec trie_restore(options(), [{_Key, _Val}]) -> trie().
 trie_restore(Options, Dump) ->

+ 2 - 1
apps/emqx_durable_storage/src/emqx_ds_storage_bitfield_lts.erl

@@ -240,7 +240,8 @@ post_creation_actions(
     s()
 ) ->
     ok.
-drop(_Shard, DBHandle, GenId, CFRefs, #s{}) ->
+drop(_Shard, DBHandle, GenId, CFRefs, #s{trie = Trie}) ->
+    emqx_ds_lts:destroy(Trie),
     {_, DataCF} = lists:keyfind(data_cf(GenId), 1, CFRefs),
     {_, TrieCF} = lists:keyfind(trie_cf(GenId), 1, CFRefs),
     ok = rocksdb:drop_column_family(DBHandle, DataCF),