MCPcopy Create free account
hub / github.com/F-Stack/f-stack / sendBulkToSlave

Function sendBulkToSlave

app/redis-6.2.6/src/replication.c:1096–1149  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1094}
1095
1096void sendBulkToSlave(connection *conn) {
1097 client *slave = connGetPrivateData(conn);
1098 char buf[PROTO_IOBUF_LEN];
1099 ssize_t nwritten, buflen;
1100
1101 /* Before sending the RDB file, we send the preamble as configured by the
1102 * replication process. Currently the preamble is just the bulk count of
1103 * the file in the form "$<length>\r\n". */
1104 if (slave->replpreamble) {
1105 nwritten = connWrite(conn,slave->replpreamble,sdslen(slave->replpreamble));
1106 if (nwritten == -1) {
1107 serverLog(LL_VERBOSE,
1108 "Write error sending RDB preamble to replica: %s",
1109 connGetLastError(conn));
1110 freeClient(slave);
1111 return;
1112 }
1113 atomicIncr(server.stat_net_output_bytes, nwritten);
1114 sdsrange(slave->replpreamble,nwritten,-1);
1115 if (sdslen(slave->replpreamble) == 0) {
1116 sdsfree(slave->replpreamble);
1117 slave->replpreamble = NULL;
1118 /* fall through sending data. */
1119 } else {
1120 return;
1121 }
1122 }
1123
1124 /* If the preamble was already transferred, send the RDB bulk data. */
1125 lseek(slave->repldbfd,slave->repldboff,SEEK_SET);
1126 buflen = read(slave->repldbfd,buf,PROTO_IOBUF_LEN);
1127 if (buflen <= 0) {
1128 serverLog(LL_WARNING,"Read error sending DB to replica: %s",
1129 (buflen == 0) ? "premature EOF" : strerror(errno));
1130 freeClient(slave);
1131 return;
1132 }
1133 if ((nwritten = connWrite(conn,buf,buflen)) == -1) {
1134 if (connGetState(conn) != CONN_STATE_CONNECTED) {
1135 serverLog(LL_WARNING,"Write error sending DB to replica: %s",
1136 connGetLastError(conn));
1137 freeClient(slave);
1138 }
1139 return;
1140 }
1141 slave->repldboff += nwritten;
1142 atomicIncr(server.stat_net_output_bytes, nwritten);
1143 if (slave->repldboff == slave->repldbsize) {
1144 close(slave->repldbfd);
1145 slave->repldbfd = -1;
1146 connSetWriteHandler(slave->conn,NULL);
1147 putSlaveOnline(slave);
1148 }
1149}
1150
1151/* Remove one write handler from the list of connections waiting to be writable
1152 * during rdb pipe transfer. */

Callers

nothing calls this directly

Calls 12

connGetPrivateDataFunction · 0.85
connWriteFunction · 0.85
sdslenFunction · 0.85
connGetLastErrorFunction · 0.85
sdsrangeFunction · 0.85
sdsfreeFunction · 0.85
connGetStateFunction · 0.85
connSetWriteHandlerFunction · 0.85
putSlaveOnlineFunction · 0.85
freeClientFunction · 0.70
readFunction · 0.70
closeFunction · 0.70

Tested by

no test coverage detected