MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / getRDB

Function getRDB

src/redis-cli.c:6285–6377  ·  view source on GitHub ↗

This function implements --rdb, so it uses the replication protocol in order * to fetch the RDB file from a remote server. */

Source from the content-addressed store, hash-verified

6283/* This function implements --rdb, so it uses the replication protocol in order
6284 * to fetch the RDB file from a remote server. */
6285static void getRDB(clusterManagerNode *node) {
6286 int fd;
6287 redisContext *s;
6288 char *filename;
6289 if (node != NULL) {
6290 assert(node->context);
6291 s = node->context;
6292 filename = clusterManagerGetNodeRDBFilename(node);
6293 } else {
6294 s = context;
6295 filename = config.rdb_filename;
6296 }
6297 static char eofmark[RDB_EOF_MARK_SIZE];
6298 static char lastbytes[RDB_EOF_MARK_SIZE];
6299 static int usemark = 0;
6300 unsigned long long payload = sendSync(s, eofmark);
6301 char buf[4096];
6302
6303 if (payload == 0) {
6304 payload = ULLONG_MAX;
6305 memset(lastbytes,0,RDB_EOF_MARK_SIZE);
6306 usemark = 1;
6307 fprintf(stderr,"SYNC sent to master, writing bytes of bulk transfer "
6308 "until EOF marker to '%s'\n", filename);
6309 } else {
6310 fprintf(stderr,"SYNC sent to master, writing %llu bytes to '%s'\n",
6311 payload, filename);
6312 }
6313
6314 int write_to_stdout = !strcmp(filename,"-");
6315 /* Write to file. */
6316 if (write_to_stdout) {
6317 fd = STDOUT_FILENO;
6318 } else {
6319 fd = open(filename, O_CREAT|O_WRONLY, 0644);
6320 if (fd == -1) {
6321 fprintf(stderr, "Error opening '%s': %s\n", filename,
6322 strerror(errno));
6323 exit(1);
6324 }
6325 }
6326
6327 while(payload) {
6328 ssize_t nread, nwritten;
6329
6330 nread = readConn(s,buf,(payload > sizeof(buf)) ? sizeof(buf) : payload);
6331 if (nread <= 0) {
6332 fprintf(stderr,"I/O Error reading RDB payload from socket\n");
6333 exit(1);
6334 }
6335 nwritten = write(fd, buf, nread);
6336 if (nwritten != nread) {
6337 fprintf(stderr,"Error writing data to file: %s\n",
6338 (nwritten == -1) ? strerror(errno) : "short write");
6339 exit(1);
6340 }
6341 payload -= nread;
6342

Callers 2

mainFunction · 0.85

Calls 5

sendSyncFunction · 0.85
readConnFunction · 0.85
redisFreeFunction · 0.85
sdsfreeFunction · 0.85

Tested by

no test coverage detected