mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 17:10:50 +00:00
In Redis RDB check: more details in error reportings.
This commit is contained in:
parent
e697153d18
commit
7e220a964a
34
src/rdb.c
34
src/rdb.c
@ -41,22 +41,29 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
|
||||||
#define rdbExitReportCorruptRDB(reason) rdbCheckThenExit(reason, __LINE__);
|
#define rdbExitReportCorruptRDB(...) rdbCheckThenExit(__LINE__,__VA_ARGS__)
|
||||||
|
|
||||||
extern int rdbCheckMode;
|
extern int rdbCheckMode;
|
||||||
void rdbCheckError(const char *fmt, ...);
|
void rdbCheckError(const char *fmt, ...);
|
||||||
void rdbCheckSetError(const char *fmt, ...);
|
void rdbCheckSetError(const char *fmt, ...);
|
||||||
|
|
||||||
void rdbCheckThenExit(char *reason, int where) {
|
void rdbCheckThenExit(int linenum, char *reason, ...) {
|
||||||
if (!rdbCheckMode) {
|
va_list ap;
|
||||||
serverLog(LL_WARNING, "Corrupt RDB detected at rdb.c:%d (%s). "
|
char msg[1024];
|
||||||
"Running 'redis-check-rdb %s'",
|
int len;
|
||||||
where, reason, server.rdb_filename);
|
|
||||||
|
len = snprintf(msg,sizeof(msg),
|
||||||
|
"Internal error in RDB reading function at rdb.c:%d -> ", linenum);
|
||||||
|
va_start(ap,reason);
|
||||||
|
vsnprintf(msg+len,sizeof(msg)-len,reason,ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
if (!rdbCheckMode) {
|
||||||
|
serverLog(LL_WARNING, "%s", msg);
|
||||||
char *argv[2] = {"",server.rdb_filename};
|
char *argv[2] = {"",server.rdb_filename};
|
||||||
redis_check_rdb_main(2,argv);
|
redis_check_rdb_main(2,argv);
|
||||||
} else {
|
} else {
|
||||||
rdbCheckError("Internal error in RDB reading function at rdb.c:%d (%s)",
|
rdbCheckError("%s",msg);
|
||||||
where, reason);
|
|
||||||
}
|
}
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
@ -172,7 +179,8 @@ int rdbLoadLenByRef(rio *rdb, int *isencoded, uint64_t *lenptr) {
|
|||||||
if (rioRead(rdb,&len,8) == 0) return -1;
|
if (rioRead(rdb,&len,8) == 0) return -1;
|
||||||
*lenptr = ntohu64(len);
|
*lenptr = ntohu64(len);
|
||||||
} else {
|
} else {
|
||||||
rdbExitReportCorruptRDB("Unknown length encoding in rdbLoadLen()");
|
rdbExitReportCorruptRDB(
|
||||||
|
"Unknown length encoding %d in rdbLoadLen()",type);
|
||||||
return -1; /* Never reached. */
|
return -1; /* Never reached. */
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -240,7 +248,7 @@ void *rdbLoadIntegerObject(rio *rdb, int enctype, int flags, size_t *lenptr) {
|
|||||||
val = (int32_t)v;
|
val = (int32_t)v;
|
||||||
} else {
|
} else {
|
||||||
val = 0; /* anti-warning */
|
val = 0; /* anti-warning */
|
||||||
rdbExitReportCorruptRDB("Unknown RDB integer encoding type");
|
rdbExitReportCorruptRDB("Unknown RDB integer encoding type %d",enctype);
|
||||||
}
|
}
|
||||||
if (plain || sds) {
|
if (plain || sds) {
|
||||||
char buf[LONG_STR_SIZE], *p;
|
char buf[LONG_STR_SIZE], *p;
|
||||||
@ -457,7 +465,7 @@ void *rdbGenericLoadStringObject(rio *rdb, int flags, size_t *lenptr) {
|
|||||||
case RDB_ENC_LZF:
|
case RDB_ENC_LZF:
|
||||||
return rdbLoadLzfStringObject(rdb,flags,lenptr);
|
return rdbLoadLzfStringObject(rdb,flags,lenptr);
|
||||||
default:
|
default:
|
||||||
rdbExitReportCorruptRDB("Unknown RDB encoding type");
|
rdbExitReportCorruptRDB("Unknown RDB string encoding type %d",len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1288,7 +1296,7 @@ robj *rdbLoadObject(int rdbtype, rio *rdb) {
|
|||||||
hashTypeConvert(o, OBJ_ENCODING_HT);
|
hashTypeConvert(o, OBJ_ENCODING_HT);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
rdbExitReportCorruptRDB("Unknown encoding");
|
rdbExitReportCorruptRDB("Unknown RDB encoding type %d",rdbtype);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (rdbtype == RDB_TYPE_MODULE) {
|
} else if (rdbtype == RDB_TYPE_MODULE) {
|
||||||
@ -1313,7 +1321,7 @@ robj *rdbLoadObject(int rdbtype, rio *rdb) {
|
|||||||
}
|
}
|
||||||
o = createModuleObject(mt,ptr);
|
o = createModuleObject(mt,ptr);
|
||||||
} else {
|
} else {
|
||||||
rdbExitReportCorruptRDB("Unknown object type");
|
rdbExitReportCorruptRDB("Unknown RDB encoding type %d",rdbtype);
|
||||||
}
|
}
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user