mirror of
https://github.com/fluencelabs/redis
synced 2025-03-30 22:31:03 +00:00
dict.c: dictGetRandomKeys() optimization for big->small table case.
Related to issue #2306.
This commit is contained in:
parent
88cd9ebc09
commit
1bcf67a75f
@ -704,7 +704,14 @@ unsigned int dictGetRandomKeys(dict *d, dictEntry **des, unsigned int count) {
|
|||||||
/* Invariant of the dict.c rehashing: up to the indexes already
|
/* Invariant of the dict.c rehashing: up to the indexes already
|
||||||
* visited in ht[0] during the rehashing, there are no populated
|
* visited in ht[0] during the rehashing, there are no populated
|
||||||
* buckets, so we can skip ht[0] for indexes between 0 and idx-1. */
|
* buckets, so we can skip ht[0] for indexes between 0 and idx-1. */
|
||||||
if (j == 0 && i < d->rehashidx) continue;
|
if (tables == 2 && j == 0 && i < d->rehashidx) {
|
||||||
|
/* Moreover, if we are currently out of range in the second
|
||||||
|
* table, there will be no elements in both tables up to
|
||||||
|
* the current rehashing index, so we jump if possible.
|
||||||
|
* (this happens when going from big to small table). */
|
||||||
|
if (i >= d->ht[1].size) i = d->rehashidx;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (i >= d->ht[j].size) continue; /* Out of range for this table. */
|
if (i >= d->ht[j].size) continue; /* Out of range for this table. */
|
||||||
dictEntry *he = d->ht[j].table[i];
|
dictEntry *he = d->ht[j].table[i];
|
||||||
while (he) {
|
while (he) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user