diff options
| -rw-r--r-- | src/rabbit_recovery_terms.erl | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/rabbit_recovery_terms.erl b/src/rabbit_recovery_terms.erl index 41327147d0..ddb6bd26ee 100644 --- a/src/rabbit_recovery_terms.erl +++ b/src/rabbit_recovery_terms.erl @@ -196,9 +196,19 @@ code_change(_OldVsn, State, _Extra) -> open_table(VHost) -> VHostDir = rabbit_vhost:msg_store_dir_path(VHost), File = filename:join(VHostDir, "recovery.dets"), - {ok, _} = dets:open_file(VHost, [{file, File}, - {ram_file, true}, - {auto_save, infinity}]). + try + {ok, _} = dets:open_file(VHost, [{file, File}, + {ram_file, true}, + {auto_save, infinity}]) + catch _:_ -> + file:delete(File), + %% Sleep for a period of time to avoid the CPU surge caused by repeated operation + Wait_time = 1000, + rabbit_log:warning("Failed to open '~p', deleted it and retry after ~pms.", + [File, Wait_time]), + timer:sleep(Wait_time), + open_table(VHost) + end. flush(VHost) -> try |
