You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2017/04/16 10:28:47 UTC

[09/16] lucy git commit: Don't hide I/O errors behind LockErr

Don't hide I/O errors behind LockErr

Only return a LockErr if there's lock contention, not on unrelated
I/O errors.


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/e06cdbf6
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/e06cdbf6
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/e06cdbf6

Branch: refs/heads/master
Commit: e06cdbf63d3036c3a33e5265444d827065539e92
Parents: 38a33ba
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Fri Feb 17 20:26:13 2017 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon Feb 20 16:26:22 2017 +0100

----------------------------------------------------------------------
 core/Lucy/Store/Lock.c | 26 +++++++++++---------------
 1 file changed, 11 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/e06cdbf6/core/Lucy/Store/Lock.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Store/Lock.c b/core/Lucy/Store/Lock.c
index 0879640..90a6aa0 100644
--- a/core/Lucy/Store/Lock.c
+++ b/core/Lucy/Store/Lock.c
@@ -263,16 +263,14 @@ S_request(LockFileLockIVARS *ivars, String *lock_path) {
     String *lock_dir_name = SSTR_WRAP_C("locks");
     if (!Folder_Exists(ivars->folder, lock_dir_name)) {
         if (!Folder_MkDir(ivars->folder, lock_dir_name)) {
-            Err *mkdir_err = (Err*)CERTIFY(Err_get_error(), ERR);
-            LockErr *err = LockErr_new(Str_newf("Can't create 'locks' directory: %o",
-                                                Err_Get_Mess(mkdir_err)));
+            Err *err = (Err*)INCREF(Err_get_error());
             // Maybe our attempt failed because another process succeeded.
             if (Folder_Find_Folder(ivars->folder, lock_dir_name)) {
                 DECREF(err);
             }
             else {
                 // Nope, everything failed, so bail out.
-                Err_set_error((Err*)err);
+                Err_set_error(err);
                 return false;
             }
         }
@@ -302,25 +300,23 @@ S_request(LockFileLockIVARS *ivars, String *lock_path) {
     context.outstream = outstream;
     context.json = json;
     Err *json_error = Err_trap(S_write_lockfile_json, &context);
-    bool wrote_json = !json_error;
     DECREF(outstream);
     DECREF(json);
-    if (wrote_json) {
+    if (json_error) {
+        Err_set_error(json_error);
+    }
+    else {
         success = Folder_Hard_Link(ivars->folder, ivars->link_path,
                                    lock_path);
         if (!success) {
+            // TODO: Only return a LockErr if errno == EEXIST, otherwise
+            // return a normal Err.
             Err *hard_link_err = (Err*)CERTIFY(Err_get_error(), ERR);
-            Err_set_error((Err*)LockErr_new(Str_newf("Failed to obtain lock at '%o': %o",
-                                                     lock_path,
-                                                     Err_Get_Mess(hard_link_err))));
+            String *msg = Str_newf("Failed to obtain lock at '%o': %o",
+                                   lock_path, Err_Get_Mess(hard_link_err));
+            Err_set_error((Err*)LockErr_new(msg));
         }
     }
-    else {
-        Err_set_error((Err*)LockErr_new(Str_newf("Failed to obtain lock at '%o': %o",
-                                                 lock_path,
-                                                 Err_Get_Mess(json_error))));
-        DECREF(json_error);
-    }
 
     // Verify that our temporary file got zapped.
     bool deletion_failed = !Folder_Delete(ivars->folder, ivars->link_path);