mirror of
https://github.com/fluencelabs/redis
synced 2025-04-07 10:01:04 +00:00
Exit with Fatal error at startup if the RDB file signature or version is wrong.
Ref: issue #103
This commit is contained in:
parent
2e63cfe20d
commit
6d61e5bf5b
@ -947,19 +947,24 @@ int rdbLoad(char *filename) {
|
|||||||
rio rdb;
|
rio rdb;
|
||||||
|
|
||||||
fp = fopen(filename,"r");
|
fp = fopen(filename,"r");
|
||||||
if (!fp) return REDIS_ERR;
|
if (!fp) {
|
||||||
|
errno = ENOENT;
|
||||||
|
return REDIS_ERR;
|
||||||
|
}
|
||||||
rioInitWithFile(&rdb,fp);
|
rioInitWithFile(&rdb,fp);
|
||||||
if (rioRead(&rdb,buf,9) == 0) goto eoferr;
|
if (rioRead(&rdb,buf,9) == 0) goto eoferr;
|
||||||
buf[9] = '\0';
|
buf[9] = '\0';
|
||||||
if (memcmp(buf,"REDIS",5) != 0) {
|
if (memcmp(buf,"REDIS",5) != 0) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
redisLog(REDIS_WARNING,"Wrong signature trying to load DB from file");
|
redisLog(REDIS_WARNING,"Wrong signature trying to load DB from file");
|
||||||
|
errno = EINVAL;
|
||||||
return REDIS_ERR;
|
return REDIS_ERR;
|
||||||
}
|
}
|
||||||
rdbver = atoi(buf+5);
|
rdbver = atoi(buf+5);
|
||||||
if (rdbver < 1 || rdbver > 2) {
|
if (rdbver < 1 || rdbver > 2) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
redisLog(REDIS_WARNING,"Can't handle RDB format version %d",rdbver);
|
redisLog(REDIS_WARNING,"Can't handle RDB format version %d",rdbver);
|
||||||
|
errno = EINVAL;
|
||||||
return REDIS_ERR;
|
return REDIS_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1802,8 +1802,13 @@ int main(int argc, char **argv) {
|
|||||||
if (loadAppendOnlyFile(server.appendfilename) == REDIS_OK)
|
if (loadAppendOnlyFile(server.appendfilename) == REDIS_OK)
|
||||||
redisLog(REDIS_NOTICE,"DB loaded from append only file: %.3f seconds",(float)(ustime()-start)/1000000);
|
redisLog(REDIS_NOTICE,"DB loaded from append only file: %.3f seconds",(float)(ustime()-start)/1000000);
|
||||||
} else {
|
} else {
|
||||||
if (rdbLoad(server.dbfilename) == REDIS_OK)
|
if (rdbLoad(server.dbfilename) == REDIS_OK) {
|
||||||
redisLog(REDIS_NOTICE,"DB loaded from disk: %.3f seconds",(float)(ustime()-start)/1000000);
|
redisLog(REDIS_NOTICE,"DB loaded from disk: %.3f seconds",
|
||||||
|
(float)(ustime()-start)/1000000);
|
||||||
|
} else if (errno != ENOENT) {
|
||||||
|
redisLog(REDIS_WARNING,"Fatal error loading the DB. Exiting.");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (server.ipfd > 0)
|
if (server.ipfd > 0)
|
||||||
redisLog(REDIS_NOTICE,"The server is now ready to accept connections on port %d", server.port);
|
redisLog(REDIS_NOTICE,"The server is now ready to accept connections on port %d", server.port);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user