Skip to content

Commit 7505692

Browse files
committed
Fix leaked opened db handle in smoosh
`smoosh_channel:maybe_remonitor_cpid/3` opened db and never closed it. That left a dangling reference (monitor to it) which prevented that db handle from becoming idle. We noticed this after inspecting dangling deleted fd handles which were still left open by something. That something turned to be smoosh_channel gen_server.
1 parent 11a3d0a commit 7505692

1 file changed

Lines changed: 21 additions & 17 deletions

File tree

src/smoosh/src/smoosh_channel.erl

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -390,27 +390,31 @@ maybe_remonitor_cpid(#state{} = State, DbName, Reason) when is_binary(DbName) ->
390390
#state{name = Name, active = Active} = State,
391391
case couch_db:open_int(DbName, []) of
392392
{ok, Db} ->
393-
try couch_db:get_compactor_pid_sync(Db) of
394-
nil ->
395-
LogMsg = "~s : exit for compaction of ~p: ~p",
396-
LogArgs = [Name, smoosh_utils:stringify(DbName), Reason],
397-
couch_log:warning(LogMsg, LogArgs),
398-
re_enqueue(DbName),
399-
State;
400-
CPid when is_pid(CPid) ->
401-
monitor(process, CPid),
402-
Level = smoosh_utils:log_level("compaction_log_level", "notice"),
403-
LogMsg = "~s: ~s compaction already running. Re-monitor Pid ~p",
404-
LogArgs = [Name, smoosh_utils:stringify(DbName), CPid],
405-
couch_log:Level(LogMsg, LogArgs),
406-
State#state{active = Active#{DbName => CPid}}
393+
try
394+
case couch_db:get_compactor_pid_sync(Db) of
395+
nil ->
396+
LogMsg = "~s : exit for compaction of ~p: ~p",
397+
LogArgs = [Name, smoosh_utils:stringify(DbName), Reason],
398+
couch_log:warning(LogMsg, LogArgs),
399+
re_enqueue(DbName),
400+
State;
401+
CPid when is_pid(CPid) ->
402+
monitor(process, CPid),
403+
Level = smoosh_utils:log_level("compaction_log_level", "notice"),
404+
LogMsg = "~s: ~s compaction already running. Re-monitor Pid ~p",
405+
LogArgs = [Name, smoosh_utils:stringify(DbName), CPid],
406+
couch_log:Level(LogMsg, LogArgs),
407+
State#state{active = Active#{DbName => CPid}}
408+
end
407409
catch
408410
_:Error ->
409-
LogMsg = "~s: error remonitoring db compaction ~p error:~p",
410-
LogArgs = [Name, smoosh_utils:stringify(DbName), Error],
411-
couch_log:warning(LogMsg, LogArgs),
411+
ErrLogMsg = "~s: error remonitoring db compaction ~p error:~p",
412+
ErrLogArgs = [Name, smoosh_utils:stringify(DbName), Error],
413+
couch_log:warning(ErrLogMsg, ErrLogArgs),
412414
re_enqueue(DbName),
413415
State
416+
after
417+
couch_db:close(Db)
414418
end;
415419
Error = {not_found, no_db_file} ->
416420
LogMsg = "~s : exit for compaction of ~p: ~p",

0 commit comments

Comments
 (0)