dbwrap_ctdb: Pass in ctdbd_connection
authorVolker Lendecke <vl@samba.org>
Mon, 11 Apr 2016 14:20:32 +0000 (16:20 +0200)
committerRalph Boehme <slow@samba.org>
Tue, 17 May 2016 11:18:31 +0000 (13:18 +0200)
This removes one circular dependency of dbwrap_ctdb to messages.c: No call to
messaging_ctdbd_connection() anymore from dbwrap_ctdb.c.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/lib/ctdb_dummy.c
source3/lib/dbwrap/dbwrap_ctdb.c
source3/lib/dbwrap/dbwrap_ctdb.h
source3/lib/dbwrap/dbwrap_open.c
source3/torture/test_dbwrap_ctdb.c

index 1a27b4909bf7d946ec644680a847f32469017686..0e061becbc208fe6308c4ec23c33194fc5a70792 100644 (file)
@@ -64,6 +64,7 @@ bool ctdbd_process_exists(struct ctdbd_connection *conn, uint32_t vnn, pid_t pid
 }
 
 struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
+                               struct ctdbd_connection *conn,
                                const char *name,
                                int hash_size, int tdb_flags,
                                int open_flags, mode_t mode,
index 51e955a2a798b77bfb25494f8e29d79142691a87..cf039843668704fc47e901b1939f74564d8452d7 100644 (file)
@@ -1578,6 +1578,7 @@ static size_t db_ctdb_id(struct db_context *db, uint8_t *id, size_t idlen)
 }
 
 struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
+                               struct ctdbd_connection *conn,
                                const char *name,
                                int hash_size, int tdb_flags,
                                int open_flags, mode_t mode,
@@ -1618,13 +1619,7 @@ struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
 
        db_ctdb->transaction = NULL;
        db_ctdb->db = result;
-
-       db_ctdb->conn = messaging_ctdbd_connection();
-       if (db_ctdb->conn == NULL) {
-               DEBUG(1, ("Could not connect to ctdb\n"));
-               TALLOC_FREE(result);
-               return NULL;
-       }
+       db_ctdb->conn = conn;
 
        ret = ctdbd_db_attach(db_ctdb->conn, name, &db_ctdb->db_id, tdb_flags);
        if (ret != 0) {
index 3196b917bdd26751f804bc31df3263ed10fafed0..2e4b93ce003e1a1060db71a7813e8b5bf9c419f5 100644 (file)
 #include "dbwrap/dbwrap_private.h"
 
 struct db_context;
+struct ctdbd_connection;
 
 struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
+                               struct ctdbd_connection *conn,
                                const char *name,
                                int hash_size, int tdb_flags,
                                int open_flags, mode_t mode,
index 98e4f41cb00ac944a1940d8d9f583eadb7a7a3df..805e823be0b9cb7495f0a98aed5a0608e51e36c8 100644 (file)
@@ -28,6 +28,7 @@
 #include "lib/cluster_support.h"
 #include "util_tdb.h"
 #include "ctdbd_conn.h"
+#include "messages.h"
 
 bool db_is_local(const char *name)
 {
@@ -143,7 +144,16 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
                }
                /* allow ctdb for individual databases to be disabled */
                if (lp_parm_bool(-1, "ctdb", partname, True)) {
-                       result = db_open_ctdb(mem_ctx, partname, hash_size,
+                       struct ctdbd_connection *conn;
+
+                       conn = messaging_ctdbd_connection();
+                       if (conn == NULL) {
+                               DBG_WARNING("No ctdb connection\n");
+                               errno = EIO;
+                               return NULL;
+                       }
+                       result = db_open_ctdb(mem_ctx, conn, partname,
+                                             hash_size,
                                              tdb_flags, open_flags, mode,
                                              lock_order, dbwrap_flags);
                        if (result == NULL) {
index d7380b1dad2e7a206c90c06c2fa613314f460347..800b9fb58cd2b9937925e619e355f13a5e0757dd 100644 (file)
 #include "system/filesys.h"
 #include "lib/dbwrap/dbwrap.h"
 #include "lib/dbwrap/dbwrap_ctdb.h"
+#include "messages.h"
 
 bool run_local_dbwrap_ctdb(int dummy)
 {
-       struct db_context *db;
+       struct db_context *db = NULL;
        int res;
        bool ret = false;
        NTSTATUS status;
        uint32_t val;
+       struct ctdbd_connection *conn;
 
-       db = db_open_ctdb(talloc_tos(), "torture.tdb", 0, TDB_DEFAULT,
+       conn = messaging_ctdbd_connection();
+       if (conn == NULL) {
+               fprintf(stderr, "no ctdbd connection\n");
+               goto fail;
+       }
+
+       db = db_open_ctdb(talloc_tos(), conn, "torture.tdb", 0, TDB_DEFAULT,
                          O_RDWR, 0755, DBWRAP_LOCK_ORDER_1, DBWRAP_FLAG_NONE);
        if (db == NULL) {
                perror("db_open_ctdb failed");