mirror of https://github.com/facebook/rocksdb.git
4e00748098
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 |
||
---|---|---|
.. | ||
alloc_tracker.cc | ||
hash_linklist_rep.cc | ||
hash_skiplist_rep.cc | ||
inlineskiplist.h | ||
inlineskiplist_test.cc | ||
memtablerep_bench.cc | ||
skiplist.h | ||
skiplist_test.cc | ||
skiplistrep.cc | ||
stl_wrappers.h | ||
vectorrep.cc | ||
write_buffer_manager.cc | ||
write_buffer_manager_test.cc |