From bcfa7b2209170e32993e208732276220af3f0873 Mon Sep 17 00:00:00 2001 From: ieQu1 <99872536+ieQu1@users.noreply.github.com> Date: Tue, 23 Apr 2024 00:20:59 +0200 Subject: [PATCH] fix(ds): Destroy LTS tries when the generation is dropped --- apps/emqx_durable_storage/src/emqx_ds_lts.erl | 7 +++++++ .../src/emqx_ds_storage_bitfield_lts.erl | 3 ++- 2 files changed, 9 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 bd7cb3826..e087504de 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_lts.erl +++ b/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) -> diff --git a/apps/emqx_durable_storage/src/emqx_ds_storage_bitfield_lts.erl b/apps/emqx_durable_storage/src/emqx_ds_storage_bitfield_lts.erl index 1cbdb92ee..80264da79 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_storage_bitfield_lts.erl +++ b/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),