mirror of
https://github.com/fluencelabs/redis
synced 2025-03-25 20:01:04 +00:00
aof: fix the short write
This commit is contained in:
parent
75fa7879e6
commit
2d73cf2367
23
src/aof.c
23
src/aof.c
@ -266,6 +266,27 @@ int startAppendOnly(void) {
|
|||||||
return C_OK;
|
return C_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ssize_t safe_write(int fd, const char *buf, size_t len) {
|
||||||
|
ssize_t nwritten = 0, totwritten = 0;
|
||||||
|
|
||||||
|
while(len) {
|
||||||
|
nwritten = write(fd, buf, len);
|
||||||
|
|
||||||
|
if (nwritten < 0) {
|
||||||
|
if (errno == EINTR) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return totwritten ? totwritten : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
len -= nwritten;
|
||||||
|
buf += nwritten;
|
||||||
|
totwritten += nwritten;
|
||||||
|
}
|
||||||
|
|
||||||
|
return totwritten;
|
||||||
|
}
|
||||||
|
|
||||||
/* Write the append only file buffer on disk.
|
/* Write the append only file buffer on disk.
|
||||||
*
|
*
|
||||||
* Since we are required to write the AOF before replying to the client,
|
* Since we are required to write the AOF before replying to the client,
|
||||||
@ -323,7 +344,7 @@ void flushAppendOnlyFile(int force) {
|
|||||||
* or alike */
|
* or alike */
|
||||||
|
|
||||||
latencyStartMonitor(latency);
|
latencyStartMonitor(latency);
|
||||||
nwritten = write(server.aof_fd,server.aof_buf,sdslen(server.aof_buf));
|
nwritten = safe_write(server.aof_fd,server.aof_buf,sdslen(server.aof_buf));
|
||||||
latencyEndMonitor(latency);
|
latencyEndMonitor(latency);
|
||||||
/* We want to capture different events for delayed writes:
|
/* We want to capture different events for delayed writes:
|
||||||
* when the delay happens with a pending fsync, or with a saving child
|
* when the delay happens with a pending fsync, or with a saving child
|
||||||
|
Loading…
x
Reference in New Issue
Block a user