mirror of
https://github.com/fluencelabs/redis
synced 2025-03-17 16:10:50 +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
|
||||
* write when the child finishes the rewrite will be small. */
|
||||
void aofChildWriteDiffData(aeEventLoop *el, int fd, void *privdata, int mask) {
|
||||
listNode *ln = listFirst(server.aof_rewrite_buf_blocks);
|
||||
aofrwblock *block = ln ? ln->value : NULL;
|
||||
listNode *ln;
|
||||
aofrwblock *block;
|
||||
ssize_t nwritten;
|
||||
|
||||
if (server.aof_stop_sending_diff || !block) {
|
||||
aeDeleteFileEvent(server.el,server.aof_pipe_write_data_to_child,
|
||||
AE_WRITABLE);
|
||||
return;
|
||||
while(1) {
|
||||
ln = listFirst(server.aof_rewrite_buf_blocks);
|
||||
block = ln ? ln->value : NULL;
|
||||
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. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user