Commit f990782f authored by Pieter Noordhuis's avatar Pieter Noordhuis Committed by antirez
Browse files

Re-use AOF buffer when it is small enough

parent a57225c2
...@@ -81,10 +81,17 @@ void flushAppendOnlyFile(void) { ...@@ -81,10 +81,17 @@ void flushAppendOnlyFile(void) {
} }
exit(1); exit(1);
} }
sdsfree(server.aofbuf);
server.aofbuf = sdsempty();
server.appendonly_current_size += nwritten; 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 /* Don't fsync if no-appendfsync-on-rewrite is set to yes and there are
* children doing I/O in the background. */ * children doing I/O in the background. */
if (server.no_appendfsync_on_rewrite && if (server.no_appendfsync_on_rewrite &&
......
...@@ -94,6 +94,13 @@ void sdsupdatelen(sds s) { ...@@ -94,6 +94,13 @@ void sdsupdatelen(sds s) {
sh->len = reallen; 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) { static sds sdsMakeRoomFor(sds s, size_t addlen) {
struct sdshdr *sh, *newsh; struct sdshdr *sh, *newsh;
size_t free = sdsavail(s); size_t free = sdsavail(s);
......
...@@ -76,6 +76,7 @@ sds sdscatprintf(sds s, const char *fmt, ...); ...@@ -76,6 +76,7 @@ sds sdscatprintf(sds s, const char *fmt, ...);
sds sdstrim(sds s, const char *cset); sds sdstrim(sds s, const char *cset);
sds sdsrange(sds s, int start, int end); sds sdsrange(sds s, int start, int end);
void sdsupdatelen(sds s); void sdsupdatelen(sds s);
void sdsclear(sds s);
int sdscmp(sds s1, sds s2); int sdscmp(sds s1, sds s2);
sds *sdssplitlen(char *s, int len, char *sep, int seplen, int *count); sds *sdssplitlen(char *s, int len, char *sep, int seplen, int *count);
void sdsfreesplitres(sds *tokens, int count); void sdsfreesplitres(sds *tokens, int count);
......
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