flushSlavesOutputBuffers(): details clarified via comments.

Talking with @oranagra we had to reason a little bit to understand if
this function could ever flush the output buffers of the wrong slaves,
having online state but actually not being ready to receive writes
before the first ACK is received from them (this happens with diskless
replication).

Next time we'll just read this comment.
This commit is contained in:
antirez 2015-08-06 15:08:54 +02:00
parent ce5761e061
commit 55cb64bbfb
1 changed files with 6 additions and 0 deletions

View File

@ -1668,6 +1668,12 @@ void flushSlavesOutputBuffers(void) {
client *slave = listNodeValue(ln);
int events;
/* Note that the following will not flush output buffers of slaves
* in STATE_ONLINE but having put_online_on_ack set to true: in this
* case the writable event is never installed, since the purpose
* of put_online_on_ack is to postpone the moment it is installed.
* This is what we want since slaves in this state should not receive
* writes before the first ACK. */
events = aeGetFileEvents(server.el,slave->fd);
if (events & AE_WRITABLE &&
slave->replstate == SLAVE_STATE_ONLINE &&