]> pd.if.org Git - nbds/commitdiff
add to txn test
authorjdybnis <jdybnis@9ec2166a-aeea-11dd-8830-69e4bb380a4a>
Mon, 1 Dec 2008 03:54:52 +0000 (03:54 +0000)
committerjdybnis <jdybnis@9ec2166a-aeea-11dd-8830-69e4bb380a4a>
Mon, 1 Dec 2008 03:54:52 +0000 (03:54 +0000)
include/txn.h
test/txn_test.c
txn/txn.c

index 51db400e80b520567c1c1f8fb5db07cb2f67a2f1..b2d6a1027cbd2d5a1591bc0fd6bf1c20a379be4a 100644 (file)
@@ -13,7 +13,7 @@ typedef enum { TXN_RUNNING, TXN_VALIDATING, TXN_VALIDATED, TXN_ABORTED } txn_sta
 
 typedef struct txn txn_t;
 
-txn_t *     txn_begin  (txn_access_e access, txn_isolation_e isolation, map_type_t map_type);
+txn_t *     txn_begin  (txn_access_e access, txn_isolation_e isolation, map_t *map);
 void        txn_abort  (txn_t *txn);
 txn_state_e txn_commit (txn_t *txn);
 
index e20027e4ac102536404ab9f9862f3a64449de1a1..6e9044fbbdf29c2e5eb8e227380a215414d048e8 100644 (file)
@@ -8,11 +8,17 @@
 #define ASSERT_EQUAL(x, y) CuAssertIntEquals(tc, x, y)
 
 void test1 (CuTest* tc) {
-    txn_t *tm = txn_begin(TXN_READ_WRITE, TXN_REPEATABLE_READ, MAP_TYPE_LIST);
-    tm_set(tm, "abc", 4, 2);
-    tm_set(tm, "abc", 4, 3);
-    ASSERT_EQUAL( 3, tm_get(tm, "abc", 4) );
-    ASSERT_EQUAL( TXN_VALIDATED, txn_commit(tm));
+    map_t *map = map_alloc(MAP_TYPE_LIST);
+    txn_t *t1 = txn_begin(TXN_READ_WRITE, TXN_REPEATABLE_READ, map);
+    txn_t *t2 = txn_begin(TXN_READ_WRITE, TXN_REPEATABLE_READ, map);
+    tm_set(t1, "abc", 4, 2);
+    tm_set(t1, "abc", 4, 3);
+    ASSERT_EQUAL( DOES_NOT_EXIST, tm_get(t2, "abc", 4) );
+    tm_set(t2, "abc", 4, 4);
+    ASSERT_EQUAL( 3, tm_get(t1, "abc", 4) );
+    ASSERT_EQUAL( 4, tm_get(t2, "abc", 4) );
+    ASSERT_EQUAL( TXN_VALIDATED, txn_commit(t2));
+    ASSERT_EQUAL( TXN_ABORTED, txn_commit(t1));
 }
 
 int main (void) {
index 1073f7b6a24e3ae25fe5f124e7b11496f19604a5..52758824e60dc3d9b7f2973364a12f81acccebf8 100644 (file)
--- a/txn/txn.c
+++ b/txn/txn.c
@@ -130,7 +130,7 @@ static update_rec_t *alloc_update_rec (void) {
     return u;
 }
 
-txn_t *txn_begin (txn_access_e access, txn_isolation_e isolation, map_type_t map_type) {
+txn_t *txn_begin (txn_access_e access, txn_isolation_e isolation, map_t *map) {
     txn_t *txn = (txn_t *)nbd_malloc(sizeof(txn_t));
     memset(txn, 0, sizeof(txn_t));
     txn->access = access;
@@ -138,7 +138,7 @@ txn_t *txn_begin (txn_access_e access, txn_isolation_e isolation, map_type_t map
     txn->rv = version_;
     txn->wv = UNDETERMINED_VERSION;
     txn->state = TXN_RUNNING;
-    txn->map = map_alloc(map_type);
+    txn->map = map;
     if (isolation != TXN_READ_ONLY) {
         txn->writes = nbd_malloc(sizeof(*txn->writes) * INITIAL_WRITES_SIZE);
         txn->writes_size = INITIAL_WRITES_SIZE;