You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ja...@apache.org on 2018/03/09 18:09:18 UTC

[couchdb] 01/03: Proper error handling for file:open() call

This is an automated email from the ASF dual-hosted git repository.

jan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit b05c1775fb85d7fb979879fd16dba4ed736a2a96
Author: AlexanderKaraberov <al...@spotme.com>
AuthorDate: Wed Feb 14 17:10:32 2018 +0100

    Proper error handling for file:open() call
---
 src/couch/src/couch_file.erl | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/couch/src/couch_file.erl b/src/couch/src/couch_file.erl
index 7b6f519..8a1b205 100644
--- a/src/couch/src/couch_file.erl
+++ b/src/couch/src/couch_file.erl
@@ -213,8 +213,12 @@ truncate(Fd, Pos) ->
 %%----------------------------------------------------------------------
 
 sync(Filepath) when is_list(Filepath) ->
-    {ok, Fd} = file:open(Filepath, [append, raw]),
-    try ok = file:sync(Fd) after ok = file:close(Fd) end;
+    case file:open(Filepath, [append, raw]) of
+      {ok, Fd} ->
+         try ok = file:sync(Fd) after ok = file:close(Fd) end;
+      Error ->
+         throw(Error)
+      end;
 sync(Fd) ->
     gen_server:call(Fd, sync, infinity).
 
@@ -389,14 +393,18 @@ init({Filepath, Options, ReturnPid, Ref}) ->
         % open in read mode first, so we don't create the file if it doesn't exist.
         case file:open(Filepath, [read, raw]) of
         {ok, Fd_Read} ->
-            {ok, Fd} = file:open(Filepath, OpenOptions),
-            %% Save Fd in process dictionary for debugging purposes
-            put(couch_file_fd, {Fd, Filepath}),
-            ok = file:close(Fd_Read),
-            maybe_track_open_os_files(Options),
-            {ok, Eof} = file:position(Fd, eof),
-            erlang:send_after(?INITIAL_WAIT, self(), maybe_close),
-            {ok, #file{fd=Fd, eof=Eof, is_sys=IsSys, pread_limit=Limit}};
+             case file:open(Filepath, OpenOptions) of
+               {ok, Fd} ->
+                  %% Save Fd in process dictionary for debugging purposes
+                  put(couch_file_fd, {Fd, Filepath}),
+                  ok = file:close(Fd_Read),
+                  maybe_track_open_os_files(Options),
+                  {ok, Eof} = file:position(Fd, eof),
+                  erlang:send_after(?INITIAL_WAIT, self(), maybe_close),
+                  {ok, #file{fd=Fd, eof=Eof, is_sys=IsSys, pread_limit=Limit}};
+                Error ->
+                  init_status_error(ReturnPid, Ref, Error)
+                end;
         Error ->
             init_status_error(ReturnPid, Ref, Error)
         end

-- 
To stop receiving notification emails like this one, please contact
jan@apache.org.