Browse Source

Merge pull request #14057 from keynslug/fix/dsraft/opts-compat

fix(dsraft): ensure DB config compat with earlier releases
Andrew Mayorov 1 year ago
parent
commit
a6da568cc0

+ 1 - 1
apps/emqx_ds_builtin_raft/src/emqx_ds_replication_layer.erl

@@ -1035,7 +1035,7 @@ force_monotonic_timestamps(DB) ->
     case erlang:get(?pd_ra_force_monotonic) of
         undefined ->
             DBConfig = emqx_ds_replication_layer_meta:db_config(DB),
-            Flag = maps:get(force_monotonic_timestamps, DBConfig),
+            Flag = maps:get(force_monotonic_timestamps, DBConfig, _Default = true),
             erlang:put(?pd_ra_force_monotonic, Flag);
         Flag ->
             ok

+ 10 - 0
apps/emqx_ds_builtin_raft/src/emqx_ds_replication_layer_meta.erl

@@ -518,6 +518,16 @@ open_db_trans(DB, CreateOpts) ->
             mnesia:write(#?META_TAB{db = DB, db_props = CreateOpts}),
             CreateOpts;
         [#?META_TAB{db_props = Opts}] ->
+            case maps:merge(CreateOpts, Opts) of
+                Opts ->
+                    ok;
+                UpdatedOpts ->
+                    %% NOTE
+                    %% Preserve any new options not yet present in the DB. This is
+                    %% most likely because `Opts` is outdated, written by earlier
+                    %% EMQX version.
+                    mnesia:write(#?META_TAB{db = DB, db_props = UpdatedOpts})
+            end,
             Opts
     end.
 

+ 1 - 0
changes/ee/fix-14057.en.md

@@ -0,0 +1 @@
+Fix compatibility issue that prevented Messages DS DB from starting due to slightly different DB configuration schema, if EMQX was upgraded from 5.7.x with session durability enabled.