diff options
| author | Rusty Russell <rusty@rustcorp.com.au> | 2010-06-04 13:33:08 +0930 |
|---|---|---|
| committer | Rusty Russell <rusty@rustcorp.com.au> | 2010-06-04 13:33:08 +0930 |
| commit | 94df6f322d511fc338a1684e4a3d7e80ddeb8476 (patch) | |
| tree | 4c25aac90be4493f6dc0f3e1474abe9639dbcb3e /ctdb/include | |
| parent | 5d0d51e77b303af132e6f9f1f898f3f11f76c69a (diff) | |
libctdb: change callback for ctdb_readrecordlock.
After discussion with Ronnie, we decided to revisit this interface. We use
the name ctdb_readrecordlock_async, as it is *not* always a send, and we
use a specific callback to avoid the "fake request" creation on the fast
path.
The request itself is never exposed: this means it can't be cancelled,
but we can revisit that later if need be.
This makes both use and implementation simpler.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
(This used to be ctdb commit 03b5546ae45a60ab41eb4f7159a45bfdbf959888)
Diffstat (limited to 'ctdb/include')
| -rw-r--r-- | ctdb/include/ctdb.h | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/ctdb/include/ctdb.h b/ctdb/include/ctdb.h index 32a7a2c357..fa3f30dc3f 100644 --- a/ctdb/include/ctdb.h +++ b/ctdb/include/ctdb.h @@ -100,16 +100,16 @@ struct ctdb_lock; * When the lock is released, data is freed too, so make sure to copy the data * before that. * - * This returns true on success, and req will be non-NULL if a request was - * actually sent, otherwise callback will have already been called. + * This returns true on success: the callback may have already been called, + * or it might be awaiting a response from ctdbd. */ +typedef void (*ctdb_rrl_callback_t)(struct ctdb_db *ctdb_db, + struct ctdb_lock *lock, + TDB_DATA data, + void *private); bool -ctdb_readrecordlock_send(struct ctdb_db *ctdb_db, TDB_DATA key, - struct ctdb_request **req, - ctdb_callback_t callback, void *private_data); -struct ctdb_lock *ctdb_readrecordlock_recv(struct ctdb_db *ctdb_db, - struct ctdb_request *handle, - TDB_DATA *data); +ctdb_readrecordlock_async(struct ctdb_db *ctdb_db, TDB_DATA key, + ctdb_rrl_callback_t callback, void *private_data); /* Returns null on failure. */ struct ctdb_lock *ctdb_readrecordlock(struct ctdb_db *ctdb_db, TDB_DATA key, @@ -118,9 +118,7 @@ struct ctdb_lock *ctdb_readrecordlock(struct ctdb_db *ctdb_db, TDB_DATA key, /* * Function to write data to a record * This function may ONLY be called while holding a lock to the record - * created by ctdb_readrecordlock* - * Either from the callback provided to ctdb_readrecordlock_send() - * or after calling ctdb_readrecordlock_recv() but before calling + * created by ctdb_readrecordlock*, and before calling * ctdb_release_lock() to release the lock. */ int ctdb_writerecord(struct ctdb_lock *lock, TDB_DATA data); @@ -221,9 +219,11 @@ int ctdb_cancel(struct ctdb_request *); ctdb_attachdb_send((ctdb), (name), (persistent), (tdb_flags), \ ctdb_sendcb((cb), (cbdata)), (cbdata)) -#define ctdb_readrecordlock_send(ctdb_db, key, reqp, cb, cbdata) \ - ctdb_readrecordlock_send((ctdb_db), (key), (reqp), \ - ctdb_sendcb((cb), (cbdata)), (cbdata)) +#define ctdb_readrecordlock_async(_ctdb_db, key, cb, cbdata) \ + ctdb_readrecordlock_async((_ctdb_db), (key), \ + typesafe_cb_preargs(void, (cb), (cbdata), \ + struct ctdb_db *, struct ctdb_lock *, \ + TDB_DATA), (cbdata)) #define ctdb_set_message_handler_send(ctdb, srvid, handler, cb, cbdata) \ ctdb_set_message_handler_send((ctdb), (srvid), (handler), \ |
