mirror of
https://github.com/MariaDB/server.git
synced 2025-02-02 03:51:50 +01:00
test_abort2 works up until a lock tree problem. I think the test and abort mechanisms are right now. I'll close #556 but file a new bug (#569). Fixes #556. Addresses #569.
git-svn-id: file:///svn/tokudb@2982 c7de825b-a66e-492c-adef-691d508d4ae1
This commit is contained in:
parent
0880a59279
commit
401eb1d0bc
5 changed files with 18 additions and 10 deletions
11
newbrt/brt.c
11
newbrt/brt.c
|
@ -353,7 +353,7 @@ static int log_and_save_brtenq(TOKULOGGER logger, BRT t, BRTNODE node, int child
|
|||
u_int32_t old_fingerprint = *fingerprint;
|
||||
u_int32_t fdiff=node->rand4fingerprint*toku_calccrc32_cmd(type, xid, key, keylen, data, datalen);
|
||||
u_int32_t new_fingerprint = old_fingerprint + fdiff;
|
||||
printf("%s:%d node=%lld fingerprint old=%08x new=%08x diff=%08x xid=%lld\n", __FILE__, __LINE__, (long long)node->thisnodename, old_fingerprint, new_fingerprint, fdiff, (long long)xid);
|
||||
//printf("%s:%d node=%lld fingerprint old=%08x new=%08x diff=%08x xid=%lld\n", __FILE__, __LINE__, (long long)node->thisnodename, old_fingerprint, new_fingerprint, fdiff, (long long)xid);
|
||||
*fingerprint = new_fingerprint;
|
||||
int r = toku_log_brtenq(logger, 0, toku_cachefile_filenum(t->cf), node->thisnodename, childnum, xid, type, keybs, databs, old_fingerprint, new_fingerprint);
|
||||
if (r!=0) return r;
|
||||
|
@ -2470,11 +2470,12 @@ struct callpair {
|
|||
static int note_removal (bytevec key, ITEMLEN keylen, bytevec data, ITEMLEN datalen, int type, TXNID xid, void*cpairv) {
|
||||
struct callpair *cpair = cpairv;
|
||||
BRTNODE node = cpair->node;
|
||||
printf("%s:%d Removed %s,%s fingerprint was %08x ", __FILE__, __LINE__, (char*)key, (char*)data, node->local_fingerprint);
|
||||
//printf("%s:%d Removed %s,%s fingerprint was %08x ", __FILE__, __LINE__, (char*)key, (char*)data, node->local_fingerprint);
|
||||
int childnum = cpair->childnum;
|
||||
u_int32_t old_fingerprint = node->local_fingerprint;
|
||||
node->local_fingerprint = old_fingerprint = node->rand4fingerprint*toku_calccrc32_cmd(type, xid, key, keylen, data, datalen);
|
||||
printf("is %08x (addr=%p)\n", node->local_fingerprint, &node->local_fingerprint);
|
||||
u_int32_t diff = node->rand4fingerprint*toku_calccrc32_cmd(type, xid, key, keylen, data, datalen);
|
||||
node->local_fingerprint = old_fingerprint - diff;
|
||||
//printf("is %08x diff=%08x (addr=%p)\n", node->local_fingerprint, diff, &node->local_fingerprint);
|
||||
u_int32_t countdiff = keylen+datalen+KEY_VALUE_OVERHEAD+BRT_CMD_OVERHEAD;
|
||||
BNC_NBYTESINBUF(node,childnum) -= countdiff;
|
||||
node->u.n.n_bytes_in_buffers -= countdiff;
|
||||
|
@ -2488,7 +2489,7 @@ int toku_brt_nonleaf_expunge_xaction(BRT brt, DISKOFF diskoff, TXNID xid) {
|
|||
if (r!=0) return r;
|
||||
BRTNODE node = node_v;
|
||||
verify_local_fingerprint_nonleaf(node);
|
||||
printf("%s:%d node->local_fingerprint=%08x\n", __FILE__, __LINE__, node->local_fingerprint);
|
||||
//printf("%s:%d node->local_fingerprint=%08x\n", __FILE__, __LINE__, node->local_fingerprint);
|
||||
int i;
|
||||
r=0;
|
||||
for (i=0; i<node->u.n.n_children; i++) {
|
||||
|
|
|
@ -701,7 +701,7 @@ int toku_logger_abort(TOKUTXN txn) {
|
|||
// Must undo everything. Must undo it all in reverse order.
|
||||
// Build the reverse list
|
||||
struct roll_entry *item;
|
||||
printf("%s:%d abort\n", __FILE__, __LINE__);
|
||||
//printf("%s:%d abort\n", __FILE__, __LINE__);
|
||||
while ((item=txn->newest_logentry)) {
|
||||
txn->newest_logentry = item->prev;
|
||||
int r;
|
||||
|
|
|
@ -70,9 +70,9 @@ int toku_rollback_xactiontouchednonleaf(FILENUM filenum, DISKOFFARRAY array __at
|
|||
assert(r==0);
|
||||
r = toku_brt_nonleaf_expunge_xaction(brt, diskoff, txn->txnid64);
|
||||
assert(r==0);
|
||||
printf("%s:%d node=%lld has Rollback parents = {", __FILE__, __LINE__, (long long)diskoff);
|
||||
int i; for (i=0; i<array.len; i++) printf(" %lld", array.array[i]);
|
||||
printf("}\n");
|
||||
//printf("%s:%d node=%lld has Rollback parents = {", __FILE__, __LINE__, (long long)diskoff);
|
||||
//int i; for (i=0; i<array.len; i++) printf(" %lld", array.array[i]);
|
||||
//printf("}\n");
|
||||
if (array.len!=0) printf("%s:%d array.len!=0 and we didn't fix up the fingerprints.\n", __FILE__, __LINE__);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ void do_test_abort2 (void) {
|
|||
|
||||
printf("%s:%d\n", __FILE__, __LINE__);
|
||||
|
||||
// Now do a few inserts.
|
||||
// Now do a few inserts that abort.
|
||||
r=db_env_create(&env, 0); assert(r==0);
|
||||
env->set_errfile(env, stderr);
|
||||
r=env->open(env, ENVDIR, DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_MPOOL|DB_INIT_TXN|DB_CREATE|DB_PRIVATE, 0777); CKERR(r);
|
||||
|
@ -77,9 +77,15 @@ void do_test_abort2 (void) {
|
|||
insert(7, 1);
|
||||
r=txn->abort(txn); CKERR(r);
|
||||
|
||||
|
||||
printf("%s:%d\n", __FILE__, __LINE__);
|
||||
//r=db->close(db,0); CKERR(r); r=env->close(env, 0); CKERR(r); return;
|
||||
|
||||
// Don't do a lookup on "hello7", because that will force things out of the buffer.
|
||||
r=db->close(db, 0); CKERR(r);
|
||||
printf("%s:%d\n", __FILE__, __LINE__);
|
||||
r=db->open(db, txn, "foo.db", 0, DB_BTREE, 0, 0777); CKERR(r);
|
||||
printf("%s:%d\n", __FILE__, __LINE__);
|
||||
|
||||
r=env->txn_begin(env, 0, &txn, 0); assert(r==0);
|
||||
{
|
||||
|
|
|
@ -2056,6 +2056,7 @@ static int toku_db_open(DB * db, DB_TXN * txn, const char *fname, const char *db
|
|||
toku_malloc, toku_free, toku_realloc);
|
||||
if (r!=0) goto error_cleanup;
|
||||
r = toku_lt_set_txn_add_lt_callback(db->i->lt, toku_txn_add_lt);
|
||||
if (r!=0) fprintf(stderr, "%s:%d r=%d (%s)\n", __FILE__, __LINE__, r, strerror(r));
|
||||
assert(r==0);
|
||||
r = toku_lt_set_txn_remove_lt_callback(db->i->lt, toku_txn_remove_lt);
|
||||
assert(r==0);
|
||||
|
|
Loading…
Add table
Reference in a new issue