From 922a7f4768a36aeac498e41847b2ed44ac0e715a Mon Sep 17 00:00:00 2001 From: Rich Prohaska Date: Tue, 16 Apr 2013 23:59:57 -0400 Subject: [PATCH] #4146 verify that fifo messages are sorted by msn closes[t:4146] git-svn-id: file:///svn/toku/tokudb@37171 c7de825b-a66e-492c-adef-691d508d4ae1 --- newbrt/brt-verify.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/newbrt/brt-verify.c b/newbrt/brt-verify.c index 146c494ff22..c479f7dc54d 100644 --- a/newbrt/brt-verify.c +++ b/newbrt/brt-verify.c @@ -208,7 +208,7 @@ toku_verify_brtnode (BRT brt, int result=0; BRTNODE node; void *node_v; - MSN thismsn; + MSN this_msn; u_int32_t fullhash = toku_cachetable_hash(brt->cf, blocknum); { @@ -235,11 +235,11 @@ toku_verify_brtnode (BRT brt, //printf("%s:%d pin %p\n", __FILE__, __LINE__, node_v); node = node_v; toku_assert_entire_node_in_memory(node); - thismsn = node->max_msn_applied_to_node_on_disk; + this_msn = node->max_msn_applied_to_node_on_disk; if (rootmsn.msn == ZERO_MSN.msn) { assert(parentmsn.msn == ZERO_MSN.msn); - rootmsn = thismsn; - parentmsn = thismsn; + rootmsn = this_msn; + parentmsn = this_msn; } invariant(node->fullhash == fullhash); // this is a bad failure if wrong @@ -247,7 +247,7 @@ toku_verify_brtnode (BRT brt, invariant(height == node->height); // this is a bad failure if wrong } if (node->height > 0) { - VERIFY_ASSERTION((parentmsn.msn >= thismsn.msn), 0, "node msn must be descending down tree, newest messages at top"); + VERIFY_ASSERTION((parentmsn.msn >= this_msn.msn), 0, "node msn must be descending down tree, newest messages at top"); } // Verify that all the pivot keys are in order. for (int i = 0; i < node->n_children-2; i++) { @@ -270,7 +270,7 @@ toku_verify_brtnode (BRT brt, struct kv_pair *curr_less_pivot = (i==0) ? lesser_pivot : node->childkeys[i-1]; struct kv_pair *curr_geq_pivot = (i==node->n_children-1) ? greatereq_pivot : node->childkeys[i]; if (node->height > 0) { - MSN lastmsn = ZERO_MSN; + MSN last_msn = ZERO_MSN; // Verify that messages in the buffers are in the right place. NONLEAF_CHILDINFO bnc = BNC(node, i); VERIFY_ASSERTION(verify_sorted_by_key_msn(brt, bnc->buffer, bnc->fresh_message_tree) == 0, i, "fresh_message_tree"); @@ -282,8 +282,8 @@ toku_verify_brtnode (BRT brt, curr_less_pivot, curr_geq_pivot); VERIFY_ASSERTION(r==0, i, "A message in the buffer is out of place"); - VERIFY_ASSERTION((msn.msn > lastmsn.msn), i, "msn per msg must be monotonically increasing toward newer messages in buffer"); - VERIFY_ASSERTION((msn.msn <= thismsn.msn), i, "all messages must have msn within limit of this node's max_msn_applied_to_node_in_memory"); + VERIFY_ASSERTION((msn.msn > last_msn.msn), i, "msn per msg must be monotonically increasing toward newer messages in buffer"); + VERIFY_ASSERTION((msn.msn <= this_msn.msn), i, "all messages must have msn within limit of this node's max_msn_applied_to_node_in_memory"); int count; count = count_eq_key_msn(brt, bnc->buffer, bnc->fresh_message_tree, key, keylen, msn); if (brt_msg_type_applies_all(type) || brt_msg_type_does_nothing(type)) { @@ -323,6 +323,7 @@ toku_verify_brtnode (BRT brt, VERIFY_ASSERTION(extra.count == 0, i, "a broadcast message was found in the fresh message tree"); } } + last_msn = msn; })); struct verify_message_tree_extra extra = { .fifo = bnc->buffer, .broadcast = false, .is_fresh = true, .i = i, .verbose = verbose, .blocknum = blocknum, .keep_going_on_failure = keep_going_on_failure }; int r = toku_omt_iterate(bnc->fresh_message_tree, verify_message_tree, &extra); @@ -337,7 +338,7 @@ toku_verify_brtnode (BRT brt, else { BASEMENTNODE bn = BLB(node, i); for (u_int32_t j = 0; j < toku_omt_size(bn->buffer); j++) { - VERIFY_ASSERTION((rootmsn.msn >= thismsn.msn), 0, "leaf may have latest msn, but cannot be greater than root msn"); + VERIFY_ASSERTION((rootmsn.msn >= this_msn.msn), 0, "leaf may have latest msn, but cannot be greater than root msn"); LEAFENTRY le = get_ith_leafentry(bn, j); if (curr_less_pivot) { int compare = compare_pair_to_leafentry(brt, curr_less_pivot, le); @@ -359,7 +360,7 @@ toku_verify_brtnode (BRT brt, // Verify that the subtrees have the right properties. if (recurse && node->height > 0) { for (int i = 0; i < node->n_children; i++) { - int r = toku_verify_brtnode(brt, rootmsn, thismsn, + int r = toku_verify_brtnode(brt, rootmsn, this_msn, BP_BLOCKNUM(node, i), node->height-1, (i==0) ? lesser_pivot : node->childkeys[i-1], (i==node->n_children-1) ? greatereq_pivot : node->childkeys[i],