Fix the bug in MergeUtil which causes mixing values of different keys.
Summary: Fix the bug in MergeUtil which causes mixing values of different keys. Test Plan: stringappend_test make all check Reviewers: haobo, igor Reviewed By: igor CC: leveldb Differential Revision: https://reviews.facebook.net/D17235
This commit is contained in:
parent
a92194e5b2
commit
10cebec79e
@ -40,12 +40,12 @@ void MergeHelper::MergeUntil(Iterator* iter, SequenceNumber stop_before,
|
|||||||
ParseInternalKey(keys_.back(), &orig_ikey);
|
ParseInternalKey(keys_.back(), &orig_ikey);
|
||||||
|
|
||||||
bool hit_the_next_user_key = false;
|
bool hit_the_next_user_key = false;
|
||||||
ParsedInternalKey ikey;
|
|
||||||
std::string merge_result; // Temporary value for merge results
|
std::string merge_result; // Temporary value for merge results
|
||||||
if (steps) {
|
if (steps) {
|
||||||
++(*steps);
|
++(*steps);
|
||||||
}
|
}
|
||||||
for (iter->Next(); iter->Valid(); iter->Next()) {
|
for (iter->Next(); iter->Valid(); iter->Next()) {
|
||||||
|
ParsedInternalKey ikey;
|
||||||
assert(operands_.size() >= 1); // Should be invariants!
|
assert(operands_.size() >= 1); // Should be invariants!
|
||||||
assert(keys_.size() == operands_.size());
|
assert(keys_.size() == operands_.size());
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ void MergeHelper::MergeUntil(Iterator* iter, SequenceNumber stop_before,
|
|||||||
if (operands_.size() >= 2 &&
|
if (operands_.size() >= 2 &&
|
||||||
operands_.size() >= min_partial_merge_operands_ &&
|
operands_.size() >= min_partial_merge_operands_ &&
|
||||||
user_merge_operator_->PartialMergeMulti(
|
user_merge_operator_->PartialMergeMulti(
|
||||||
ikey.user_key,
|
orig_ikey.user_key,
|
||||||
std::deque<Slice>(operands_.begin(), operands_.end()),
|
std::deque<Slice>(operands_.begin(), operands_.end()),
|
||||||
&merge_result, logger_)) {
|
&merge_result, logger_)) {
|
||||||
// Merging of operands (associative merge) was successful.
|
// Merging of operands (associative merge) was successful.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user