From 086e7256f54078272539d66870ca7c406863bdee Mon Sep 17 00:00:00 2001 From: ieQu1 <99872536+ieQu1@users.noreply.github.com> Date: Mon, 1 Jul 2024 01:10:16 +0200 Subject: [PATCH] feat(ds): Add configuration schema for skipstream LTS layout --- apps/emqx/src/emqx_ds_schema.erl | 60 ++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/apps/emqx/src/emqx_ds_schema.erl b/apps/emqx/src/emqx_ds_schema.erl index 1cda81d1d..df50e332e 100644 --- a/apps/emqx/src/emqx_ds_schema.erl +++ b/apps/emqx/src/emqx_ds_schema.erl @@ -234,6 +234,42 @@ fields(layout_builtin_wildcard_optimized) -> } )} ]; +fields(layout_builtin_wildcard_optimized_v2) -> + [ + {type, + sc( + wildcard_optimized_v2, + #{ + 'readOnly' => true, + default => wildcard_optimized_v2, + desc => ?DESC(layout_builtin_wildcard_optimized_type) + } + )}, + {bytes_per_topic_level, + sc( + range(1, 16), + #{ + default => 8, + importance => ?IMPORTANCE_HIDDEN + } + )}, + {topic_index_bytes, + sc( + pos_integer(), + #{ + default => 8, + importance => ?IMPORTANCE_HIDDEN + } + )}, + {serialization_schema, + sc( + emqx_ds_msg_serializer:schema(), + #{ + default => v1, + importance => ?IMPORTANCE_HIDDEN + } + )} + ]; fields(layout_builtin_reference) -> [ {type, @@ -242,6 +278,7 @@ fields(layout_builtin_reference) -> #{ 'readOnly' => true, importance => ?IMPORTANCE_LOW, + default => reference, desc => ?DESC(layout_builtin_reference_type) } )} @@ -284,7 +321,7 @@ common_builtin_fields() -> importance => ?IMPORTANCE_MEDIUM, default => #{ - <<"type">> => wildcard_optimized + <<"type">> => wildcard_optimized_v2 } } )} @@ -298,6 +335,8 @@ desc(builtin_write_buffer) -> ?DESC(builtin_write_buffer); desc(layout_builtin_wildcard_optimized) -> ?DESC(layout_builtin_wildcard_optimized); +desc(layout_builtin_wildcard_optimized_v2) -> + ?DESC(layout_builtin_wildcard_optimized); desc(layout_builtin_reference) -> ?DESC(layout_builtin_reference); desc(_) -> @@ -307,6 +346,19 @@ desc(_) -> %% Internal functions %%================================================================================ +translate_layout( + #{ + type := wildcard_optimized_v2, + bytes_per_topic_level := BytesPerTopicLevel, + topic_index_bytes := TopicIndexBytes, + serialization_schema := SSchema + } +) -> + {emqx_ds_storage_skipstream_lts, #{ + wildcard_hash_bytes => BytesPerTopicLevel, + topic_index_bytes => TopicIndexBytes, + serialization_schema => SSchema + }}; translate_layout( #{ type := wildcard_optimized, @@ -336,7 +388,11 @@ builtin_layouts() -> %% suitable for production use. However, it's very simple and %% produces a very predictabale replay order, which can be useful %% for testing and debugging: - [ref(layout_builtin_wildcard_optimized), ref(layout_builtin_reference)]. + [ + ref(layout_builtin_wildcard_optimized_v2), + ref(layout_builtin_wildcard_optimized), + ref(layout_builtin_reference) + ]. sc(Type, Meta) -> hoconsc:mk(Type, Meta).