summaryrefslogtreecommitdiff
path: root/src/rdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rdb.c')
-rw-r--r--src/rdb.c66
1 files changed, 48 insertions, 18 deletions
diff --git a/src/rdb.c b/src/rdb.c
index 4fc385848..5cec208c5 100644
--- a/src/rdb.c
+++ b/src/rdb.c
@@ -1351,6 +1351,7 @@ int rdbSaveBackground(char *filename, rdbSaveInfo *rsi) {
/* Child */
redisSetProcTitle("redis-rdb-bgsave");
+ redisSetCpuAffinity(server.bgsave_cpulist);
retval = rdbSave(filename,rsi);
if (retval == C_OK) {
sendChildCOWInfo(CHILD_INFO_TYPE_RDB, "RDB");
@@ -1441,7 +1442,10 @@ robj *rdbLoadObject(int rdbtype, rio *rdb, sds key) {
/* Load every single element of the list */
while(len--) {
- if ((ele = rdbLoadEncodedStringObject(rdb)) == NULL) return NULL;
+ if ((ele = rdbLoadEncodedStringObject(rdb)) == NULL) {
+ decrRefCount(o);
+ return NULL;
+ }
dec = getDecodedObject(ele);
size_t len = sdslen(dec->ptr);
quicklistPushTail(o->ptr, dec->ptr, len);
@@ -1468,8 +1472,10 @@ robj *rdbLoadObject(int rdbtype, rio *rdb, sds key) {
long long llval;
sds sdsele;
- if ((sdsele = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL))
- == NULL) return NULL;
+ if ((sdsele = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL)) == NULL) {
+ decrRefCount(o);
+ return NULL;
+ }
if (o->encoding == OBJ_ENCODING_INTSET) {
/* Fetch integer value from element. */
@@ -1508,13 +1514,23 @@ robj *rdbLoadObject(int rdbtype, rio *rdb, sds key) {
double score;
zskiplistNode *znode;
- if ((sdsele = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL))
- == NULL) return NULL;
+ if ((sdsele = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL)) == NULL) {
+ decrRefCount(o);
+ return NULL;
+ }
if (rdbtype == RDB_TYPE_ZSET_2) {
- if (rdbLoadBinaryDoubleValue(rdb,&score) == -1) return NULL;
+ if (rdbLoadBinaryDoubleValue(rdb,&score) == -1) {
+ decrRefCount(o);
+ sdsfree(sdsele);
+ return NULL;
+ }
} else {
- if (rdbLoadDoubleValue(rdb,&score) == -1) return NULL;
+ if (rdbLoadDoubleValue(rdb,&score) == -1) {
+ decrRefCount(o);
+ sdsfree(sdsele);
+ return NULL;
+ }
}
/* Don't care about integer-encoded strings. */
@@ -1546,10 +1562,15 @@ robj *rdbLoadObject(int rdbtype, rio *rdb, sds key) {
while (o->encoding == OBJ_ENCODING_ZIPLIST && len > 0) {
len--;
/* Load raw strings */
- if ((field = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL))
- == NULL) return NULL;
- if ((value = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL))
- == NULL) return NULL;
+ if ((field = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL)) == NULL) {
+ decrRefCount(o);
+ return NULL;
+ }
+ if ((value = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL)) == NULL) {
+ sdsfree(field);
+ decrRefCount(o);
+ return NULL;
+ }
/* Add pair to ziplist */
o->ptr = ziplistPush(o->ptr, (unsigned char*)field,
@@ -1577,10 +1598,15 @@ robj *rdbLoadObject(int rdbtype, rio *rdb, sds key) {
while (o->encoding == OBJ_ENCODING_HT && len > 0) {
len--;
/* Load encoded strings */
- if ((field = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL))
- == NULL) return NULL;
- if ((value = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL))
- == NULL) return NULL;
+ if ((field = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL)) == NULL) {
+ decrRefCount(o);
+ return NULL;
+ }
+ if ((value = rdbGenericLoadStringObject(rdb,RDB_LOAD_SDS,NULL)) == NULL) {
+ sdsfree(field);
+ decrRefCount(o);
+ return NULL;
+ }
/* Add pair to hash table */
ret = dictAdd((dict*)o->ptr, field, value);
@@ -1600,7 +1626,10 @@ robj *rdbLoadObject(int rdbtype, rio *rdb, sds key) {
while (len--) {
unsigned char *zl =
rdbGenericLoadStringObject(rdb,RDB_LOAD_PLAIN,NULL);
- if (zl == NULL) return NULL;
+ if (zl == NULL) {
+ decrRefCount(o);
+ return NULL;
+ }
quicklistAppendZiplist(o->ptr, zl);
}
} else if (rdbtype == RDB_TYPE_HASH_ZIPMAP ||
@@ -1823,8 +1852,8 @@ robj *rdbLoadObject(int rdbtype, rio *rdb, sds key) {
decrRefCount(o);
return NULL;
}
- streamConsumer *consumer = streamLookupConsumer(cgroup,cname,
- 1);
+ streamConsumer *consumer =
+ streamLookupConsumer(cgroup,cname,SLC_NONE);
sdsfree(cname);
consumer->seen_time = rdbLoadMillisecondTime(rdb,RDB_VERSION);
if (rioGetReadError(rdb)) {
@@ -2460,6 +2489,7 @@ int rdbSaveToSlavesSockets(rdbSaveInfo *rsi) {
rioInitWithFd(&rdb,server.rdb_pipe_write);
redisSetProcTitle("redis-rdb-to-slaves");
+ redisSetCpuAffinity(server.bgsave_cpulist);
retval = rdbSaveRioWithEOFMark(&rdb,NULL,rsi);
if (retval == C_OK && rioFlush(&rdb) == 0)