From 843973ef32441ba4e4458f5af62dd5225de684c7 Mon Sep 17 00:00:00 2001 From: ieQu1 <99872536+ieQu1@users.noreply.github.com> Date: Mon, 1 Jul 2024 01:11:40 +0200 Subject: [PATCH] fix(ds): bitfield_lts: static_key_size -> static_key_bits --- apps/emqx_durable_storage/src/emqx_ds_lts.erl | 6 +++++- .../src/emqx_ds_storage_bitfield_lts.erl | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/emqx_durable_storage/src/emqx_ds_lts.erl b/apps/emqx_durable_storage/src/emqx_ds_lts.erl index c0625593a..0a7b6c59a 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_lts.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_lts.erl @@ -416,7 +416,11 @@ get_id_for_key(#trie{is_binary_key = IsBin, static_key_size = Size}, State, Toke Hash = crypto:hash(sha256, term_to_binary([State | Token])), case IsBin of false -> - <> = Hash, + %% Note: for backward compatibility with bitstream_lts + %% layout we allow the key to be an integer. But this also + %% changes the semantics of `static_key_size` from number + %% of bytes to bits: + <> = Hash, Int; true -> element(1, erlang:split_binary(Hash, Size)) 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 23225a5f6..182fe8cf0 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 @@ -905,7 +905,7 @@ restore_trie(TopicIndexBytes, DB, CF) -> {ok, IT} = rocksdb:iterator(DB, CF, []), try Dump = read_persisted_trie(IT, rocksdb:iterator_move(IT, first)), - TrieOpts = #{persist_callback => PersistCallback, static_key_size => TopicIndexBytes}, + TrieOpts = #{persist_callback => PersistCallback, static_key_bits => TopicIndexBytes * 8}, emqx_ds_lts:trie_restore(TrieOpts, Dump) after rocksdb:iterator_close(IT)