summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Vatamaniuc <vatamane@apache.org>2017-06-16 14:36:46 -0400
committerNick Vatamaniuc <vatamane@apache.org>2017-06-16 15:56:07 -0400
commitbb3767689259f1cad6d8c7e0746c0d0e38d72f86 (patch)
tree437968d5d22316e6951decf4238c43acb94107b7
parentedbddc43f02fe4b02210bc9da02253642f3fb2fb (diff)
downloadcouchdb-bb3767689259f1cad6d8c7e0746c0d0e38d72f86.tar.gz
Save IO logs even if exit reason is
-rw-r--r--src/couch/src/couch_io_logger.erl9
-rw-r--r--src/couch/src/couch_os_process.erl3
2 files changed, 9 insertions, 3 deletions
diff --git a/src/couch/src/couch_io_logger.erl b/src/couch/src/couch_io_logger.erl
index 387b23195..a8f44b7be 100644
--- a/src/couch/src/couch_io_logger.erl
+++ b/src/couch/src/couch_io_logger.erl
@@ -87,7 +87,10 @@ log_name() ->
close_logs() ->
file:close(get(logger_out_fd)),
- file:close(get(logger_in_fd)).
+ file:close(get(logger_in_fd)),
+ erase(logger_path),
+ erase(logger_out_fd),
+ erase(logger_in_fd).
save_error_logs(Path, Err) ->
@@ -98,8 +101,8 @@ save_error_logs(Path, Err) ->
OFd = get(logger_in_fd),
file:position(IFd, 0),
file:position(OFd, 0),
- file:copy(IFd, Path ++ ".out.log"),
- file:copy(OFd, Path ++ ".in.log"),
+ file:copy(IFd, Path ++ ".in.log"),
+ file:copy(OFd, Path ++ ".out.log"),
couch_log:error("XXXXXXXXXXXXXXXXX saved error log ~p ~p", [Path, Err]).
diff --git a/src/couch/src/couch_os_process.erl b/src/couch/src/couch_os_process.erl
index fb1f1427f..4640b3589 100644
--- a/src/couch/src/couch_os_process.erl
+++ b/src/couch/src/couch_os_process.erl
@@ -204,8 +204,10 @@ handle_call({prompt, Data}, _From, #os_proc{idle=Idle}=OsProc) ->
throw:{error, OsError} ->
{reply, OsError, OsProc, Idle};
throw:{fatal, OsError} ->
+ couch_io_logger:stop_error(OsError),
{stop, normal, OsError, OsProc};
throw:OtherError ->
+ couch_io_logger:stop_error(OtherError),
{stop, normal, OtherError, OsProc}
after
garbage_collect()
@@ -218,6 +220,7 @@ handle_cast({send, Data}, #os_proc{writer=Writer, idle=Idle}=OsProc) ->
catch
throw:OsError ->
couch_log:error("Failed sending data: ~p -> ~p", [Data, OsError]),
+ couch_io_logger:stop_error(OsError),
{stop, normal, OsProc}
end;
handle_cast(garbage_collect, #os_proc{idle=Idle}=OsProc) ->