summaryrefslogtreecommitdiffstats
path: root/ctdb
diff options
context:
space:
mode:
authorRonnie sahlberg <ronniesahlberg@gmail.com>2007-04-17 12:36:31 +1000
committerRonnie sahlberg <ronniesahlberg@gmail.com>2007-04-17 12:36:31 +1000
commit11b5345afc6adeb5523fa989f7e783fd5febc2c8 (patch)
tree1c1eec12411a4040c5d21e8da598076d51437ef9 /ctdb
parente5fff3d611c45452d88013dab112348261c92078 (diff)
downloadsamba-11b5345afc6adeb5523fa989f7e783fd5febc2c8.tar.gz
samba-11b5345afc6adeb5523fa989f7e783fd5febc2c8.tar.xz
samba-11b5345afc6adeb5523fa989f7e783fd5febc2c8.zip
finalize fetch lock changes to get rid of the record handle
(This used to be ctdb commit 36c1e98a5533214d5507699dc5d8bdec35cb28c2)
Diffstat (limited to 'ctdb')
-rw-r--r--ctdb/common/ctdb_call.c6
-rw-r--r--ctdb/include/ctdb.h2
-rw-r--r--ctdb/include/ctdb_private.h14
-rw-r--r--ctdb/tests/ctdb_fetch1.c34
4 files changed, 39 insertions, 17 deletions
diff --git a/ctdb/common/ctdb_call.c b/ctdb/common/ctdb_call.c
index 44041033503..98bb780222c 100644
--- a/ctdb/common/ctdb_call.c
+++ b/ctdb/common/ctdb_call.c
@@ -744,7 +744,7 @@ int ctdb_call(struct ctdb_db_context *ctdb_db, struct ctdb_call *call)
-struct ctdb_record_handle *ctdb_fetch_lock(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx,
+int ctdb_fetch_lock(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx,
TDB_DATA key, TDB_DATA *data)
{
struct ctdb_call call;
@@ -775,10 +775,10 @@ struct ctdb_record_handle *ctdb_fetch_lock(struct ctdb_db_context *ctdb_db, TALL
ret = ctdb_call_recv(state, &call);
if (ret != 0) {
talloc_free(rec);
- return NULL;
+ return -6;
}
- return rec;
+ return 0;
}
diff --git a/ctdb/include/ctdb.h b/ctdb/include/ctdb.h
index 8791abe2c16..d6dcdd3c4f8 100644
--- a/ctdb/include/ctdb.h
+++ b/ctdb/include/ctdb.h
@@ -177,7 +177,7 @@ int ctdb_send_message(struct ctdb_context *ctdb, uint32_t vnn,
dmaster for the record to be moved to the local node.
*/
-struct ctdb_record_handle *ctdb_fetch_lock(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx, TDB_DATA key, TDB_DATA *data);
+int ctdb_fetch_lock(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx, TDB_DATA key, TDB_DATA *data);
/*
do a fetch lock from a client to the local daemon
diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h
index e6b9c89b248..a11ebf5ad4c 100644
--- a/ctdb/include/ctdb_private.h
+++ b/ctdb/include/ctdb_private.h
@@ -68,12 +68,6 @@ struct ctdb_node {
uint32_t vnn;
};
-struct ctdb_record_handle {
- struct ctdb_db_context *ctdb_db;
- TDB_DATA key;
- TDB_DATA *data;
-};
-
/*
transport specific methods
*/
@@ -200,6 +194,14 @@ struct ctdb_call_state {
};
+/* used for fetch_lock */
+struct ctdb_record_handle {
+ struct ctdb_db_context *ctdb_db;
+ TDB_DATA key;
+ TDB_DATA *data;
+};
+
+
/*
operation IDs
*/
diff --git a/ctdb/tests/ctdb_fetch1.c b/ctdb/tests/ctdb_fetch1.c
index e81606930d0..afae8c53cf1 100644
--- a/ctdb/tests/ctdb_fetch1.c
+++ b/ctdb/tests/ctdb_fetch1.c
@@ -45,7 +45,6 @@ static void child_handler(struct ctdb_context *ctdb, uint32_t srvid,
void test1(struct ctdb_db_context *ctdb_db)
{
- struct ctdb_record_handle *rh;
TDB_DATA key, data, data2, store_data;
int ret;
@@ -55,13 +54,26 @@ void test1(struct ctdb_db_context *ctdb_db)
printf("Test1: write and verify we can read it back: ");
key.dptr = discard_const("Record");
key.dsize = strlen((const char *)key.dptr)+1;
- rh = ctdb_fetch_lock(ctdb_db, ctdb_db, key, &data);
+ ret = ctdb_client_fetch_lock(ctdb_db, ctdb_db, key, &data);
+ if (ret!=0) {
+ printf("test1: ctdb_client_fetch_lock() failed\n");
+ exit(1);
+ }
store_data.dptr = discard_const("data to store");
store_data.dsize = strlen((const char *)store_data.dptr)+1;
- ret = ctdb_client_store_unlock(rh, store_data);
+ ret = ctdb_client_store_unlock(ctdb_db, key, store_data);
+ if (ret!=0) {
+ printf("test1: ctdb_client_store_unlock() failed\n");
+ exit(1);
+ }
+
+ ret = ctdb_client_fetch_lock(ctdb_db, ctdb_db, key, &data2);
+ if (ret!=0) {
+ printf("test1: ctdb_client_fetch_lock() failed\n");
+ exit(1);
+ }
- rh = ctdb_fetch_lock(ctdb_db, ctdb_db, key, &data2);
/* hopefully data2 will now contain the record written above */
if (!strcmp("data to store", (const char *)data2.dptr)) {
printf("SUCCESS\n");
@@ -71,14 +83,18 @@ void test1(struct ctdb_db_context *ctdb_db)
}
/* just write it back to unlock it */
- ret = ctdb_client_store_unlock(rh, store_data);
+ ret = ctdb_client_store_unlock(ctdb_db, key, store_data);
+ if (ret!=0) {
+ printf("test1: ctdb_client_store_unlock() failed\n");
+ exit(1);
+ }
}
void child(int srvid, struct event_context *ev, struct ctdb_context *ctdb, struct ctdb_db_context *ctdb_db)
{
TDB_DATA data;
- struct ctdb_record_handle *rh;
TDB_DATA key, data2;
+ int ret;
data.dptr=discard_const("dummy message");
data.dsize=strlen((const char *)data.dptr)+1;
@@ -94,7 +110,11 @@ void child(int srvid, struct event_context *ev, struct ctdb_context *ctdb, struc
/* fetch and lock the record */
key.dptr = discard_const("Record");
key.dsize = strlen((const char *)key.dptr)+1;
- rh = ctdb_fetch_lock(ctdb_db, ctdb_db, key, &data2);
+ ret = ctdb_client_fetch_lock(ctdb_db, ctdb_db, key, &data2);
+ if (ret!=0) {
+ printf("client: ctdb_client_fetch_lock() failed\n");
+ exit(1);
+ }
ctdb_send_message(ctdb, ctdb_get_vnn(ctdb), PARENT_SRVID, data);