From 3fe3226daa8488e0fa787c40359c3401b6f05fc0 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 11 Apr 2016 16:20:32 +0200 Subject: [PATCH] dbwrap_ctdb: Pass in ctdbd_connection 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 Reviewed-by: Ralph Boehme --- source3/lib/ctdb_dummy.c | 1 + source3/lib/dbwrap/dbwrap_ctdb.c | 9 ++------- source3/lib/dbwrap/dbwrap_ctdb.h | 2 ++ source3/lib/dbwrap/dbwrap_open.c | 12 +++++++++++- source3/torture/test_dbwrap_ctdb.c | 12 ++++++++++-- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/source3/lib/ctdb_dummy.c b/source3/lib/ctdb_dummy.c index 1a27b4909bf..0e061becbc2 100644 --- a/source3/lib/ctdb_dummy.c +++ b/source3/lib/ctdb_dummy.c @@ -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, diff --git a/source3/lib/dbwrap/dbwrap_ctdb.c b/source3/lib/dbwrap/dbwrap_ctdb.c index 51e955a2a79..cf039843668 100644 --- a/source3/lib/dbwrap/dbwrap_ctdb.c +++ b/source3/lib/dbwrap/dbwrap_ctdb.c @@ -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) { diff --git a/source3/lib/dbwrap/dbwrap_ctdb.h b/source3/lib/dbwrap/dbwrap_ctdb.h index 3196b917bdd..2e4b93ce003 100644 --- a/source3/lib/dbwrap/dbwrap_ctdb.h +++ b/source3/lib/dbwrap/dbwrap_ctdb.h @@ -26,8 +26,10 @@ #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, diff --git a/source3/lib/dbwrap/dbwrap_open.c b/source3/lib/dbwrap/dbwrap_open.c index 98e4f41cb00..805e823be0b 100644 --- a/source3/lib/dbwrap/dbwrap_open.c +++ b/source3/lib/dbwrap/dbwrap_open.c @@ -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) { diff --git a/source3/torture/test_dbwrap_ctdb.c b/source3/torture/test_dbwrap_ctdb.c index d7380b1dad2..800b9fb58cd 100644 --- a/source3/torture/test_dbwrap_ctdb.c +++ b/source3/torture/test_dbwrap_ctdb.c @@ -22,16 +22,24 @@ #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"); -- 2.11.4.GIT