aofChildWriteDiffData(): write as much as possible.

This commit is contained in:
antirez 2014-07-04 15:54:20 +02:00
parent 30c42f12b0
commit 62f9d34c56

View File

@ -92,20 +92,24 @@ unsigned long aofRewriteBufferSize(void) {
* rewrite. We send pieces of our AOF differences buffer so that the final * rewrite. We send pieces of our AOF differences buffer so that the final
* write when the child finishes the rewrite will be small. */ * write when the child finishes the rewrite will be small. */
void aofChildWriteDiffData(aeEventLoop *el, int fd, void *privdata, int mask) { void aofChildWriteDiffData(aeEventLoop *el, int fd, void *privdata, int mask) {
listNode *ln = listFirst(server.aof_rewrite_buf_blocks); listNode *ln;
aofrwblock *block = ln ? ln->value : NULL; aofrwblock *block;
ssize_t nwritten; ssize_t nwritten;
if (server.aof_stop_sending_diff || !block) { while(1) {
aeDeleteFileEvent(server.el,server.aof_pipe_write_data_to_child, ln = listFirst(server.aof_rewrite_buf_blocks);
AE_WRITABLE); block = ln ? ln->value : NULL;
return; if (server.aof_stop_sending_diff || !block) {
aeDeleteFileEvent(server.el,server.aof_pipe_write_data_to_child,
AE_WRITABLE);
return;
}
nwritten = write(server.aof_pipe_write_data_to_child,block->buf,block->used);
if (nwritten <= 0) return;
memmove(block->buf,block->buf+nwritten,block->used-nwritten);
block->used -= nwritten;
if (block->used == 0) listDelNode(server.aof_rewrite_buf_blocks,ln);
} }
nwritten = write(server.aof_pipe_write_data_to_child,block->buf,block->used);
if (nwritten <= 0) return;
memmove(block->buf,block->buf+nwritten,block->used-nwritten);
block->used -= nwritten;
if (block->used == 0) listDelNode(server.aof_rewrite_buf_blocks,ln);
} }
/* Append data to the AOF rewrite buffer, allocating new blocks if needed. */ /* Append data to the AOF rewrite buffer, allocating new blocks if needed. */