summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2020-05-26 23:55:52 +0200
committerantirez <antirez@gmail.com>2020-05-26 23:55:52 +0200
commit94c026cd1971d1f0680c20f550e3094717d3b55e (patch)
tree7c63d3a283574ba8363249f01a8cf9a646ad00d9
parent7d359392060d36dd05e2e9e73b65b0dbcbbb42ed (diff)
parentcaf7c50408bc0bed3899018359bf6699919c0199 (diff)
downloadredis-94c026cd1971d1f0680c20f550e3094717d3b55e.tar.gz
Merge branch 'unstable' of github.com:/antirez/redis into unstable
-rw-r--r--.github/workflows/daily.yml15
-rw-r--r--src/replication.c61
2 files changed, 49 insertions, 27 deletions
diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml
index 828268c70..c22d49895 100644
--- a/.github/workflows/daily.yml
+++ b/.github/workflows/daily.yml
@@ -49,6 +49,21 @@ jobs:
- name: module api test
run: ./runtest-moduleapi --verbose
+ test-tls:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: make
+ run: |
+ make BUILD_TLS=yes
+ - name: test
+ run: |
+ sudo apt-get install tcl8.5 tcl-tls
+ ./utils/gen-test-certs.sh
+ ./runtest --accurate --verbose --tls
+ - name: module api test
+ run: ./runtest-moduleapi --verbose --tls
+
test-valgrind:
runs-on: ubuntu-latest
timeout-minutes: 14400
diff --git a/src/replication.c b/src/replication.c
index 07dc50edb..2b21b02d8 100644
--- a/src/replication.c
+++ b/src/replication.c
@@ -1035,39 +1035,46 @@ void sendBulkToSlave(connection *conn) {
}
}
- /* If the preamble was already transferred, send the RDB bulk data. */
+ /* If the preamble was already transferred, send the RDB bulk data.
+ * try to use sendfile system call if supported, unless tls is enabled.
+ * fallback to normal read+write otherwise. */
+ nwritten = 0;
#if HAVE_SENDFILE
- if ((nwritten = redis_sendfile(conn->fd,slave->repldbfd,
- slave->repldboff,PROTO_IOBUF_LEN)) == -1)
- {
- if (errno != EAGAIN) {
- serverLog(LL_WARNING,"Sendfile error sending DB to replica: %s",
- strerror(errno));
- freeClient(slave);
+ if (!server.tls_replication) {
+ if ((nwritten = redis_sendfile(conn->fd,slave->repldbfd,
+ slave->repldboff,PROTO_IOBUF_LEN)) == -1)
+ {
+ if (errno != EAGAIN) {
+ serverLog(LL_WARNING,"Sendfile error sending DB to replica: %s",
+ strerror(errno));
+ freeClient(slave);
+ }
+ return;
}
- return;
}
-#else
- ssize_t buflen;
- char buf[PROTO_IOBUF_LEN];
-
- lseek(slave->repldbfd,slave->repldboff,SEEK_SET);
- buflen = read(slave->repldbfd,buf,PROTO_IOBUF_LEN);
- if (buflen <= 0) {
- serverLog(LL_WARNING,"Read error sending DB to replica: %s",
- (buflen == 0) ? "premature EOF" : strerror(errno));
- freeClient(slave);
- return;
- }
- if ((nwritten = connWrite(conn,buf,buflen)) == -1) {
- if (connGetState(conn) != CONN_STATE_CONNECTED) {
- serverLog(LL_WARNING,"Write error sending DB to replica: %s",
- connGetLastError(conn));
+#endif
+ if (!nwritten) {
+ ssize_t buflen;
+ char buf[PROTO_IOBUF_LEN];
+
+ lseek(slave->repldbfd,slave->repldboff,SEEK_SET);
+ buflen = read(slave->repldbfd,buf,PROTO_IOBUF_LEN);
+ if (buflen <= 0) {
+ serverLog(LL_WARNING,"Read error sending DB to replica: %s",
+ (buflen == 0) ? "premature EOF" : strerror(errno));
freeClient(slave);
+ return;
+ }
+ if ((nwritten = connWrite(conn,buf,buflen)) == -1) {
+ if (connGetState(conn) != CONN_STATE_CONNECTED) {
+ serverLog(LL_WARNING,"Write error sending DB to replica: %s",
+ connGetLastError(conn));
+ freeClient(slave);
+ }
+ return;
}
- return;
}
-#endif
+
slave->repldboff += nwritten;
server.stat_net_output_bytes += nwritten;
if (slave->repldboff == slave->repldbsize) {