CG: fix RDB saving when there are no consumer groups.

This commit is contained in:
antirez 2018-02-18 23:13:41 +01:00
parent 267f7f2c97
commit 13ff7bc3ef

View File

@ -894,34 +894,38 @@ ssize_t rdbSaveObject(rio *rdb, robj *o) {
* type, so serialize every consumer group. */ * type, so serialize every consumer group. */
/* Save the number of groups. */ /* Save the number of groups. */
if ((n = rdbSaveLen(rdb,raxSize(s->cgroups))) == -1) return -1; size_t num_cgroups = s->cgroups ? raxSize(s->cgroups) : 0;
if ((n = rdbSaveLen(rdb,num_cgroups)) == -1) return -1;
nwritten += n; nwritten += n;
/* Serialize each consumer group. */ if (num_cgroups) {
raxStart(&ri,s->cgroups); /* Serialize each consumer group. */
raxSeek(&ri,"^",NULL,0); raxStart(&ri,s->cgroups);
while(raxNext(&ri)) { raxSeek(&ri,"^",NULL,0);
streamCG *cg = ri.data; while(raxNext(&ri)) {
streamCG *cg = ri.data;
/* Save the group name. */ /* Save the group name. */
if ((n = rdbSaveRawString(rdb,ri.key,ri.key_len)) == -1) return -1; if ((n = rdbSaveRawString(rdb,ri.key,ri.key_len)) == -1)
nwritten += n; return -1;
nwritten += n;
/* Last ID. */ /* Last ID. */
if ((n = rdbSaveLen(rdb,cg->last_id.ms)) == -1) return -1; if ((n = rdbSaveLen(rdb,cg->last_id.ms)) == -1) return -1;
nwritten += n; nwritten += n;
if ((n = rdbSaveLen(rdb,cg->last_id.seq)) == -1) return -1; if ((n = rdbSaveLen(rdb,cg->last_id.seq)) == -1) return -1;
nwritten += n; nwritten += n;
/* Save the global PEL. */ /* Save the global PEL. */
if ((n = rdbSaveStreamPEL(rdb,cg->pel,1)) == -1) return -1; if ((n = rdbSaveStreamPEL(rdb,cg->pel,1)) == -1) return -1;
nwritten += n; nwritten += n;
/* Save the consumers of this group. */ /* Save the consumers of this group. */
if ((n = rdbSaveStreamConsumers(rdb,cg)) == -1) return -1; if ((n = rdbSaveStreamConsumers(rdb,cg)) == -1) return -1;
nwritten += n; nwritten += n;
}
raxStop(&ri);
} }
raxStop(&ri);
} else if (o->type == OBJ_MODULE) { } else if (o->type == OBJ_MODULE) {
/* Save a module-specific value. */ /* Save a module-specific value. */
RedisModuleIO io; RedisModuleIO io;