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.
This commit is contained in:
Binbin 2022-07-26 20:13:13 +08:00 committed by GitHub
parent 6f0a27e38e
commit 00097bf4aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 13 additions and 6 deletions

View File

@ -567,7 +567,7 @@ NULL
protectClient(c);
int ret = rdbLoad(server.rdb_filename,NULL,flags);
unprotectClient(c);
if (ret != C_OK) {
if (ret != RDB_OK) {
addReplyError(c,"Error trying to load the RDB dump");
return;
}

View File

@ -3256,8 +3256,9 @@ int rdbLoad(char *filename, rdbSaveInfo *rsi, int rdbflags) {
fp = fopen(filename, "r");
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));
return C_ERR;
return retval;
}
if (fstat(fileno(fp), &sb) == -1)
@ -3270,7 +3271,7 @@ int rdbLoad(char *filename, rdbSaveInfo *rsi, int rdbflags) {
fclose(fp);
stopLoading(retval==C_OK);
return retval;
return (retval==C_OK) ? RDB_OK : RDB_FAILED;
}
/* A background saving child (BGSAVE) terminated its work. Handle this.

View File

@ -2161,7 +2161,7 @@ void readSyncBulkPayload(connection *conn) {
return;
}
if (rdbLoad(server.rdb_filename,&rsi,RDBFLAGS_REPLICATION) != C_OK) {
if (rdbLoad(server.rdb_filename,&rsi,RDBFLAGS_REPLICATION) != RDB_OK) {
serverLog(LL_WARNING,
"Failed trying to load the MASTER synchronization "
"DB from disk: %s", strerror(errno));

View File

@ -6515,7 +6515,8 @@ void loadDataFromDisk(void) {
createReplicationBacklog();
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",
(float)(ustime()-start)/1000000);
@ -6550,7 +6551,7 @@ void loadDataFromDisk(void) {
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));
exit(1);
}

View File

@ -301,6 +301,11 @@ extern int configOOMScoreAdjValuesDefaults[CONFIG_OOM_COUNT];
#define AOF_FAILED 4
#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 */
#define CMD_DOC_NONE 0
#define CMD_DOC_DEPRECATED (1<<0) /* Command is deprecated */