s3:dbwrap_ctdb: return the number of records in db_ctdb_traverse() for persistent dbs
authorStefan Metzmacher <metze@samba.org>
Fri, 14 Oct 2011 14:11:06 +0000 (16:11 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 14 Oct 2011 18:59:37 +0000 (20:59 +0200)
metze

Autobuild-User: Stefan Metzmacher <metze@samba.org>
Autobuild-Date: Fri Oct 14 20:59:37 CEST 2011 on sn-devel-104

source3/lib/dbwrap/dbwrap_ctdb.c

index e0f98cc47db793904a0e6e13f4c25898cfbc1251..38a339536e31486d093ddd4217e63ef6239a0a0e 100644 (file)
@@ -1297,12 +1297,21 @@ static int db_ctdb_traverse(struct db_context *db,
                        return ret;
                }
                if (ctx->transaction && ctx->transaction->m_write) {
-                       /* we now have to handle keys not yet present at transaction start */
+                       /*
+                        * we now have to handle keys not yet
+                        * present at transaction start
+                        */
                        struct db_context *newkeys = db_open_rbt(talloc_tos());
                        struct ctdb_marshall_buffer *mbuf = ctx->transaction->m_write;
                        struct ctdb_rec_data *rec=NULL;
                        NTSTATUS status;
                        int i;
+                       int count = 0;
+
+                       if (newkeys == NULL) {
+                               return -1;
+                       }
+
                        for (i=0; i<mbuf->count; i++) {
                                TDB_DATA key;
                                rec =db_ctdb_marshall_loop_next(mbuf, rec,
@@ -1317,9 +1326,12 @@ static int db_ctdb_traverse(struct db_context *db,
                        status = dbwrap_traverse(newkeys,
                                                 traverse_persistent_callback_dbwrap,
                                                 &state,
-                                                NULL);
-                       ret = NT_STATUS_IS_OK(status) ? 0 : -1;
+                                                &count);
                        talloc_free(newkeys);
+                       if (!NT_STATUS_IS_OK(status)) {
+                               return -1;
+                       }
+                       ret += count;
                }
                return ret;
        }