Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
585af7e2
Commit
585af7e2
authored
May 08, 2010
by
antirez
Browse files
minor changes to improve code readability
parent
242a64f3
Changes
1
Hide whitespace changes
Inline
Side-by-side
redis.c
View file @
585af7e2
...
...
@@ -3947,10 +3947,9 @@ static robj *rdbLoadObject(int type, FILE *fp) {
static int rdbLoad(char *filename) {
FILE *fp;
robj
*
keyobj
=
NULL
;
uint32_t dbid;
int type, retval, rdbver;
int
dataset_too_big
=
0
;
int
swap_all_values
= 0;
dict *d = server.db[0].dict;
redisDb *db = server.db+0;
char buf[1024];
...
...
@@ -3973,9 +3972,9 @@ static int rdbLoad(char *filename) {
return REDIS_ERR;
}
while(1) {
robj
*
o
;
expiretime
=
-
1
;
robj *key, *val;
expiretime = -1;
/* Read type. */
if ((type = rdbLoadType(fp)) == -1) goto eoferr;
if (type == REDIS_EXPIRETIME) {
...
...
@@ -3997,22 +3996,22 @@ static int rdbLoad(char *filename) {
continue;
}
/* Read key */
if
((
key
obj
=
rdbLoadStringObject
(
fp
))
==
NULL
)
goto
eoferr
;
if ((key = rdbLoadStringObject(fp)) == NULL) goto eoferr;
/* Read value */
if
((
o
=
rdbLoadObject
(
type
,
fp
))
==
NULL
)
goto
eoferr
;
if ((
val
= rdbLoadObject(type,fp)) == NULL) goto eoferr;
/* Add the new object in the hash table */
retval
=
dictAdd
(
d
,
key
obj
,
o
);
retval = dictAdd(d,key
,val
);
if (retval == DICT_ERR) {
redisLog
(
REDIS_WARNING
,
"Loading DB, duplicated key (%s) found! Unrecoverable error, exiting now."
,
key
obj
->
ptr
);
redisLog(REDIS_WARNING,"Loading DB, duplicated key (%s) found! Unrecoverable error, exiting now.", key->ptr);
exit(1);
}
loadedkeys++;
/* Set the expire time if needed */
if (expiretime != -1) {
setExpire
(
db
,
key
obj
,
expiretime
);
setExpire(db,key,expiretime);
/* Delete this key if already expired */
if (expiretime < now) {
deleteKey
(
db
,
key
obj
);
deleteKey(db,key);
continue; /* don't try to swap this out */
}
}
...
...
@@ -4024,15 +4023,15 @@ static int rdbLoad(char *filename) {
* Note that's important to check for this condition before resorting
* to random sampling, otherwise we may try to swap already
* swapped keys. */
if
(
dataset_too_big
)
{
dictEntry
*
de
=
dictFind
(
d
,
key
obj
);
if (
swap_all_values
) {
dictEntry *de = dictFind(d,key);
/* de may be NULL since the key already expired */
if (de) {
key
obj
=
dictGetEntryKey
(
de
);
o
=
dictGetEntryVal
(
de
);
key = dictGetEntryKey(de);
val
= dictGetEntryVal(de);
if
(
vmSwapObjectBlocking
(
key
obj
,
o
)
==
REDIS_OK
)
{
if (vmSwapObjectBlocking(key
,val
) == REDIS_OK) {
dictGetEntryVal(de) = NULL;
}
}
...
...
@@ -4041,19 +4040,18 @@ static int rdbLoad(char *filename) {
/* If we have still some hope of having some value fitting memory
* then we try random sampling. */
if
(
!
dataset_too_big
&&
server
.
vm_enabled
&&
(
loadedkeys
%
5000
)
==
0
)
{
if (!
swap_all_values
&& server.vm_enabled && (loadedkeys % 5000) == 0) {
while (zmalloc_used_memory() > server.vm_max_memory) {
if (vmSwapOneObjectBlocking() == REDIS_ERR) break;
}
if (zmalloc_used_memory() > server.vm_max_memory)
dataset_too_big
=
1
;
swap_all_values = 1; /* We are already using too much mem */
}
}
fclose(fp);
return REDIS_OK;
eoferr: /* unexpected end of file is handled here with a fatal exit */
if
(
keyobj
)
decrRefCount
(
keyobj
);
redisLog(REDIS_WARNING,"Short read or OOM loading DB. Unrecoverable error, aborting now.");
exit(1);
return REDIS_ERR; /* Just to avoid warning */
...
...
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