mirror of
https://github.com/fluencelabs/redis
synced 2025-03-16 15:40:49 +00:00
blocking load fixed with the new design
This commit is contained in:
parent
3be00d7ed6
commit
9a3730289f
16
src/db.c
16
src/db.c
@ -34,12 +34,18 @@ robj *lookupKey(redisDb *db, robj *key) {
|
||||
|
||||
/* Key not found in the in memory hash table, but if disk store is
|
||||
* enabled we may have this key on disk. If so load it in memory
|
||||
* in a blocking way.
|
||||
*
|
||||
* FIXME: race condition here. If there was an already scheduled
|
||||
* async loading of this key, what may happen is that the old
|
||||
* key is loaded in memory if this gets deleted in the meantime. */
|
||||
* in a blocking way. */
|
||||
if (server.ds_enabled && cacheKeyMayExist(db,key)) {
|
||||
if (cacheScheduleIOGetFlags(db,key) &
|
||||
(REDIS_IO_SAVE|REDIS_IO_SAVEINPROG))
|
||||
{
|
||||
/* There is a save in progress for this object!
|
||||
* Wait for it to get out. */
|
||||
waitEmptyIOJobsQueue();
|
||||
processAllPendingIOJobs();
|
||||
redisAssert((cacheScheduleIOGetFlags(db,key) & (REDIS_IO_SAVE|REDIS_IO_SAVEINPROG)) == 0);
|
||||
}
|
||||
|
||||
redisLog(REDIS_DEBUG,"Force loading key %s via lookup",
|
||||
key->ptr);
|
||||
val = dsGet(db,key,&expire);
|
||||
|
Loading…
x
Reference in New Issue
Block a user