Esempio n. 1
0
//delete holder and object (take)
void testRollback(void) {

    //save new test data
    int ret = put1(0, OESTORE_UNLOCKED, "txn_two");
    assert(ret == 0);

    //start a txn
    OESTORE_TXN oetxn;
    ret = OeStore_start_txn(store, 10000, &oetxn, arena);
    assert(ret == 0);

    OeStoreHolder holder;
    ret = take1(oetxn.tid, &holder, "txn_two");
    DataObject data = OeStoreHolder_get_data(holder);
    assert(!ret);
    assert(holder);
    assert(strcmp(DataObject_get_bytes( data ), "txn_nonesense") == 0);
    Iterator iter = DataObject_iterator(data, true);
    Iterator_next(iter); //0
    assert(strcmp(Iterator_next( iter ), "txn_two") == 0);

    //make sure it isn't visible anymore
    OeStoreHolder holder2;
    ret = get1(&holder2, "txn_two");
    OE_ERR(NULL, "get1: %s\n", db_strerror(ret));
    assert(ret == OE_STORE_ITEM_NOTFOUND);
    ret = take1(0, &holder2, "txn_two");
    OE_ERR(NULL, "take1: %s\n", db_strerror(ret));
    assert(ret == OE_STORE_ITEM_NOTFOUND);

    //rollback the txn
    ret = OeStore_update_txn(store, oetxn.tid, 0, OESTORE_TXN_ROLLED_BACK, arena, -1);
    OE_ERR(NULL, "updatetxn: %s\n", db_strerror(ret));
    assert(ret == 0);

    //make sure it IS visible again after rollback of take
    OeStoreHolder holder4;
    ret = get1(&holder4, "txn_two");
    DataObject data4 = OeStoreHolder_get_data(holder4);
    OE_ERR(NULL, "get1: %s\n", db_strerror(ret));
    assert(!ret);
    iter = DataObject_iterator(data4, true);
    Iterator_next(iter); //0
    assert(strcmp(Iterator_next( iter ), "txn_two") == 0);
    OeStoreHolder holder3 = NULL;
    OeStore_start_txn(store, 10000, &oetxn, arena);
    ret = take1(oetxn.tid, &holder3, "txn_two"); //and clean up for next tests...
    DataObject data3 = OeStoreHolder_get_data(holder3);
    OE_ERR(NULL, "take1: %s\n", db_strerror(ret));
    assert(!ret);
    iter = DataObject_iterator(data3, true);
    Iterator_next(iter); //0
    assert(strcmp(Iterator_next( iter ), "txn_two") == 0);

    OeStore_update_txn(store, oetxn.tid, 0, OESTORE_TXN_COMMITTED, arena, 1);
}
Esempio n. 2
0
// read/modify/write
void testCommitRMW(void) {

    //save new test data
    int ret = put1(0, OESTORE_UNLOCKED, "three");
    assert(ret == 0);

    //start a txn
    OESTORE_TXN oetxn;
    ret = OeStore_start_txn(store, 10000, &oetxn, arena);
    assert(ret == 0);

    //take the new data
    OeStoreHolder holder;
    ret = take1(oetxn.tid, &holder, "three");
    DataObject data = OeStoreHolder_get_data(holder);
    assert(!ret);
    Iterator iter = DataObject_iterator(data, true);
    assert(strcmp(Iterator_next( iter ), "key") == 0);
    assert(strcmp(Iterator_next( iter ), "three") == 0);
    assert(strcmp(DataObject_get_bytes( data ), "txn_nonesense") == 0);

    //make sure it isn't visible anymore
    OeStoreHolder holder2 = NULL;
    ret = get1( &holder2, "three");
    assert(ret == OE_STORE_ITEM_NOTFOUND);

    //put the replacement item into the space
    ret = put1(oetxn.tid, OESTORE_WRITE_LOCK, "four");
    assert(!ret);

    //commit the txn
    ret = OeStore_update_txn(store, oetxn.tid, 0,
                             OESTORE_TXN_COMMITTED, arena, 1); //wrong enlisted count
    assert(ret);
    ret = OeStore_update_txn(store, oetxn.tid, 0,
                             OESTORE_TXN_COMMITTED, arena, 2);//right enlisted count
    assert(!ret);

    //make sure four IS visible after commit
    OeStoreHolder holder3;
    OeStore_start_txn(store, 10000, &oetxn, arena);
    ret = take1(oetxn.tid, &holder3, "four"); //and clean up for next tests...
    DataObject data3 = OeStoreHolder_get_data(holder3);
    OeStore_update_txn(store, oetxn.tid, 0, OESTORE_TXN_COMMITTED, arena, -1);
    assert(!ret);
    iter = DataObject_iterator(data3, true);
    assert(strcmp(Iterator_next( iter ), "key") == 0);
    assert(strcmp(Iterator_next( iter ), "four") == 0);
    assert(strcmp(DataObject_get_bytes( data3 ), "txn_nonesense") == 0);

    //make sure three is NOT visible
    OeStoreHolder holder4;
    ret = get1(&holder4, "three");
    assert(ret == OE_STORE_ITEM_NOTFOUND);
}
Esempio n. 3
0
//look up holder
void testCommitTake(void) {

    //start a txn
    OESTORE_TXN oetxn;
    int ret = OeStore_start_txn(store, 10000, &oetxn, arena);
    assert(ret == 0);

    OeStoreHolder holder;
    ret = take1(oetxn.tid, &holder, "txn_one");
    DataObject data = OeStoreHolder_get_data(holder);
    assert(!ret);
    assert(strcmp(DataObject_get_bytes( data ), "txn_nonesense") == 0);
    Iterator iter = DataObject_iterator(data, true);
    Iterator_next(iter);//0
    assert(strcmp(Iterator_next( iter ), "txn_one") == 0);

    //make sure it isn't visible anymore
    OeStoreHolder holder2;
    ret = get1( &holder2, "txn_one");
    assert(ret == OE_STORE_ITEM_NOTFOUND);

    //commit the txn
    ret = OeStore_update_txn(store, oetxn.tid, 0, OESTORE_TXN_COMMITTED, arena, -1);
    assert(ret == 0);

    //make sure it IS STILL not visible after commit of take
    OeStoreHolder holder3;
    ret = get1( &holder3, "txn_one");
    assert(ret == OE_STORE_ITEM_NOTFOUND);
}
Esempio n. 4
0
int main(void)
{
    //Note: x%3 == 0 exactly when x evenly divisible by 3
    // and x%5 == 0 when x divisible by 5
    int n;
    n=1000;
    printf("The sum through %d is...\nTake1: %d\nTake2: %d\nTake3: %d\n",
           n, take1(n), take2(n), take3(n));
    return 0;
}