Unverified Commit 00097bf4 authored by Binbin's avatar Binbin Committed by GitHub
Browse files

Change the return value of rdbLoad function to enums (#11039)

The reason we do this is because in #11036, we added error
log message when failing to open RDB file for reading.
In loadDdataFromDisk we call rdbLoad and also check errno,
now the logging corrupts errno (reported in alpine daily).

It is not safe to rely on errno as we do today, so we change
the return value of rdbLoad function to enums, like we have
when loading an AOF.
parent 6f0a27e3
...@@ -567,7 +567,7 @@ NULL ...@@ -567,7 +567,7 @@ NULL
protectClient(c); protectClient(c);
int ret = rdbLoad(server.rdb_filename,NULL,flags); int ret = rdbLoad(server.rdb_filename,NULL,flags);
unprotectClient(c); unprotectClient(c);
if (ret != C_OK) { if (ret != RDB_OK) {
addReplyError(c,"Error trying to load the RDB dump"); addReplyError(c,"Error trying to load the RDB dump");
return; return;
} }
......
...@@ -3256,8 +3256,9 @@ int rdbLoad(char *filename, rdbSaveInfo *rsi, int rdbflags) { ...@@ -3256,8 +3256,9 @@ int rdbLoad(char *filename, rdbSaveInfo *rsi, int rdbflags) {
fp = fopen(filename, "r"); fp = fopen(filename, "r");
if (fp == NULL) { if (fp == NULL) {
retval = (errno == ENOENT) ? RDB_NOT_EXIST : RDB_FAILED;
serverLog(LL_WARNING,"Fatal error: can't open the RDB file %s for reading: %s", filename, strerror(errno)); serverLog(LL_WARNING,"Fatal error: can't open the RDB file %s for reading: %s", filename, strerror(errno));
return C_ERR; return retval;
} }
if (fstat(fileno(fp), &sb) == -1) if (fstat(fileno(fp), &sb) == -1)
...@@ -3270,7 +3271,7 @@ int rdbLoad(char *filename, rdbSaveInfo *rsi, int rdbflags) { ...@@ -3270,7 +3271,7 @@ int rdbLoad(char *filename, rdbSaveInfo *rsi, int rdbflags) {
fclose(fp); fclose(fp);
stopLoading(retval==C_OK); stopLoading(retval==C_OK);
return retval; return (retval==C_OK) ? RDB_OK : RDB_FAILED;
} }
/* A background saving child (BGSAVE) terminated its work. Handle this. /* A background saving child (BGSAVE) terminated its work. Handle this.
......
...@@ -2161,7 +2161,7 @@ void readSyncBulkPayload(connection *conn) { ...@@ -2161,7 +2161,7 @@ void readSyncBulkPayload(connection *conn) {
return; return;
} }
if (rdbLoad(server.rdb_filename,&rsi,RDBFLAGS_REPLICATION) != C_OK) { if (rdbLoad(server.rdb_filename,&rsi,RDBFLAGS_REPLICATION) != RDB_OK) {
serverLog(LL_WARNING, serverLog(LL_WARNING,
"Failed trying to load the MASTER synchronization " "Failed trying to load the MASTER synchronization "
"DB from disk: %s", strerror(errno)); "DB from disk: %s", strerror(errno));
......
...@@ -6515,7 +6515,8 @@ void loadDataFromDisk(void) { ...@@ -6515,7 +6515,8 @@ void loadDataFromDisk(void) {
createReplicationBacklog(); createReplicationBacklog();
rdb_flags |= RDBFLAGS_FEED_REPL; rdb_flags |= RDBFLAGS_FEED_REPL;
} }
if (rdbLoad(server.rdb_filename,&rsi,rdb_flags) == C_OK) { int rdb_load_ret = rdbLoad(server.rdb_filename, &rsi, rdb_flags);
if (rdb_load_ret == RDB_OK) {
serverLog(LL_NOTICE,"DB loaded from disk: %.3f seconds", serverLog(LL_NOTICE,"DB loaded from disk: %.3f seconds",
(float)(ustime()-start)/1000000); (float)(ustime()-start)/1000000);
...@@ -6550,7 +6551,7 @@ void loadDataFromDisk(void) { ...@@ -6550,7 +6551,7 @@ void loadDataFromDisk(void) {
server.repl_no_slaves_since = time(NULL); server.repl_no_slaves_since = time(NULL);
} }
} }
} else if (errno != ENOENT) { } else if (rdb_load_ret != RDB_NOT_EXIST) {
serverLog(LL_WARNING,"Fatal error loading the DB: %s. Exiting.",strerror(errno)); serverLog(LL_WARNING,"Fatal error loading the DB: %s. Exiting.",strerror(errno));
exit(1); exit(1);
} }
......
...@@ -301,6 +301,11 @@ extern int configOOMScoreAdjValuesDefaults[CONFIG_OOM_COUNT]; ...@@ -301,6 +301,11 @@ extern int configOOMScoreAdjValuesDefaults[CONFIG_OOM_COUNT];
#define AOF_FAILED 4 #define AOF_FAILED 4
#define AOF_TRUNCATED 5 #define AOF_TRUNCATED 5
/* RDB return values for rdbLoad. */
#define RDB_OK 0
#define RDB_NOT_EXIST 1 /* RDB file doesn't exist. */
#define RDB_FAILED 2 /* Failed to load the RDB file. */
/* Command doc flags */ /* Command doc flags */
#define CMD_DOC_NONE 0 #define CMD_DOC_NONE 0
#define CMD_DOC_DEPRECATED (1<<0) /* Command is deprecated */ #define CMD_DOC_DEPRECATED (1<<0) /* Command is deprecated */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment