From 343a78b08a3344d46c44f65ba1baa39cb18290cd Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 20 Jul 2022 15:06:24 -0300 Subject: [PATCH] feat(persistent_sessions): don't use rocksdb when unavailable --- CHANGES-5.0.md | 1 + .../emqx_persistent_session_backend_builtin.erl | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CHANGES-5.0.md b/CHANGES-5.0.md index a30aea08d..e278c9502 100644 --- a/CHANGES-5.0.md +++ b/CHANGES-5.0.md @@ -16,6 +16,7 @@ * Fix bad swagger format. [#8517](https://github.com/emqx/emqx/pull/8517) * Fix `chars_limit` is not working when `formatter` is `json`. [#8518](http://github.com/emqx/emqx/pull/8518) * Ensuring that exhook dispatches the client events are sequential. [#8530](https://github.com/emqx/emqx/pull/8530) +* Avoid using RocksDB backend for persistent sessions when such backend is unavailable. [#8528](https://github.com/emqx/emqx/pull/8528) ## Enhancements diff --git a/apps/emqx/src/persistent_session/emqx_persistent_session_backend_builtin.erl b/apps/emqx/src/persistent_session/emqx_persistent_session_backend_builtin.erl index f6dde5af4..59657470b 100644 --- a/apps/emqx/src/persistent_session/emqx_persistent_session_backend_builtin.erl +++ b/apps/emqx/src/persistent_session/emqx_persistent_session_backend_builtin.erl @@ -131,16 +131,23 @@ storage_properties(_, Backend) when ?IS_ETS(Backend) -> storage_properties(_, _) -> []. +%% Dialyzer sees the compiled literal in +%% `mria:rocksdb_backend_available/0' and complains about the +%% complementar match arm... +-dialyzer({no_match, table_type/1}). -spec table_type(atom()) -> mria_table_type(). table_type(Table) -> DiscPersistence = emqx_config:get([?cfg_root, on_disc]), RamCache = get_overlayed(Table, ram_cache), - case {DiscPersistence, RamCache} of - {true, true} -> + RocksDBAvailable = mria:rocksdb_backend_available(), + case {DiscPersistence, RamCache, RocksDBAvailable} of + {true, true, _} -> disc_copies; - {true, false} -> + {true, false, true} -> rocksdb_copies; - {false, _} -> + {true, false, false} -> + disc_copies; + {false, _, _} -> ram_copies end.