Commit c29ccbff authored by Zardosht Kasheff's avatar Zardosht Kasheff Committed by Yoni Fogel

[t:4923], use brtnode_put_cmd in push_something_at_root. In Maxwell we changed...

[t:4923], use brtnode_put_cmd in push_something_at_root. In Maxwell we changed it because we applied messages to in-memory leaves. Now, we have indexed buffers, so we can consolidate some code. I am not too happy with how max_msn_applied_on_disk is handled, but I will deal with that in another checkin

git-svn-id: file:///svn/toku/tokudb@37957 c7de825b-a66e-492c-adef-691d508d4ae1
parent c0c53722
...@@ -2066,9 +2066,6 @@ brtnode_put_cmd ( ...@@ -2066,9 +2066,6 @@ brtnode_put_cmd (
{ {
toku_assert_entire_node_in_memory(node); toku_assert_entire_node_in_memory(node);
if (node->height==0) { if (node->height==0) {
// we need to make sure that after doing all the put_cmd operations
// that the tree above is completely flushed out,
// otherwise may have an inconsistency (part of the data is there, and part isn't)
bool made_change = false; bool made_change = false;
uint64_t workdone = 0; uint64_t workdone = 0;
toku_apply_cmd_to_leaf( toku_apply_cmd_to_leaf(
...@@ -2184,46 +2181,38 @@ static void push_something_at_root (BRT brt, BRTNODE *nodep, BRT_MSG cmd) ...@@ -2184,46 +2181,38 @@ static void push_something_at_root (BRT brt, BRTNODE *nodep, BRT_MSG cmd)
{ {
BRTNODE node = *nodep; BRTNODE node = *nodep;
toku_assert_entire_node_in_memory(node); toku_assert_entire_node_in_memory(node);
if (node->height==0) {
// Must special case height 0, since brtnode_put_cmd() doesn't modify leaves.
// Part of the problem is: if the node is in memory, then it was updated as part of the in-memory operation.
// If the root node is not in memory, then we must apply it.
bool made_dirty = 0;
uint64_t workdone_ignore = 0; // ignore workdone for root-leaf node
// not up to date, which means the get_and_pin actually fetched it
// into memory.
TOKULOGGER logger = toku_cachefile_logger(brt->cf); TOKULOGGER logger = toku_cachefile_logger(brt->cf);
OMT snapshot_txnids = logger ? logger->snapshot_txnids : NULL; OMT snapshot_txnids = logger ? logger->snapshot_txnids : NULL;
OMT live_list_reverse = logger ? logger->live_list_reverse : NULL; OMT live_list_reverse = logger ? logger->live_list_reverse : NULL;
// passing down snapshot_txnids and live_list_reverse directly brtnode_put_cmd(
// since we're holding the ydb lock. TODO: verify this is correct
toku_apply_cmd_to_leaf(
brt->compare_fun, brt->compare_fun,
brt->update_fun, brt->update_fun,
&brt->h->descriptor, &brt->h->descriptor,
node, node,
cmd, cmd,
&made_dirty, true,
&workdone_ignore,
snapshot_txnids, snapshot_txnids,
live_list_reverse live_list_reverse
); );
if (node->height == 0) {
MSN cmd_msn = cmd->msn; MSN cmd_msn = cmd->msn;
invariant(cmd_msn.msn > node->max_msn_applied_to_node_on_disk.msn); invariant(cmd_msn.msn > node->max_msn_applied_to_node_on_disk.msn);
// max_msn_applied_to_node_on_disk is normally set only when leaf is serialized, // max_msn_applied_to_node_on_disk is normally set only when leaf is serialized,
// but needs to be done here (for root leaf) so msn can be set in new commands. // but needs to be done here (for root leaf) so msn can be set in new commands.
node->max_msn_applied_to_node_on_disk = cmd_msn; node->max_msn_applied_to_node_on_disk = cmd_msn;
toku_mark_node_dirty(node); toku_mark_node_dirty(node);
} else { }
else {
uint64_t msgsize = brt_msg_size(cmd); uint64_t msgsize = brt_msg_size(cmd);
brt_status.msg_bytes_in += msgsize; brt_status.msg_bytes_in += msgsize;
brt_status.msg_bytes_curr += msgsize; brt_status.msg_bytes_curr += msgsize;
if (brt_status.msg_bytes_curr > brt_status.msg_bytes_max) if (brt_status.msg_bytes_curr > brt_status.msg_bytes_max) {
brt_status.msg_bytes_max = brt_status.msg_bytes_curr; brt_status.msg_bytes_max = brt_status.msg_bytes_curr;
}
brt_status.msg_num++; brt_status.msg_num++;
if (brt_msg_applies_all(cmd)) if (brt_msg_applies_all(cmd)) {
brt_status.msg_num_broadcast++; brt_status.msg_num_broadcast++;
brt_nonleaf_put_cmd(brt->compare_fun, &brt->h->descriptor, node, cmd, true); }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment