The branch, master has been updated
       via  f84e372 dbwrap_ctdb: return correct record count for a persistent 
db read-only traverse
       via  7c0607e dbwrap_ctdb: increment record count in traverse_callback()
       via  eaaee00 dbwrap_ctdb: use struct initializer in db_ctdb_traverse()
       via  fce54bf dbwrap_ctdb: use struct initializer in 
db_ctdb_traverse_read()
       via  dcc50d6 dbwrap_ctdb: README.Coding fixes in traverse_callback()
       via  daea965 dbwrap_ctdb: simplify if condition
       via  7cafbc5 dbwrap_ctdb: add error checking to ctdbd_dbpath()
       via  382620d dbwrap_tdb: use struct initializer
       via  9a9620b dbwrap_tdb: move a function call out of an if condition
       via  6617b2d dbwrap: early return, removes an indentation level
       via  b1838b1 dbwrap: move sockname variable and call to lp_ctdbd_socket 
into context
      from  e52abc8 ctdb-doc: Remove PIDFILE option from ctdbd_wrapper man page

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit f84e372a5ba154c524c63a2da07410c036fd0222
Author: Ralph Boehme <[email protected]>
Date:   Mon Sep 10 12:50:01 2018 +0200

    dbwrap_ctdb: return correct record count for a persistent db read-only 
traverse
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>
    
    Autobuild-User(master): Jeremy Allison <[email protected]>
    Autobuild-Date(master): Thu Sep 13 01:34:30 CEST 2018 on sn-devel-144

commit 7c0607e96d9bb77522d7d8f4f452dc14880a5b0d
Author: Ralph Boehme <[email protected]>
Date:   Sun Sep 9 18:51:43 2018 +0200

    dbwrap_ctdb: increment record count in traverse_callback()
    
    state->count wasn't incremented and is returned at the end of a
    dbwrap_traverse().
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit eaaee00a068257b6d130518a2a228fab07df259e
Author: Ralph Boehme <[email protected]>
Date:   Sun Sep 9 18:50:14 2018 +0200

    dbwrap_ctdb: use struct initializer in db_ctdb_traverse()
    
    This ensures all struct members are implicitly initialized.
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit fce54bf071a7cf86dfdec7b858a0c5254542e6d4
Author: Ralph Boehme <[email protected]>
Date:   Sun Sep 9 18:48:13 2018 +0200

    dbwrap_ctdb: use struct initializer in db_ctdb_traverse_read()
    
    This ensures all struct members are implicitly initialized.
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit dcc50d670702ccbd14f9e58857499911fa215e0b
Author: Ralph Boehme <[email protected]>
Date:   Sun Sep 9 18:35:26 2018 +0200

    dbwrap_ctdb: README.Coding fixes in traverse_callback()
    
    NULL initialize pointers, check function return values, explicit
    variable check against NULL.
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit daea9655ef9fc5a0b7b9389f9c4a4b4114261933
Author: Ralph Boehme <[email protected]>
Date:   Tue Sep 4 12:47:42 2018 +0200

    dbwrap_ctdb: simplify if condition
    
    This just moves the talloc_memdup() out of the if condition as per
    README.Coding.
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 7cafbc50d9cc4c1b3b985cc1398d184e0a1a75b7
Author: Ralph Boehme <[email protected]>
Date:   Sun Mar 4 23:39:05 2018 +0100

    dbwrap_ctdb: add error checking to ctdbd_dbpath()
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 382620d42dd12fc9bb946b15044ae09a569abca7
Author: Ralph Boehme <[email protected]>
Date:   Sat Aug 18 08:35:27 2018 +0200

    dbwrap_tdb: use struct initializer
    
    This ensures all struct members are implicitly initialized.
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 9a9620bb4252a76385284092a1497920e86b34eb
Author: Ralph Boehme <[email protected]>
Date:   Sat Aug 18 09:12:21 2018 +0200

    dbwrap_tdb: move a function call out of an if condition
    
    At least for me this improves readability somewhat. No change in
    behaviour.
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 6617b2db35ec6f5f5acb979bf672414a1f9e5657
Author: Ralph Boehme <[email protected]>
Date:   Sat Nov 18 12:13:15 2017 +0100

    dbwrap: early return, removes an indentation level
    
    No change in behaviour.
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit b1838b15750da7b5d2627f7f8093e19000ddbb3c
Author: Ralph Boehme <[email protected]>
Date:   Sat Nov 18 08:56:09 2017 +0100

    dbwrap: move sockname variable and call to lp_ctdbd_socket into context
    
    sockname is only needed in a cluster.
    
    Signed-off-by: Ralph Boehme <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

-----------------------------------------------------------------------

Summary of changes:
 lib/dbwrap/dbwrap_tdb.c          | 14 +++++----
 source3/lib/dbwrap/dbwrap_ctdb.c | 61 ++++++++++++++++++++++++++++------------
 source3/lib/dbwrap/dbwrap_open.c | 40 +++++++++++++-------------
 3 files changed, 72 insertions(+), 43 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/dbwrap/dbwrap_tdb.c b/lib/dbwrap/dbwrap_tdb.c
index f597645..d695f3b 100644
--- a/lib/dbwrap/dbwrap_tdb.c
+++ b/lib/dbwrap/dbwrap_tdb.c
@@ -116,13 +116,17 @@ static struct db_record *db_tdb_fetch_locked_internal(
        struct db_tdb_ctx *ctx = talloc_get_type_abort(db->private_data,
                                                       struct db_tdb_ctx);
        struct tdb_fetch_locked_state state;
+       int ret;
 
-       state.mem_ctx = mem_ctx;
-       state.result = NULL;
+       state = (struct tdb_fetch_locked_state) {
+               .mem_ctx = mem_ctx,
+       };
 
-       if ((tdb_parse_record(ctx->wtdb->tdb, key, db_tdb_fetchlock_parse,
-                             &state) < 0) &&
-           (tdb_error(ctx->wtdb->tdb) != TDB_ERR_NOEXIST)) {
+       ret = tdb_parse_record(ctx->wtdb->tdb,
+                              key,
+                              db_tdb_fetchlock_parse,
+                              &state);
+       if ((ret < 0) && (tdb_error(ctx->wtdb->tdb) != TDB_ERR_NOEXIST)) {
                tdb_chainunlock(ctx->wtdb->tdb, key);
                return NULL;
        }
diff --git a/source3/lib/dbwrap/dbwrap_ctdb.c b/source3/lib/dbwrap/dbwrap_ctdb.c
index 2885f4e..b487d10 100644
--- a/source3/lib/dbwrap/dbwrap_ctdb.c
+++ b/source3/lib/dbwrap/dbwrap_ctdb.c
@@ -1232,12 +1232,14 @@ again:
        result->value.dsize = ctdb_data.dsize - sizeof(crec->header);
        result->value.dptr = NULL;
 
-       if ((result->value.dsize != 0)
-           && !(result->value.dptr = (uint8_t *)talloc_memdup(
-                        result, ctdb_data.dptr + sizeof(crec->header),
-                        result->value.dsize))) {
-               DEBUG(0, ("talloc failed\n"));
-               TALLOC_FREE(result);
+       if (result->value.dsize != 0) {
+               result->value.dptr = talloc_memdup(
+                       result, ctdb_data.dptr + sizeof(crec->header),
+                       result->value.dsize);
+               if (result->value.dptr == NULL) {
+                       DBG_ERR("talloc failed\n");
+                       TALLOC_FREE(result);
+               }
        }
 
        SAFE_FREE(ctdb_data.dptr);
@@ -1530,12 +1532,20 @@ struct traverse_state {
 static void traverse_callback(TDB_DATA key, TDB_DATA data, void *private_data)
 {
        struct traverse_state *state = (struct traverse_state *)private_data;
-       struct db_record *rec;
-       TALLOC_CTX *tmp_ctx = talloc_new(state->db);
+       struct db_record *rec = NULL;
+       TALLOC_CTX *tmp_ctx = NULL;
+
+       tmp_ctx = talloc_new(state->db);
+       if (tmp_ctx == NULL) {
+               DBG_ERR("talloc_new failed\n");
+               return;
+       }
+
        /* we have to give them a locked record to prevent races */
        rec = db_ctdb_fetch_locked(state->db, tmp_ctx, key);
-       if (rec && rec->value.dsize > 0) {
+       if (rec != NULL && rec->value.dsize > 0) {
                state->fn(rec, state->private_data);
+               state->count++;
        }
        talloc_free(tmp_ctx);
 }
@@ -1616,10 +1626,11 @@ static int db_ctdb_traverse(struct db_context *db,
                                                         struct db_ctdb_ctx);
        struct traverse_state state;
 
-       state.db = db;
-       state.fn = fn;
-       state.private_data = private_data;
-       state.count = 0;
+       state = (struct traverse_state) {
+               .db = db,
+               .fn = fn,
+               .private_data = private_data,
+       };
 
        if (db->persistent) {
                struct tdb_context *ltdb = ctx->wtdb->tdb;
@@ -1748,15 +1759,24 @@ static int db_ctdb_traverse_read(struct db_context *db,
                                                         struct db_ctdb_ctx);
        struct traverse_state state;
 
-       state.db = db;
-       state.fn = fn;
-       state.private_data = private_data;
-       state.count = 0;
+       state = (struct traverse_state) {
+               .db = db,
+               .fn = fn,
+               .private_data = private_data,
+       };
 
        if (db->persistent) {
                /* for persistent databases we don't need to do a ctdb traverse,
                   we can do a faster local traverse */
-               return tdb_traverse_read(ctx->wtdb->tdb, 
traverse_persistent_callback_read, &state);
+               int nrecs;
+
+               nrecs = tdb_traverse_read(ctx->wtdb->tdb,
+                                         traverse_persistent_callback_read,
+                                         &state);
+               if (nrecs == -1) {
+                       return -1;
+               }
+               return state.count;
        }
 
        ret = db_ctdbd_traverse(ctx->db_id, traverse_read_callback, &state);
@@ -1856,6 +1876,11 @@ struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
 
        db_path = ctdbd_dbpath(messaging_ctdb_connection(), db_ctdb,
                               db_ctdb->db_id);
+       if (db_path == NULL) {
+               DBG_ERR("ctdbd_dbpath failed\n");
+               TALLOC_FREE(result);
+               return NULL;
+       }
 
        result->persistent = persistent;
        result->lock_order = lock_order;
diff --git a/source3/lib/dbwrap/dbwrap_open.c b/source3/lib/dbwrap/dbwrap_open.c
index 33bf969..c8dfd91 100644
--- a/source3/lib/dbwrap/dbwrap_open.c
+++ b/source3/lib/dbwrap/dbwrap_open.c
@@ -65,7 +65,7 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
 {
        struct db_context *result = NULL;
        const char *base;
-       const char *sockname;
+       struct loadparm_context *lp_ctx = NULL;
 
        if (!DBWRAP_LOCK_ORDER_VALID(lock_order)) {
                errno = EINVAL;
@@ -126,9 +126,10 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
                }
        }
 
-       sockname = lp_ctdbd_socket();
-
        if (lp_clustering()) {
+               const char *sockname;
+
+               sockname = lp_ctdbd_socket();
                if (!socket_exist(sockname)) {
                        DEBUG(1, ("ctdb socket does not exist - is ctdb not "
                                  "running?\n"));
@@ -159,27 +160,26 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
                                }
                                return NULL;
                        }
+
+                       return result;
                }
        }
 
-       if (result == NULL) {
-               struct loadparm_context *lp_ctx = loadparm_init_s3(mem_ctx, 
loadparm_s3_helpers());
+       lp_ctx = loadparm_init_s3(mem_ctx, loadparm_s3_helpers());
 
-               if (hash_size == 0) {
-                       hash_size = lpcfg_tdb_hash_size(lp_ctx, name);
-               }
-               tdb_flags = lpcfg_tdb_flags(lp_ctx, tdb_flags);
-
-               result = dbwrap_local_open(
-                       mem_ctx,
-                       name,
-                       hash_size,
-                       tdb_flags,
-                       open_flags,
-                       mode,
-                       lock_order,
-                       dbwrap_flags);
-               talloc_unlink(mem_ctx, lp_ctx);
+       if (hash_size == 0) {
+               hash_size = lpcfg_tdb_hash_size(lp_ctx, name);
        }
+       tdb_flags = lpcfg_tdb_flags(lp_ctx, tdb_flags);
+
+       result = dbwrap_local_open(mem_ctx,
+                                  name,
+                                  hash_size,
+                                  tdb_flags,
+                                  open_flags,
+                                  mode,
+                                  lock_order,
+                                  dbwrap_flags);
+       talloc_unlink(mem_ctx, lp_ctx);
        return result;
 }


-- 
Samba Shared Repository

Reply via email to