Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
7e220a96
Commit
7e220a96
authored
Jul 01, 2016
by
antirez
Browse files
In Redis RDB check: more details in error reportings.
parent
e697153d
Changes
1
Show whitespace changes
Inline
Side-by-side
src/rdb.c
View file @
7e220a96
...
...
@@ -41,22 +41,29 @@
#include <sys/stat.h>
#include <sys/param.h>
#define rdbExitReportCorruptRDB(
reason
) rdbCheckThenExit(
reason, __LINE__);
#define rdbExitReportCorruptRDB(
...
) rdbCheckThenExit(
__LINE__,__VA_ARGS__)
extern int rdbCheckMode;
void rdbCheckError(const char *fmt, ...);
void rdbCheckSetError(const char *fmt, ...);
void
rdbCheckThenExit
(
char
*
reason
,
int
where
)
{
void rdbCheckThenExit(int linenum, char *reason, ...) {
va_list ap;
char msg[1024];
int len;
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
,
"Corrupt RDB detected at rdb.c:%d (%s). "
"Running 'redis-check-rdb %s'"
,
where
,
reason
,
server
.
rdb_filename
);
serverLog(LL_WARNING, "%s", msg);
char *argv[2] = {"",server.rdb_filename};
redis_check_rdb_main(2,argv);
} else {
rdbCheckError
(
"Internal error in RDB reading function at rdb.c:%d (%s)"
,
where
,
reason
);
rdbCheckError("%s",msg);
}
exit(1);
}
...
...
@@ -172,7 +179,8 @@ int rdbLoadLenByRef(rio *rdb, int *isencoded, uint64_t *lenptr) {
if (rioRead(rdb,&len,8) == 0) return -1;
*lenptr = ntohu64(len);
} else {
rdbExitReportCorruptRDB
(
"Unknown length encoding in rdbLoadLen()"
);
rdbExitReportCorruptRDB(
"Unknown length encoding %d in rdbLoadLen()",type);
return -1; /* Never reached. */
}
return 0;
...
...
@@ -240,7 +248,7 @@ void *rdbLoadIntegerObject(rio *rdb, int enctype, int flags, size_t *lenptr) {
val = (int32_t)v;
} else {
val = 0; /* anti-warning */
rdbExitReportCorruptRDB
(
"Unknown RDB integer encoding type
"
);
rdbExitReportCorruptRDB("Unknown RDB integer encoding type
%d",enctype
);
}
if (plain || sds) {
char buf[LONG_STR_SIZE], *p;
...
...
@@ -457,7 +465,7 @@ void *rdbGenericLoadStringObject(rio *rdb, int flags, size_t *lenptr) {
case RDB_ENC_LZF:
return rdbLoadLzfStringObject(rdb,flags,lenptr);
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);
break;
default:
rdbExitReportCorruptRDB
(
"Unknown encoding
"
);
rdbExitReportCorruptRDB("Unknown
RDB
encoding
type %d",rdbtype
);
break;
}
} else if (rdbtype == RDB_TYPE_MODULE) {
...
...
@@ -1313,7 +1321,7 @@ robj *rdbLoadObject(int rdbtype, rio *rdb) {
}
o = createModuleObject(mt,ptr);
} else {
rdbExitReportCorruptRDB
(
"Unknown
object type"
);
rdbExitReportCorruptRDB("Unknown
RDB encoding type %d",rdbtype
);
}
return o;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment