Re-use AOF buffer when it is small enough

This commit is contained in:
Pieter Noordhuis 2011-08-18 12:44:30 +02:00 committed by antirez
parent a57225c2cf
commit f990782f4d
3 changed files with 17 additions and 2 deletions

View File

@ -81,10 +81,17 @@ void flushAppendOnlyFile(void) {
}
exit(1);
}
sdsfree(server.aofbuf);
server.aofbuf = sdsempty();
server.appendonly_current_size += nwritten;
/* Re-use AOF buffer when it is small enough. The maximum comes from the
* arena size of 4k minus some overhead (but is otherwise arbitrary). */
if ((sdslen(server.aofbuf)+sdsavail(server.aofbuf)) < 4000) {
sdsclear(server.aofbuf);
} else {
sdsfree(server.aofbuf);
server.aofbuf = sdsempty();
}
/* Don't fsync if no-appendfsync-on-rewrite is set to yes and there are
* children doing I/O in the background. */
if (server.no_appendfsync_on_rewrite &&

View File

@ -94,6 +94,13 @@ void sdsupdatelen(sds s) {
sh->len = reallen;
}
void sdsclear(sds s) {
struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr)));
sh->free += sh->len;
sh->len = 0;
sh->buf[0] = '\0';
}
static sds sdsMakeRoomFor(sds s, size_t addlen) {
struct sdshdr *sh, *newsh;
size_t free = sdsavail(s);

View File

@ -76,6 +76,7 @@ sds sdscatprintf(sds s, const char *fmt, ...);
sds sdstrim(sds s, const char *cset);
sds sdsrange(sds s, int start, int end);
void sdsupdatelen(sds s);
void sdsclear(sds s);
int sdscmp(sds s1, sds s2);
sds *sdssplitlen(char *s, int len, char *sep, int seplen, int *count);
void sdsfreesplitres(sds *tokens, int count);