diff --git a/apps/emqx/src/emqx_persistent_message.erl b/apps/emqx/src/emqx_persistent_message.erl index 30ebe7417..01539ba73 100644 --- a/apps/emqx/src/emqx_persistent_message.erl +++ b/apps/emqx/src/emqx_persistent_message.erl @@ -62,7 +62,11 @@ storage_backend(#{ storage => {emqx_ds_storage_bitfield_lts, #{}}, n_shards => NShards, replication_factor => ReplicationFactor - }. + }; +storage_backend(#{ + fdb := #{enable := true} = FDBConfig +}) -> + FDBConfig#{backend => fdb}. %%-------------------------------------------------------------------- diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index 8e401a442..e28347897 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -1781,7 +1781,7 @@ fields("session_storage_backend") -> desc => ?DESC(session_storage_backend_builtin), required => {false, recursively} })} - ]; + ] ++ emqx_schema_hooks:injection_point('session_persistence.storage_backends', []); fields("session_storage_backend_builtin") -> [ {"enable", diff --git a/apps/emqx_durable_storage/src/emqx_ds.erl b/apps/emqx_durable_storage/src/emqx_ds.erl index 84631f38e..f5872ea1e 100644 --- a/apps/emqx_durable_storage/src/emqx_ds.erl +++ b/apps/emqx_durable_storage/src/emqx_ds.erl @@ -86,8 +86,14 @@ -type message_store_opts() :: #{}. +-type generic_db_opts() :: + #{ + backend := atom(), + _ => _ + }. + -type create_db_opts() :: - emqx_ds_replication_layer:builtin_db_opts(). + emqx_ds_replication_layer:builtin_db_opts() | generic_db_opts(). -type message_id() :: emqx_ds_replication_layer:message_id(). @@ -120,10 +126,11 @@ %% @doc Different DBs are completely independent from each other. They %% could represent something like different tenants. -spec open_db(db(), create_db_opts()) -> ok. -open_db(DB, Opts = #{backend := Backend}) when Backend =:= builtin -> +open_db(DB, Opts = #{backend := Backend}) when Backend =:= builtin orelse Backend =:= fdb -> Module = case Backend of - builtin -> emqx_ds_replication_layer + builtin -> emqx_ds_replication_layer; + fdb -> emqx_fdb_ds end, persistent_term:put(?persistent_term(DB), Module), ?module(DB):open_db(DB, Opts).