summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2011-08-18 13:37:23 +0200
committerMichael Adam <obnox@samba.org>2011-08-22 17:11:06 +0200
commitd55e6cf53c92909c632de7a3f653a8e3e2c8c6c6 (patch)
treeaed5f57f01bd87cceeb7dfb67c75e5e29c721b80
parenta31d7516f5c6c1814e9f16645149eb597580dbef (diff)
downloadsamba-d55e6cf53c92909c632de7a3f653a8e3e2c8c6c6.tar.gz
samba-d55e6cf53c92909c632de7a3f653a8e3e2c8c6c6.tar.xz
samba-d55e6cf53c92909c632de7a3f653a8e3e2c8c6c6.zip
libctdb: Reorder attachdb
No code change, this is for easier reading the sequence of what happens Signed-off-by: Michael Adam <obnox@samba.org> (This used to be ctdb commit 883b9b185dce03a6bf233fbf2cfabad9883519e5)
-rw-r--r--ctdb/libctdb/ctdb.c171
1 files changed, 90 insertions, 81 deletions
diff --git a/ctdb/libctdb/ctdb.c b/ctdb/libctdb/ctdb.c
index 7115982d1a..141f42f63d 100644
--- a/ctdb/libctdb/ctdb.c
+++ b/ctdb/libctdb/ctdb.c
@@ -559,61 +559,71 @@ void ctdb_detachdb(struct ctdb_connection *ctdb, struct ctdb_db *db)
free(db);
}
+static void destroy_req_db(struct ctdb_connection *ctdb,
+ struct ctdb_request *req);
+static void attachdb_done(struct ctdb_connection *ctdb,
+ struct ctdb_request *req,
+ void *_db);
static void attachdb_getdbpath_done(struct ctdb_connection *ctdb,
struct ctdb_request *req,
- void *_db)
-{
- struct ctdb_db *db = _db;
+ void *_db);
- /* Do callback on original request. */
- db->callback(ctdb, req->extra, db->private_data);
-}
-
-struct ctdb_db *ctdb_attachdb_recv(struct ctdb_connection *ctdb,
- struct ctdb_request *req)
+struct ctdb_request *
+ctdb_attachdb_send(struct ctdb_connection *ctdb,
+ const char *name, bool persistent, uint32_t tdb_flags,
+ ctdb_callback_t callback, void *private_data)
{
- struct ctdb_request *dbpath_req = req->extra;
- struct ctdb_reply_control *reply;
- struct ctdb_db *db = req->priv_data;
- uint32_t tdb_flags = db->tdb_flags;
- struct tdb_logging_context log;
+ struct ctdb_request *req;
+ struct ctdb_db *db;
+ uint32_t opcode;
- /* Never sent the dbpath request? We've failed. */
- if (!dbpath_req) {
- /* FIXME: Save errno? */
- errno = EINVAL;
+ /* FIXME: Search if db already open. */
+ db = malloc(sizeof(*db));
+ if (!db) {
return NULL;
}
- reply = unpack_reply_control(ctdb, dbpath_req, CTDB_CONTROL_GETDBPATH);
- if (!reply) {
- return NULL;
+ if (persistent) {
+ opcode = CTDB_CONTROL_DB_ATTACH_PERSISTENT;
+ } else {
+ opcode = CTDB_CONTROL_DB_ATTACH;
}
- if (reply->status != 0) {
- DEBUG(db->ctdb, LOG_ERR,
- "ctdb_attachdb_recv: reply status %i", reply->status);
+
+ req = new_ctdb_control_request(ctdb, opcode, CTDB_CURRENT_NODE, name,
+ strlen(name) + 1, attachdb_done, db);
+ if (!req) {
+ DEBUG(ctdb, LOG_ERR,
+ "ctdb_attachdb_send: failed allocating DB_ATTACH");
+ free(db);
return NULL;
}
- tdb_flags = db->persistent ? TDB_DEFAULT : TDB_NOSYNC;
- tdb_flags |= TDB_DISALLOW_NESTING;
+ db->ctdb = ctdb;
+ db->tdb_flags = tdb_flags;
+ db->persistent = persistent;
+ db->callback = callback;
+ db->private_data = private_data;
- log.log_fn = ctdb_tdb_log_bridge;
- log.log_private = ctdb;
- db->tdb = tdb_open_ex((char *)reply->data, 0, tdb_flags, O_RDWR, 0,
- &log, NULL);
- if (db->tdb == NULL) {
- DEBUG(db->ctdb, LOG_ERR,
- "ctdb_attachdb_recv: failed to tdb_open %s",
- (char *)reply->data);
- return NULL;
- }
+ req->extra_destructor = destroy_req_db;
+ /* This is set non-NULL when we succeed, see ctdb_attachdb_recv */
+ req->extra = NULL;
- /* Finally, separate the db from the request (see destroy_req_db). */
- req->priv_data = NULL;
+ /* Flags get overloaded into srvid. */
+ req->hdr.control->srvid = tdb_flags;
DEBUG(db->ctdb, LOG_DEBUG,
- "ctdb_attachdb_recv: db %p, tdb %s", db, (char *)reply->data);
- return db;
+ "ctdb_attachdb_send: DB_ATTACH request %p", req);
+ return req;
+}
+
+static void destroy_req_db(struct ctdb_connection *ctdb,
+ struct ctdb_request *req)
+{
+ /* Incomplete db is in priv_data. */
+ free(req->priv_data);
+ /* second request is chained off this one. */
+ if (req->extra) {
+ ctdb_request_free(ctdb, req->extra);
+ }
}
static void attachdb_done(struct ctdb_connection *ctdb,
@@ -660,62 +670,61 @@ static void attachdb_done(struct ctdb_connection *ctdb,
"ctdb_attachdb_send(async): created getdbpath request");
}
-static void destroy_req_db(struct ctdb_connection *ctdb,
- struct ctdb_request *req)
+static void attachdb_getdbpath_done(struct ctdb_connection *ctdb,
+ struct ctdb_request *req,
+ void *_db)
{
- /* Incomplete db is in priv_data. */
- free(req->priv_data);
- /* second request is chained off this one. */
- if (req->extra) {
- ctdb_request_free(ctdb, req->extra);
- }
+ struct ctdb_db *db = _db;
+
+ /* Do callback on original request. */
+ db->callback(ctdb, req->extra, db->private_data);
}
-struct ctdb_request *
-ctdb_attachdb_send(struct ctdb_connection *ctdb,
- const char *name, bool persistent, uint32_t tdb_flags,
- ctdb_callback_t callback, void *private_data)
+struct ctdb_db *ctdb_attachdb_recv(struct ctdb_connection *ctdb,
+ struct ctdb_request *req)
{
- struct ctdb_request *req;
- struct ctdb_db *db;
- uint32_t opcode;
+ struct ctdb_request *dbpath_req = req->extra;
+ struct ctdb_reply_control *reply;
+ struct ctdb_db *db = req->priv_data;
+ uint32_t tdb_flags = db->tdb_flags;
+ struct tdb_logging_context log;
- /* FIXME: Search if db already open. */
- db = malloc(sizeof(*db));
- if (!db) {
+ /* Never sent the dbpath request? We've failed. */
+ if (!dbpath_req) {
+ /* FIXME: Save errno? */
+ errno = EINVAL;
return NULL;
}
- if (persistent) {
- opcode = CTDB_CONTROL_DB_ATTACH_PERSISTENT;
- } else {
- opcode = CTDB_CONTROL_DB_ATTACH;
+ reply = unpack_reply_control(ctdb, dbpath_req, CTDB_CONTROL_GETDBPATH);
+ if (!reply) {
+ return NULL;
}
-
- req = new_ctdb_control_request(ctdb, opcode, CTDB_CURRENT_NODE, name,
- strlen(name) + 1, attachdb_done, db);
- if (!req) {
- DEBUG(ctdb, LOG_ERR,
- "ctdb_attachdb_send: failed allocating DB_ATTACH");
- free(db);
+ if (reply->status != 0) {
+ DEBUG(db->ctdb, LOG_ERR,
+ "ctdb_attachdb_recv: reply status %i", reply->status);
return NULL;
}
- db->ctdb = ctdb;
- db->tdb_flags = tdb_flags;
- db->persistent = persistent;
- db->callback = callback;
- db->private_data = private_data;
+ tdb_flags = db->persistent ? TDB_DEFAULT : TDB_NOSYNC;
+ tdb_flags |= TDB_DISALLOW_NESTING;
- req->extra_destructor = destroy_req_db;
- /* This is set non-NULL when we succeed, see ctdb_attachdb_recv */
- req->extra = NULL;
+ log.log_fn = ctdb_tdb_log_bridge;
+ log.log_private = ctdb;
+ db->tdb = tdb_open_ex((char *)reply->data, 0, tdb_flags, O_RDWR, 0,
+ &log, NULL);
+ if (db->tdb == NULL) {
+ DEBUG(db->ctdb, LOG_ERR,
+ "ctdb_attachdb_recv: failed to tdb_open %s",
+ (char *)reply->data);
+ return NULL;
+ }
- /* Flags get overloaded into srvid. */
- req->hdr.control->srvid = tdb_flags;
+ /* Finally, separate the db from the request (see destroy_req_db). */
+ req->priv_data = NULL;
DEBUG(db->ctdb, LOG_DEBUG,
- "ctdb_attachdb_send: DB_ATTACH request %p", req);
- return req;
+ "ctdb_attachdb_recv: db %p, tdb %s", db, (char *)reply->data);
+ return db;
}
static unsigned long lock_magic(struct ctdb_lock *lock)