mirror of
https://github.com/fluencelabs/redis
synced 2025-05-04 15:02:13 +00:00
Check for EAGAIN in sendBulkToSlave().
Sometime an osx master with a Linux server over a slow link caused a strange error where osx called the writable function for the socket but actually apparently there was no room in the socket buffer to accept the write: write(2) call returned an EAGAIN error, that was not checked, so we considered write(2) == 0 always as a connection reset, which was unfortunate since the bulk transfer has to start again. Also more errors are logged with the WARNING level in the same code path now.
This commit is contained in:
parent
4e809a9a19
commit
301a0cfc69
@ -602,9 +602,11 @@ void sendBulkToSlave(aeEventLoop *el, int fd, void *privdata, int mask) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((nwritten = write(fd,buf,buflen)) == -1) {
|
if ((nwritten = write(fd,buf,buflen)) == -1) {
|
||||||
redisLog(REDIS_VERBOSE,"Write error sending DB to slave: %s",
|
if (errno != EAGAIN) {
|
||||||
strerror(errno));
|
redisLog(REDIS_WARNING,"Write error sending DB to slave: %s",
|
||||||
freeClient(slave);
|
strerror(errno));
|
||||||
|
freeClient(slave);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
slave->repldboff += nwritten;
|
slave->repldboff += nwritten;
|
||||||
@ -616,6 +618,7 @@ void sendBulkToSlave(aeEventLoop *el, int fd, void *privdata, int mask) {
|
|||||||
slave->repl_ack_time = server.unixtime;
|
slave->repl_ack_time = server.unixtime;
|
||||||
if (aeCreateFileEvent(server.el, slave->fd, AE_WRITABLE,
|
if (aeCreateFileEvent(server.el, slave->fd, AE_WRITABLE,
|
||||||
sendReplyToClient, slave) == AE_ERR) {
|
sendReplyToClient, slave) == AE_ERR) {
|
||||||
|
redisLog(REDIS_WARNING,"Unable to register writable event for slave bulk transfer: %s", strerror(errno));
|
||||||
freeClient(slave);
|
freeClient(slave);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user