- 27 Mar, 2015 2 commits
-
-
antirez authored
No semantical changes since to make dict.c truly able to scale over the 32 bit table size limit, the hash function shoulds and other internals related to hash function output should be 64 bit ready.
-
antirez authored
rehashidx is always positive in the two code paths, since the only negative value it could have is -1 when there is no rehashing in progress, and the condition is explicitly checked.
-
- 11 Feb, 2015 11 commits
-
-
antirez authored
The old version of SPOP with "count" argument used an API call of dict.c which was actually designed for a different goal, and was not capable of good distribution. We follow a different three-cases approach optimized for different ratiion between sets and requested number of elements. The implementation is simpler and allowed the removal of a large amount of code.
-
antirez authored
Fixed by @oranagra, thank you.
-
antirez authored
-
antirez authored
Avoid code repetition introduced with PR #2367, also fixes the return value to always return 0 if there is nothing more to rehash.
-
Sun He authored
-
antirez authored
This is very similar to the optimization applied to dictGetRandomKeys, but applied to the single key variant. Related to issue #2306.
-
antirez authored
Related to issue #2306.
-
antirez authored
We use the invariant that the original table ht[0] is never populated up to the index before the current rehashing index. Related to issue #2306.
-
antirez authored
Related to issue #2306.
-
antirez authored
Related to issue #2306.
-
antirez authored
Related to issue #2306.
-
- 23 Jan, 2015 1 commit
-
-
antirez authored
-
- 29 Sep, 2014 2 commits
-
-
Matt Stancliff authored
Some language in the comment was difficult to understand, so this commit: clarifies wording, removes unnecessary words, and relocates some dependent clauses closer to what they actually describe. I also tried to break up longer chains of thought (if X, then Y, and Q, and also F, so obviously M) into more manageable chunks for ease of understanding.
-
Michael Parker authored
Closes #1351
-
- 26 Aug, 2014 2 commits
- 18 Aug, 2014 1 commit
-
-
Cong Ding authored
Closes #878
-
- 13 Aug, 2014 1 commit
-
-
antirez authored
-
- 20 Mar, 2014 1 commit
-
-
antirez authored
This new function is useful to get a number of random entries from an hash table when we just need to do some sampling without particularly good distribution. It just jumps at a random place of the hash table and returns the first N items encountered by scanning linearly. The main usefulness of this function is to speedup Redis internal sampling of the key space, for example for key eviction or expiry.
-
- 04 Mar, 2014 2 commits
-
-
zhanghailei authored
-
zhanghailei authored
-
- 10 Dec, 2013 1 commit
-
-
antirez authored
Redis hash table implementation has many non-blocking features like incremental rehashing, however while deleting a large hash table there was no way to have a callback called to do some incremental work. This commit adds this support, as an optiona callback argument to dictEmpty() that is currently called at a fixed interval (one time every 65k deletions).
-
- 05 Dec, 2013 1 commit
-
-
antirez authored
-
- 05 Nov, 2013 1 commit
-
-
antirez authored
-
- 28 Oct, 2013 1 commit
-
-
antirez authored
-
- 25 Oct, 2013 4 commits
-
-
antirez authored
-
antirez authored
-
Pieter Noordhuis authored
The irrelevant bits shouldn't be masked to 1. This can result in slots being skipped when the hash table is resized between calls to the iterator.
-
Pieter Noordhuis authored
-
- 20 Aug, 2013 1 commit
-
-
antirez authored
-
- 19 Aug, 2013 5 commits
-
-
antirez authored
-
antirez authored
Also a warning was suppressed by including unistd.h in redisassert.h (needed for _exit()).
-
antirez authored
The previous hashing used the trivial algorithm of xoring the integers together. This is not optimal as it is very likely that different hash table setups will hash the same, for instance an hash table at the start of the rehashing process, and at the end, will have the same fingerprint. Now we hash N integers in a smarter way, by summing every integer to the previous hash, and taking the integer hashing again (see the code for further details). This way it is a lot less likely that we get a collision. Moreover this way of hashing explicitly protects from the same set of integers in a different order to hash to the same number. This commit is related to issue #1240.
-
antirez authored
dict.c allows the user to create unsafe iterators, that are iterators that will not touch the dictionary data structure in any way, preventing copy on write, but at the same time are limited in their usage. The limitation is that when itearting with an unsafe iterator, no call to other dictionary functions must be done inside the iteration loop, otherwise the dictionary may be incrementally rehashed resulting into missing elements in the set of the elements returned by the iterator. However after introducing this kind of iterators a number of bugs were found due to misuses of the API, and we are still finding bugs about this issue. The bugs are not trivial to track because the effect is just missing elements during the iteartion. This commit introduces auto-detection of the API misuse. The idea is that an unsafe iterator has a contract: from initialization to the release of the iterator the dictionary should not change. So we take a fingerprint of the dictionary state, xoring a few important dict properties when the unsafe iteartor is initialized. We later check when the iterator is released if the fingerprint is still the same. If it is not, we found a misuse of the iterator, as not allowed API calls changed the internal state of the dictionary. This code was checked against a real bug, issue #1240. This is what Redis prints (aborting) when a misuse is detected: Assertion failed: (iter->fingerprint == dictFingerprint(iter->d)), function dictReleaseIterator, file dict.c, line 587.
- 19 Jan, 2013 1 commit
-
-
guiquanz authored
-
- 28 Nov, 2012 1 commit
-
-
charsyam authored
-
- 08 Nov, 2012 1 commit
-
-
antirez authored
-