mirror of
https://github.com/fluencelabs/redis
synced 2025-03-30 22:31:03 +00:00
aofChildWriteDiffData(): write as much as possible.
This commit is contained in:
parent
30c42f12b0
commit
62f9d34c56
26
src/aof.c
26
src/aof.c
@ -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. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user