mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 17:10:50 +00:00
Fixed VM bugs introduced with the top level keys as sds strings changes
This commit is contained in:
parent
0924181364
commit
44262c58a4
12
redis.c
12
redis.c
@ -9358,7 +9358,8 @@ static int vmSwapOneObject(int usethreads) {
|
|||||||
struct dictEntry *best = NULL;
|
struct dictEntry *best = NULL;
|
||||||
double best_swappability = 0;
|
double best_swappability = 0;
|
||||||
redisDb *best_db = NULL;
|
redisDb *best_db = NULL;
|
||||||
robj *key, *val;
|
robj *val;
|
||||||
|
sds key;
|
||||||
|
|
||||||
for (j = 0; j < server.dbnum; j++) {
|
for (j = 0; j < server.dbnum; j++) {
|
||||||
redisDb *db = server.db+j;
|
redisDb *db = server.db+j;
|
||||||
@ -9374,7 +9375,6 @@ static int vmSwapOneObject(int usethreads) {
|
|||||||
|
|
||||||
if (maxtries) maxtries--;
|
if (maxtries) maxtries--;
|
||||||
de = dictGetRandomKey(db->dict);
|
de = dictGetRandomKey(db->dict);
|
||||||
key = dictGetEntryKey(de);
|
|
||||||
val = dictGetEntryVal(de);
|
val = dictGetEntryVal(de);
|
||||||
/* Only swap objects that are currently in memory.
|
/* Only swap objects that are currently in memory.
|
||||||
*
|
*
|
||||||
@ -9399,11 +9399,11 @@ static int vmSwapOneObject(int usethreads) {
|
|||||||
val = dictGetEntryVal(best);
|
val = dictGetEntryVal(best);
|
||||||
|
|
||||||
redisLog(REDIS_DEBUG,"Key with best swappability: %s, %f",
|
redisLog(REDIS_DEBUG,"Key with best swappability: %s, %f",
|
||||||
key->ptr, best_swappability);
|
key, best_swappability);
|
||||||
|
|
||||||
/* Swap it */
|
/* Swap it */
|
||||||
if (usethreads) {
|
if (usethreads) {
|
||||||
vmSwapObjectThreaded(key,val,best_db);
|
vmSwapObjectThreaded(createStringObject(key,sdslen(key)),val,best_db);
|
||||||
return REDIS_OK;
|
return REDIS_OK;
|
||||||
} else {
|
} else {
|
||||||
vmpointer *vp;
|
vmpointer *vp;
|
||||||
@ -9489,7 +9489,7 @@ static void vmThreadedIOCompletedJob(aeEventLoop *el, int fd, void *privdata,
|
|||||||
/* Post process it in the main thread, as there are things we
|
/* Post process it in the main thread, as there are things we
|
||||||
* can do just here to avoid race conditions and/or invasive locks */
|
* can do just here to avoid race conditions and/or invasive locks */
|
||||||
redisLog(REDIS_DEBUG,"COMPLETED Job type: %d, ID %p, key: %s", j->type, (void*)j->id, (unsigned char*)j->key->ptr);
|
redisLog(REDIS_DEBUG,"COMPLETED Job type: %d, ID %p, key: %s", j->type, (void*)j->id, (unsigned char*)j->key->ptr);
|
||||||
de = dictFind(j->db->dict,j->key);
|
de = dictFind(j->db->dict,j->key->ptr);
|
||||||
redisAssert(de != NULL);
|
redisAssert(de != NULL);
|
||||||
if (j->type == REDIS_IOJOB_LOAD) {
|
if (j->type == REDIS_IOJOB_LOAD) {
|
||||||
redisDb *db;
|
redisDb *db;
|
||||||
@ -9804,8 +9804,6 @@ static void queueIOJob(iojob *j) {
|
|||||||
static int vmSwapObjectThreaded(robj *key, robj *val, redisDb *db) {
|
static int vmSwapObjectThreaded(robj *key, robj *val, redisDb *db) {
|
||||||
iojob *j;
|
iojob *j;
|
||||||
|
|
||||||
assert(key->storage == REDIS_VM_MEMORY);
|
|
||||||
|
|
||||||
j = zmalloc(sizeof(*j));
|
j = zmalloc(sizeof(*j));
|
||||||
j->type = REDIS_IOJOB_PREPARE_SWAP;
|
j->type = REDIS_IOJOB_PREPARE_SWAP;
|
||||||
j->db = db;
|
j->db = db;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user