mirror of https://github.com/facebook/rocksdb.git
do not call merge when checking to see if key exists
Summary: Changes: * added check for value before merge is called on code path that should check if key exists Closes https://github.com/facebook/rocksdb/pull/2814 Reviewed By: IslamAbdelRahman Differential Revision: D5743966 Pulled By: armishra fbshipit-source-id: 6ac4283bc510c8ca50827d87ef0ba631f2b33b18
This commit is contained in:
parent
025b85b4ac
commit
3c42807794
|
@ -593,10 +593,12 @@ static bool SaveValue(void* arg, const char* entry) {
|
||||||
Slice v = GetLengthPrefixedSlice(key_ptr + key_length);
|
Slice v = GetLengthPrefixedSlice(key_ptr + key_length);
|
||||||
*(s->status) = Status::OK();
|
*(s->status) = Status::OK();
|
||||||
if (*(s->merge_in_progress)) {
|
if (*(s->merge_in_progress)) {
|
||||||
*(s->status) = MergeHelper::TimedFullMerge(
|
if (s->value != nullptr) {
|
||||||
merge_operator, s->key->user_key(), &v,
|
*(s->status) = MergeHelper::TimedFullMerge(
|
||||||
merge_context->GetOperands(), s->value, s->logger, s->statistics,
|
merge_operator, s->key->user_key(), &v,
|
||||||
s->env_, nullptr /* result_operand */, true);
|
merge_context->GetOperands(), s->value, s->logger,
|
||||||
|
s->statistics, s->env_, nullptr /* result_operand */, true);
|
||||||
|
}
|
||||||
} else if (s->value != nullptr) {
|
} else if (s->value != nullptr) {
|
||||||
s->value->assign(v.data(), v.size());
|
s->value->assign(v.data(), v.size());
|
||||||
}
|
}
|
||||||
|
@ -610,10 +612,12 @@ static bool SaveValue(void* arg, const char* entry) {
|
||||||
case kTypeSingleDeletion:
|
case kTypeSingleDeletion:
|
||||||
case kTypeRangeDeletion: {
|
case kTypeRangeDeletion: {
|
||||||
if (*(s->merge_in_progress)) {
|
if (*(s->merge_in_progress)) {
|
||||||
*(s->status) = MergeHelper::TimedFullMerge(
|
if (s->value != nullptr) {
|
||||||
merge_operator, s->key->user_key(), nullptr,
|
*(s->status) = MergeHelper::TimedFullMerge(
|
||||||
merge_context->GetOperands(), s->value, s->logger, s->statistics,
|
merge_operator, s->key->user_key(), nullptr,
|
||||||
s->env_, nullptr /* result_operand */, true);
|
merge_context->GetOperands(), s->value, s->logger,
|
||||||
|
s->statistics, s->env_, nullptr /* result_operand */, true);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
*(s->status) = Status::NotFound();
|
*(s->status) = Status::NotFound();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue