diff options
| author | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2020-03-19 12:44:02 +0100 |
|---|---|---|
| committer | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2020-03-19 18:41:56 +0100 |
| commit | 2bd71325ce32b7ae31c2954f56e06da793a8a285 (patch) | |
| tree | 581b8c95fec7e8f3ed4bd7e744fb4c492ca1879a /src | |
| parent | e9547d3eaf6f8fddbc1f8bebfe93eb0b3d804d3b (diff) | |
| download | rabbitmq-server-git-2bd71325ce32b7ae31c2954f56e06da793a8a285.tar.gz | |
rabbit_feature_flags: Wait for old registry to be purged
... before deleting it and load the new code.
In some rare cases, the soft purge didn't work because another process
was running the old code. Thus the delete would fail.
Now, we wait for the soft purge to succeed before proceeding.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_feature_flags.erl | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/rabbit_feature_flags.erl b/src/rabbit_feature_flags.erl index db13b7347e..de9dae2c9f 100644 --- a/src/rabbit_feature_flags.erl +++ b/src/rabbit_feature_flags.erl @@ -1255,8 +1255,8 @@ load_registry_mod(Mod, Bin) -> %% Time to load the new registry, replacing the old one. We use a %% lock here to synchronize concurrent reloads. global:set_lock(?FF_REGISTRY_LOADING_LOCK, [node()]), - _ = code:soft_purge(Mod), - _ = code:delete(Mod), + ok = purge_old_registry(Mod), + true = code:delete(Mod), Ret = code:load_binary(Mod, FakeFilename, Bin), global:del_lock(?FF_REGISTRY_LOADING_LOCK, [node()]), case Ret of @@ -1271,6 +1271,18 @@ load_registry_mod(Mod, Bin) -> throw({feature_flag_registry_reload_failure, Reason}) end. +purge_old_registry(Mod) -> + case code:is_loaded(Mod) of + {file, _} -> do_purge_old_registry(Mod); + false -> ok + end. + +do_purge_old_registry(Mod) -> + case code:soft_purge(Mod) of + true -> ok; + false -> do_purge_old_registry(Mod) + end. + %% ------------------------------------------------------------------- %% Feature flags state storage. %% ------------------------------------------------------------------- |
