finalize fetch lock changes to get rid of the record handle
authorRonnie sahlberg <ronniesahlberg@gmail.com>
Tue, 17 Apr 2007 02:36:31 +0000 (12:36 +1000)
committerRonnie sahlberg <ronniesahlberg@gmail.com>
Tue, 17 Apr 2007 02:36:31 +0000 (12:36 +1000)
common/ctdb_call.c
include/ctdb.h
include/ctdb_private.h
tests/ctdb_fetch1.c

index 440410335036bb715475101375d4f7e2225e6581..98bb780222c5143a8eacdee7d5530b3498afbcb6 100644 (file)
@@ -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;
 }
 
 
index 8791abe2c166313f5b1e47b43ccda7e7a6ce0f91..d6dcdd3c4f8ea861bfa2c420887bb178277672be 100644 (file)
@@ -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
index e6b9c89b24826f6446c34be59879ba51972af34e..a11ebf5ad4c09f8346e42a1159f3b385b1f245d1 100644 (file)
@@ -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
 */
index e81606930d0fc73024b2787d2749078a0c903d8a..afae8c53cf12818b472036e594227b712f313c54 100644 (file)
@@ -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);