//suite int main(void) { arena = Arena_new(); store = OeBdb_new(1, "data", true); assert(store); testTxnCommitPut(); testBogusTxnPut(); testCommitTake(); testCommitRMW(); testRollback(); for (int i = 0; i < 100; i++) { testCommitRMW(); } testDetectDeadlock(); OeStore_stats(store); int close_ret = OeStore_free(&store); assert(close_ret == 0); //test_update_of_expired_txn(); //test_commit_of_expired_txn(); Arena_free(arena); Arena_dispose(&arena); return 0; }
void testPutOne(void *n) { char *name = (char *) n; Arena_T arena = Arena_new(); printf("putting name: %s\n", (char *) name); OeStoreHolder holder = OeStoreHolder_new(arena); DataObject data = OeStoreHolder_get_data(holder); OeStoreHolder_set_txn_id( holder, 0 ); //unlocked OeStoreHolder_set_lease_expire_time( holder, oec_get_time_milliseconds() + 600000); OeStoreHolder_set_lock( holder, OESTORE_UNLOCKED ); DataObject_set_nbytes( data, strlen(bytes) + 1 ); DataObject_set_bytes( data, bytes ); DataObject_add_attr( data, "key1" ); DataObject_add_attr( data, (char *) name ); DataObject_add_attr( data, "key2" ); DataObject_add_attr( data, "seeme2three" ); DataObject_add_attr( data, morenonse); DataObject_add_attr( data, "somebadvalue" ); int ret; while ( (ret = OeStore_put( store, holder, arena)) ) { if (ret == OE_STORE_PLEASE_RETRY) { if (ret == OE_STORE_PLEASE_RETRY) { printf("put one retry for deadlock\n"); continue; } } } assert(!ret); printf("put name: %s\n", (char *) name); Arena_dispose(&arena); }
int main() { arena = Arena_new(); start_socket_server(); start_socket_client(); test_unconnected_put(); //fatal, reconnect start_socket_client(); test_con(); test_con_2(); //fatal, reconnect start_socket_client(); test_con(); test_put(); test_read(); test_take(); test_upt(); //fatal, reconnect start_socket_client(); test_con(); test_upl(); stop_socket_server(); return 0; }
//arena per thread - //the arena gets cleared between tasks. if your // task is not short lived, consider calling free once in a while Arena_T Oed_get_arena(void) { init_arena_once(); Arena_T arena = ThreadData_get(arena_td); if (!arena) { arena = Arena_new(); ThreadData_set(arena_td, arena); } return arena; }
OEK_Context *(OEK_Context_new)(void) { Arena_T arena = Arena_new(); OEK_Context *context; context = Arena_calloc(arena, 1, sizeof *context, __FILE__, __LINE__); context->arena = arena; return context; }
void testTakeOne(void *dummy) { Arena_T arena = Arena_new(); const int MAX_RESULTS = 1; DataObjectList keylists = DataObjectList_new(arena); DataObject keys = DataObjectList_new_data_object(keylists); DataObject_add_attr(keys, "key2"); DataObject_add_attr(keys, "seeme2three"); OeStoreHolder results[MAX_RESULTS + 1]; memset(results, 0, sizeof *results); size_t result_count = 0; OeStoreQuery query = OeStoreQuery_new(arena, MAX_RESULTS); OeStoreQuery_set_take(query, true); OeStoreQuery_set_tuple(query, false); OeStoreQuery_set_ifexists(query, false); OeStoreQuery_set_value_lists(query, keylists); int ret; while ( ( ret = OeStore_get(store, query) ) ) { if (ret == OE_STORE_PLEASE_RETRY) { printf("take one retry for deadlock\n"); OeStoreQuery_reset_nitems_found(query); continue; } if (ret == OE_STORE_ITEM_NOTFOUND) continue; result_count = OeStoreQuery_get_nitems_found(query); if (result_count == 0) continue; } assert(!ret); assert(result_count = 1); OeStoreHolder result = OeStoreQuery_get_store_holder(query, 0); DataObject data = OeStoreHolder_get_data(result); Iterator iter = DataObject_iterator(data, true); //Iterator iter = DataObject_iterator(data, false); printf("take result key1: %s\n", (char *) Iterator_next(iter)); //0 printf("take result val1: %s\n", (char *) Iterator_next(iter)); //1 printf("take result key2: %s\n", (char *) Iterator_next(iter)); //0 assert(strcmp(Iterator_next(iter), "seeme2three") == 0); assert(strcmp(DataObject_get_bytes(data), "nonesense") == 0); assert(OeStoreHolder_get_lock(result) == OESTORE_TAKE_LOCK); Arena_dispose(&arena); }
static unsigned test_arena_resize() { Arena_T arena = Arena_new(); char * aChar; Mem_set_arena(arena); aChar = ALLOC(sizeof(char)); *aChar = 'a'; test_assert(*aChar == 'a'); REALLOC(aChar, 100); strcpy(aChar + 1, "bcdefghilmnopqrstuvz"); test_assert_str(aChar, "abcdefghilmnopqrstuvz"); REALLOC(aChar, 10); aChar[9] = '\0'; test_assert_str(aChar, "abcdefghi"); REALLOC(aChar, 100000); test_assert_str(aChar, "abcdefghi"); REALLOC(aChar, 1); aChar[1] = '\0'; test_assert_str(aChar, "a"); REALLOC(aChar, 100); strcpy(aChar, "abcd"); REALLOC(aChar, 2); aChar[2] = '\0'; test_assert_str(aChar, "ab"); Mem_set_default(); Arena_dispose(&arena); Arena_remove_free_blocks(); return TEST_SUCCESS; }
T OepClient_new(Oed_Dispatcher dispatcher, OeNet net, oe_scalar username, oe_scalar pwd, char *spec) { assert(dispatcher); Arena_T arena = Arena_new(); T _this_; _this_ = Arena_calloc(arena, 1, sizeof *_this_, __FILE__, __LINE__); _this_->arena = arena; _this_->dispatcher = dispatcher; _this_->pending = Table_new(100, cidcmp, cidhash); _this_->spec = spec; Subject s = Subject_new(arena); _this_->subject = s; Subject_set_username(s, username); Subject_set_pwd(s, pwd); OeNet_set_read_handler(net, _buffered_on_read); _this_->net = net; OeNet_set_proto(net, _this_); assert(_this_->net); return _this_; }