dbwrap: determine basename once instead of three times
authorDavid Disseldorp <ddiss@samba.org>
Tue, 10 Jul 2018 11:35:30 +0000 (13:35 +0200)
committerRalph Boehme <slow@samba.org>
Mon, 16 Jul 2018 19:11:30 +0000 (21:11 +0200)
Currently determined twice in the clear-if-first codepath and once in
the ctdb code path. Do it once at the top of the function.

Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Autobuild-User(master): Ralph Böhme <slow@samba.org>
Autobuild-Date(master): Mon Jul 16 21:11:30 CEST 2018 on sn-devel-144

source3/lib/dbwrap/dbwrap_open.c

index a4d5184396d73c10fe8aa637afcbc25cea1d368a..e144d9881bb22da553c96430cd678dbf7b5af89b 100644 (file)
@@ -64,6 +64,7 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
                           uint64_t dbwrap_flags)
 {
        struct db_context *result = NULL;
+       const char *base;
        const char *sockname;
 
        if (!DBWRAP_LOCK_ORDER_VALID(lock_order)) {
@@ -71,17 +72,16 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
                return NULL;
        }
 
+       base = strrchr_m(name, '/');
+       if (base != NULL) {
+               base++;
+       } else {
+               base = name;
+       }
+
        if (tdb_flags & TDB_CLEAR_IF_FIRST) {
-               const char *base;
                bool try_readonly = false;
 
-               base = strrchr_m(name, '/');
-               if (base != NULL) {
-                       base += 1;
-               } else {
-                       base = name;
-               }
-
                if (dbwrap_flags & DBWRAP_FLAG_OPTIMIZE_READONLY_ACCESS) {
                        try_readonly = true;
                }
@@ -97,17 +97,9 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
        }
 
        if (tdb_flags & TDB_CLEAR_IF_FIRST) {
-               const char *base;
                bool try_mutex = true;
                bool require_mutex = false;
 
-               base = strrchr_m(name, '/');
-               if (base != NULL) {
-                       base += 1;
-               } else {
-                       base = name;
-               }
-
                try_mutex = lp_parm_bool(-1, "dbwrap_tdb_mutexes", "*", try_mutex);
                try_mutex = lp_parm_bool(-1, "dbwrap_tdb_mutexes", base, try_mutex);
 
@@ -137,23 +129,14 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
        sockname = lp_ctdbd_socket();
 
        if (lp_clustering()) {
-               const char *partname;
-
                if (!socket_exist(sockname)) {
                        DEBUG(1, ("ctdb socket does not exist - is ctdb not "
                                  "running?\n"));
                        return NULL;
                }
 
-               /* ctdb only wants the file part of the name */
-               partname = strrchr(name, '/');
-               if (partname) {
-                       partname++;
-               } else {
-                       partname = name;
-               }
                /* allow ctdb for individual databases to be disabled */
-               if (lp_parm_bool(-1, "ctdb", partname, True)) {
+               if (lp_parm_bool(-1, "ctdb", base, true)) {
                        struct messaging_context *msg_ctx;
                        struct ctdbd_connection *conn;
 
@@ -165,13 +148,12 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
                        }
                        msg_ctx = server_messaging_context();
 
-                       result = db_open_ctdb(mem_ctx, msg_ctx, partname,
+                       result = db_open_ctdb(mem_ctx, msg_ctx, base,
                                              hash_size,
                                              tdb_flags, open_flags, mode,
                                              lock_order, dbwrap_flags);
                        if (result == NULL) {
-                               DEBUG(0,("failed to attach to ctdb %s\n",
-                                        partname));
+                               DBG_ERR("failed to attach to ctdb %s\n", base);
                                if (errno == 0) {
                                        errno = EIO;
                                }