Commit 2767f1c0 authored by Pieter Noordhuis's avatar Pieter Noordhuis
Browse files

fix aof and digest code to work with dual set encoding

parent 96ffb2fe
...@@ -461,20 +461,30 @@ int rewriteAppendOnlyFile(char *filename) { ...@@ -461,20 +461,30 @@ int rewriteAppendOnlyFile(char *filename) {
redisPanic("Unknown list encoding"); redisPanic("Unknown list encoding");
} }
} else if (o->type == REDIS_SET) { } else if (o->type == REDIS_SET) {
/* Emit the SADDs needed to rebuild the set */ char cmd[]="*3\r\n$4\r\nSADD\r\n";
dict *set = o->ptr;
dictIterator *di = dictGetIterator(set);
dictEntry *de;
while((de = dictNext(di)) != NULL) {
char cmd[]="*3\r\n$4\r\nSADD\r\n";
robj *eleobj = dictGetEntryKey(de);
if (fwrite(cmd,sizeof(cmd)-1,1,fp) == 0) goto werr; /* Emit the SADDs needed to rebuild the set */
if (fwriteBulkObject(fp,&key) == 0) goto werr; if (o->encoding == REDIS_ENCODING_INTSET) {
if (fwriteBulkObject(fp,eleobj) == 0) goto werr; int ii = 0;
long long llval;
while(intsetGet(o->ptr,ii++,&llval)) {
if (fwrite(cmd,sizeof(cmd)-1,1,fp) == 0) goto werr;
if (fwriteBulkObject(fp,&key) == 0) goto werr;
if (fwriteBulkLongLong(fp,llval) == 0) goto werr;
}
} else if (o->encoding == REDIS_ENCODING_HT) {
dictIterator *di = dictGetIterator(o->ptr);
dictEntry *de;
while((de = dictNext(di)) != NULL) {
robj *eleobj = dictGetEntryKey(de);
if (fwrite(cmd,sizeof(cmd)-1,1,fp) == 0) goto werr;
if (fwriteBulkObject(fp,&key) == 0) goto werr;
if (fwriteBulkObject(fp,eleobj) == 0) goto werr;
}
dictReleaseIterator(di);
} else {
redisPanic("Unknown set encoding");
} }
dictReleaseIterator(di);
} else if (o->type == REDIS_ZSET) { } else if (o->type == REDIS_ZSET) {
/* Emit the ZADDs needed to rebuild the sorted set */ /* Emit the ZADDs needed to rebuild the sorted set */
zset *zs = o->ptr; zset *zs = o->ptr;
......
...@@ -119,16 +119,13 @@ void computeDatasetDigest(unsigned char *final) { ...@@ -119,16 +119,13 @@ void computeDatasetDigest(unsigned char *final) {
} }
listTypeReleaseIterator(li); listTypeReleaseIterator(li);
} else if (o->type == REDIS_SET) { } else if (o->type == REDIS_SET) {
dict *set = o->ptr; setIterator *si = setTypeInitIterator(o);
dictIterator *di = dictGetIterator(set); robj *ele;
dictEntry *de; while((ele = setTypeNext(si)) != NULL) {
xorObjectDigest(digest,ele);
while((de = dictNext(di)) != NULL) { decrRefCount(ele);
robj *eleobj = dictGetEntryKey(de);
xorObjectDigest(digest,eleobj);
} }
dictReleaseIterator(di); setTypeReleaseIterator(si);
} else if (o->type == REDIS_ZSET) { } else if (o->type == REDIS_ZSET) {
zset *zs = o->ptr; zset *zs = o->ptr;
dictIterator *di = dictGetIterator(zs->dict); dictIterator *di = dictGetIterator(zs->dict);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment