diff --git a/apps/emqx_replay/src/emqx_replay_message_storage.erl b/apps/emqx_replay/src/emqx_replay_message_storage.erl index f58c006cd..d14a07c6d 100644 --- a/apps/emqx_replay/src/emqx_replay_message_storage.erl +++ b/apps/emqx_replay/src/emqx_replay_message_storage.erl @@ -105,7 +105,7 @@ %% Debug/troubleshooting: %% Keymappers -export([ - bitsize/1, + keymapper_info/1, compute_bitstring/3, compute_topic_bitmask/2, compute_time_bitmask/1, @@ -390,9 +390,9 @@ refresh_iterator(It = #it{handle = Handle, cursor = Cursor, next_action = Action %% Internal exports %%================================================================================ --spec bitsize(keymapper()) -> bits(). -bitsize(#keymapper{bitsize = Bitsize}) -> - Bitsize. +-spec keymapper_info(keymapper()) -> [bitsource()]. +keymapper_info(#keymapper{source = Source, bitsize = Bitsize, epoch = Epoch}) -> + #{source => Source, bitsize => Bitsize, epoch => Epoch}. make_message_key(Topic, PublishedAt, MessageID, Keymapper) -> combine(compute_bitstring(Topic, PublishedAt, Keymapper), MessageID, Keymapper). diff --git a/apps/emqx_replay/test/props/prop_replay_message_storage.erl b/apps/emqx_replay/test/props/prop_replay_message_storage.erl index 20c897c2a..c468097c7 100644 --- a/apps/emqx_replay/test/props/prop_replay_message_storage.erl +++ b/apps/emqx_replay/test/props/prop_replay_message_storage.erl @@ -28,13 +28,14 @@ %%-------------------------------------------------------------------- prop_bitstring_computes() -> - ?FORALL(Keymapper, keymapper(), begin - Bitsize = emqx_replay_message_storage:bitsize(Keymapper), + ?FORALL( + Keymapper, + keymapper(), ?FORALL({Topic, Timestamp}, {topic(), integer()}, begin BS = emqx_replay_message_storage:compute_bitstring(Topic, Timestamp, Keymapper), - is_integer(BS) andalso (BS < (1 bsl Bitsize)) + is_integer(BS) andalso (BS < (1 bsl get_keymapper_bitsize(Keymapper))) end) - end). + ). prop_topic_bitmask_computes() -> Keymapper = make_keymapper(16, [8, 12, 16], 100), @@ -56,7 +57,7 @@ prop_next_seek_monotonic() -> ), ?FORALL( Bitstring, - bitstr(emqx_replay_message_storage:bitsize(Keymapper)), + bitstr(get_keymapper_bitsize(Keymapper)), emqx_replay_message_storage:compute_next_seek(Bitstring, Filter) >= Bitstring ) end @@ -436,6 +437,9 @@ make_keymapper(TimestampBits, TopicBits, MaxEpoch) -> epoch => MaxEpoch }). +get_keymapper_bitsize(Keymapper) -> + maps:get(bitsize, emqx_replay_message_storage:keymapper_info(Keymapper)). + -spec interleave(list({Tag, list(E)}), rand:state()) -> list({Tag, E}). interleave(Seqs, Rng) -> interleave(Seqs, length(Seqs), Rng).