rocksdb/memtable
sdong 4e00748098 Fix a bug in hash linked list (#10401)
Summary:
In hash linked list, with a bucket of only one record, following sequence can cause users to temporarily miss a record:

Thread 1: Fetch the structure bucket x points too, which would be a Node n1 for a key, with next pointer to be null
Thread 2: Insert a key to bucket x that is larger than the existing key. This will make n1->next points to a new node n2, and update bucket x to point to n1.
Thread 1: see n1->next is not null, so it thinks it is a header of linked list and ignore the key of n1.

Fix it by refetch structure that bucket x points to when it sees n1->next is not null. This should work because if n1->next is not null, bucket x should already point to a linked list or skip list header.

A related change is to revert th order of testing for linked list and skip list. This is because after refetching the bucket, it might end up with a skip list, rather than linked list.

Pull Request resolved: https://github.com/facebook/rocksdb/pull/10401

Test Plan: Run existing tests and make sure at least it doesn't regress.

Reviewed By: jay-zhuang

Differential Revision: D38064471

fbshipit-source-id: 142bb85e1546c803f47e3357aef3e76debccd8df
2022-07-25 11:33:28 -07:00
..
alloc_tracker.cc Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
hash_linklist_rep.cc Fix a bug in hash linked list (#10401) 2022-07-25 11:33:28 -07:00
hash_skiplist_rep.cc Make MemTableRepFactory into a Customizable class (#8419) 2021-09-08 07:46:44 -07:00
inlineskiplist.h Memtable sampling for mempurge heuristic. (#8628) 2021-08-10 18:09:03 -07:00
inlineskiplist_test.cc Replace most typedef with using= (#8751) 2021-09-07 11:31:59 -07:00
memtablerep_bench.cc Make MemTableRepFactory into a Customizable class (#8419) 2021-09-08 07:46:44 -07:00
skiplist.h Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
skiplist_test.cc Replace most typedef with using= (#8751) 2021-09-07 11:31:59 -07:00
skiplistrep.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
stl_wrappers.h Replace namespace name "rocksdb" with ROCKSDB_NAMESPACE (#6433) 2020-02-20 12:09:57 -08:00
vectorrep.cc Remove using namespace (#9369) 2022-01-12 09:31:12 -08:00
write_buffer_manager.cc Rewrite memory-charging feature's option API (#9926) 2022-05-17 15:01:51 -07:00
write_buffer_manager_test.cc Rewrite memory-charging feature's option API (#9926) 2022-05-17 15:01:51 -07:00