From de706bd5d8de76458e1d2d62a58276cc54c888c4 Mon Sep 17 00:00:00 2001 From: Zardosht Kasheff Date: Wed, 17 Apr 2013 00:00:54 -0400 Subject: [PATCH] closes #5146, fix test and fix bug git-svn-id: file:///svn/toku/tokudb@44973 c7de825b-a66e-492c-adef-691d508d4ae1 --- ft/recover.c | 22 ++++++++++++++++++---- src/tests/recover-5146.c | 9 +++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/ft/recover.c b/ft/recover.c index bd7cabadf24..eb2147e866d 100644 --- a/ft/recover.c +++ b/ft/recover.c @@ -612,10 +612,24 @@ static int toku_recover_xstillopenprepared (struct logtype_xstillopenprepared *l l->crc, l->len, renv); - if (r==0) - return toku_txn_prepare_txn(txn, l->xa_xid); - else - return r; + if (r != 0) { + goto exit; + } + switch (renv->ss.ss) { + case FORWARD_BETWEEN_CHECKPOINT_BEGIN_END: { + r = toku_txn_prepare_txn(txn, l->xa_xid); + break; + } + case FORWARD_NEWER_CHECKPOINT_END: { + assert(txn->state == TOKUTXN_PREPARING); + break; + } + default: { + assert(0); + } + } +exit: + return r; } static int toku_recover_backward_xstillopen (struct logtype_xstillopen *UU(l), RECOVER_ENV UU(renv)) { diff --git a/src/tests/recover-5146.c b/src/tests/recover-5146.c index e45bbd77696..10c707d1f86 100644 --- a/src/tests/recover-5146.c +++ b/src/tests/recover-5146.c @@ -86,6 +86,15 @@ static void run_recover (void) { int r; r = db_env_create(&env, 0); CKERR(r); r = env->open(env, ENVDIR, envflags + DB_RECOVER, S_IRWXU+S_IRWXG+S_IRWXO); CKERR(r); + // recover the prepared transaction and commit it + DB_PREPLIST l[1]; + long count=-1; + CKERR(env->txn_recover(env, l, 1, &count, DB_FIRST)); + printf("%s:%d count=%ld\n", __FILE__, __LINE__, count); + assert(count==1); + assert(l[0].gid[0]==42); + r = l->txn->commit(l->txn, 0); + CKERR(r); r = env->close(env, 0); CKERR(r); exit(0);