From 342370f1d38c5f7cdb0248f8054a016e6dfadd49 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Sat, 17 Dec 2016 00:05:05 -0800 Subject: [PATCH] Simplify MemTable::Update Summary: As suggested by testn in #1650 The Add is at the end of the function. Having a fallthough will result in it being added twice. Closes https://github.com/facebook/rocksdb/pull/1676 Differential Revision: D4331906 Pulled By: yiwu-arbug fbshipit-source-id: 895c4a0 --- db/memtable.cc | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/db/memtable.cc b/db/memtable.cc index 93c97bb9b..23cb3398e 100644 --- a/db/memtable.cc +++ b/db/memtable.cc @@ -717,30 +717,22 @@ void MemTable::Update(SequenceNumber seq, ValueType type; SequenceNumber unused; UnPackSequenceAndType(tag, &unused, &type); - switch (type) { - case kTypeValue: { - Slice prev_value = GetLengthPrefixedSlice(key_ptr + key_length); - uint32_t prev_size = static_cast(prev_value.size()); - uint32_t new_size = static_cast(value.size()); - - // Update value, if new value size <= previous value size - if (new_size <= prev_size ) { - char* p = EncodeVarint32(const_cast(key_ptr) + key_length, - new_size); - WriteLock wl(GetLock(lkey.user_key())); - memcpy(p, value.data(), value.size()); - assert((unsigned)((p + value.size()) - entry) == - (unsigned)(VarintLength(key_length) + key_length + - VarintLength(value.size()) + value.size())); - return; - } + if (type == kTypeValue) { + Slice prev_value = GetLengthPrefixedSlice(key_ptr + key_length); + uint32_t prev_size = static_cast(prev_value.size()); + uint32_t new_size = static_cast(value.size()); + + // Update value, if new value size <= previous value size + if (new_size <= prev_size ) { + char* p = EncodeVarint32(const_cast(key_ptr) + key_length, + new_size); + WriteLock wl(GetLock(lkey.user_key())); + memcpy(p, value.data(), value.size()); + assert((unsigned)((p + value.size()) - entry) == + (unsigned)(VarintLength(key_length) + key_length + + VarintLength(value.size()) + value.size())); + return; } - // fallthrough - default: - // If the latest value is kTypeDeletion, kTypeMerge or kTypeLogData - // we don't have enough space for update inplace - Add(seq, kTypeValue, key, value); - return; } } }