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
120b9ba8
Commit
120b9ba8
authored
Jan 03, 2011
by
antirez
Browse files
FLUSHALL / FLUSHDB for diskstore implemented
parent
d2033feb
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/db.c
View file @
120b9ba8
...
@@ -200,8 +200,6 @@ void signalModifiedKey(redisDb *db, robj *key) {
...
@@ -200,8 +200,6 @@ void signalModifiedKey(redisDb *db, robj *key) {
void
signalFlushedDb
(
int
dbid
)
{
void
signalFlushedDb
(
int
dbid
)
{
touchWatchedKeysOnFlush
(
dbid
);
touchWatchedKeysOnFlush
(
dbid
);
if
(
server
.
ds_enabled
)
dsFlushDb
(
dbid
);
}
}
/*-----------------------------------------------------------------------------
/*-----------------------------------------------------------------------------
...
@@ -213,6 +211,7 @@ void flushdbCommand(redisClient *c) {
...
@@ -213,6 +211,7 @@ void flushdbCommand(redisClient *c) {
signalFlushedDb
(
c
->
db
->
id
);
signalFlushedDb
(
c
->
db
->
id
);
dictEmpty
(
c
->
db
->
dict
);
dictEmpty
(
c
->
db
->
dict
);
dictEmpty
(
c
->
db
->
expires
);
dictEmpty
(
c
->
db
->
expires
);
if
(
server
.
ds_enabled
)
dsFlushDb
(
c
->
db
->
id
);
addReply
(
c
,
shared
.
ok
);
addReply
(
c
,
shared
.
ok
);
}
}
...
@@ -224,7 +223,10 @@ void flushallCommand(redisClient *c) {
...
@@ -224,7 +223,10 @@ void flushallCommand(redisClient *c) {
kill
(
server
.
bgsavechildpid
,
SIGKILL
);
kill
(
server
.
bgsavechildpid
,
SIGKILL
);
rdbRemoveTempFile
(
server
.
bgsavechildpid
);
rdbRemoveTempFile
(
server
.
bgsavechildpid
);
}
}
rdbSave
(
server
.
dbfilename
);
if
(
server
.
ds_enabled
)
dsFlushDb
(
-
1
);
else
rdbSave
(
server
.
dbfilename
);
server
.
dirty
++
;
server
.
dirty
++
;
}
}
...
...
src/debug.c
View file @
120b9ba8
...
@@ -262,10 +262,12 @@ void _redisAssert(char *estr, char *file, int line) {
...
@@ -262,10 +262,12 @@ void _redisAssert(char *estr, char *file, int line) {
}
}
void
_redisPanic
(
char
*
msg
,
char
*
file
,
int
line
)
{
void
_redisPanic
(
char
*
msg
,
char
*
file
,
int
line
)
{
redisLog
(
REDIS_WARNING
,
"------------------------------------------------"
);
redisLog
(
REDIS_WARNING
,
"!!! Software Failure. Press left mouse button to continue"
);
redisLog
(
REDIS_WARNING
,
"!!! Software Failure. Press left mouse button to continue"
);
redisLog
(
REDIS_WARNING
,
"Guru Meditation: %s #%s:%d"
,
msg
,
file
,
line
);
redisLog
(
REDIS_WARNING
,
"Guru Meditation: %s #%s:%d"
,
msg
,
file
,
line
);
#ifdef HAVE_BACKTRACE
#ifdef HAVE_BACKTRACE
redisLog
(
REDIS_WARNING
,
"(forcing SIGSEGV in order to print the stack trace)"
);
redisLog
(
REDIS_WARNING
,
"(forcing SIGSEGV in order to print the stack trace)"
);
redisLog
(
REDIS_WARNING
,
"------------------------------------------------"
);
*
((
char
*
)
-
1
)
=
'x'
;
*
((
char
*
)
-
1
)
=
'x'
;
#endif
#endif
}
}
src/diskstore.c
View file @
120b9ba8
...
@@ -74,6 +74,7 @@
...
@@ -74,6 +74,7 @@
#include <fcntl.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/stat.h>
#include <dirent.h>
int
create256dir
(
char
*
prefix
)
{
int
create256dir
(
char
*
prefix
)
{
char
buf
[
1024
];
char
buf
[
1024
];
...
@@ -270,5 +271,51 @@ int dsExists(redisDb *db, robj *key) {
...
@@ -270,5 +271,51 @@ int dsExists(redisDb *db, robj *key) {
return
access
(
buf
,
R_OK
)
==
0
;
return
access
(
buf
,
R_OK
)
==
0
;
}
}
int
dsFlushDb
(
int
dbid
)
{
void
dsFlushOneDir
(
char
*
path
,
int
dbid
)
{
DIR
*
dir
;
struct
dirent
*
dp
,
de
;
dir
=
opendir
(
path
);
if
(
dir
==
NULL
)
{
redisLog
(
REDIS_WARNING
,
"Disk store can't open dir %s: %s"
,
path
,
strerror
(
errno
));
redisPanic
(
"Unrecoverable Disk store errore. Existing."
);
}
while
(
1
)
{
readdir_r
(
dir
,
&
de
,
&
dp
);
if
(
dp
==
NULL
)
break
;
if
(
dp
->
d_name
[
0
]
==
'.'
)
continue
;
/* Check if we need to remove this entry accordingly to the
* DB number */
if
(
dbid
!=
-
1
)
{
char
id
[
64
];
char
*
p
=
strchr
(
dp
->
d_name
,
'_'
);
int
len
=
(
p
-
dp
->
d_name
);
redisAssert
(
p
!=
NULL
&&
len
<
64
);
memcpy
(
id
,
dp
->
d_name
,
len
);
id
[
len
]
=
'\0'
;
if
(
atoi
(
id
)
!=
dbid
)
continue
;
/* skip this file */
}
if
(
unlink
(
path
)
==
-
1
)
{
redisLog
(
REDIS_WARNING
,
"Can't unlink %s: %s"
,
path
,
strerror
(
errno
));
redisPanic
(
"Unrecoverable Disk store errore. Existing."
);
}
}
closedir
(
dir
);
}
void
dsFlushDb
(
int
dbid
)
{
char
buf
[
1024
];
int
j
,
i
;
redisLog
(
REDIS_NOTICE
,
"Flushing diskstore DB (%d)"
,
dbid
);
for
(
j
=
0
;
j
<
256
;
j
++
)
{
for
(
i
=
0
;
i
<
256
;
i
++
)
{
snprintf
(
buf
,
1024
,
"%s/%02x/%02x"
,
server
.
ds_path
,
j
,
i
);
dsFlushOneDir
(
buf
,
dbid
);
}
}
}
}
src/redis.h
View file @
120b9ba8
...
@@ -791,7 +791,7 @@ int dsSet(redisDb *db, robj *key, robj *val);
...
@@ -791,7 +791,7 @@ int dsSet(redisDb *db, robj *key, robj *val);
robj
*
dsGet
(
redisDb
*
db
,
robj
*
key
,
time_t
*
expire
);
robj
*
dsGet
(
redisDb
*
db
,
robj
*
key
,
time_t
*
expire
);
int
dsDel
(
redisDb
*
db
,
robj
*
key
);
int
dsDel
(
redisDb
*
db
,
robj
*
key
);
int
dsExists
(
redisDb
*
db
,
robj
*
key
);
int
dsExists
(
redisDb
*
db
,
robj
*
key
);
int
dsFlushDb
(
int
dbid
);
void
dsFlushDb
(
int
dbid
);
/* Disk Store Cache */
/* Disk Store Cache */
void
dsInit
(
void
);
void
dsInit
(
void
);
...
...
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