Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
5b8ce853
R
redis
项目概览
xindoo
/
redis
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5b8ce853
编写于
1月 07, 2011
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more work towards diskstore bgsave
上级
36c17a53
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
34 addition
and
11 deletion
+34
-11
TODO
TODO
+3
-0
src/aof.c
src/aof.c
+1
-1
src/diskstore.c
src/diskstore.c
+21
-4
src/rdb.c
src/rdb.c
+4
-3
src/redis.c
src/redis.c
+3
-2
src/redis.h
src/redis.h
+2
-1
未找到文件。
TODO
浏览文件 @
5b8ce853
...
...
@@ -17,6 +17,9 @@ DISKSTORE TODO
* Implement MULTI/EXEC as transaction abstract API to diskstore.c, with transaction_start, transaction_end, and a journal to recover.
* Stop BGSAVE thread on shutdown and any other condition where the child is killed during normal bgsave.
* Use a mutex to log on the file, so that we don't get overlapping messages, or even better make sure to use a single write against it.
* Fix RANDOMKEY to really do something interesting
* Fix DBSIZE to really do something interesting
* Add a DEBUG command to check if an entry is or not in memory currently
REPLICATION
===========
...
...
src/aof.c
浏览文件 @
5b8ce853
...
...
@@ -633,7 +633,7 @@ void backgroundRewriteDoneHandler(int exitcode, int bysignal) {
}
else
{
redisLog
(
REDIS_WARNING
,
"Background append only file rewriting terminated by signal %d"
,
bysi
t
nal
);
bysi
g
nal
);
}
cleanup:
sdsfree
(
server
.
bgrewritebuf
);
...
...
src/diskstore.c
浏览文件 @
5b8ce853
...
...
@@ -349,10 +349,17 @@ void dsFlushDb(int dbid) {
}
}
void
dsRdbSaveSetState
(
int
state
)
{
pthread_mutex_lock
(
&
server
.
bgsavethread_mutex
);
server
.
bgsavethread_state
=
state
;
pthread_mutex_unlock
(
&
server
.
bgsavethread_mutex
);
}
void
*
dsRdbSave_thread
(
void
*
arg
)
{
char
tmpfile
[
256
],
*
filename
=
(
char
*
)
arg
;
int
j
,
i
;
time_t
now
=
time
(
NULL
);
FILE
*
fp
;
/* Change state to ACTIVE, to signal there is a saving thead working. */
pthread_mutex_lock
(
&
server
.
bgsavethread_mutex
);
...
...
@@ -362,11 +369,16 @@ void *dsRdbSave_thread(void *arg) {
snprintf
(
tmpfile
,
256
,
"temp-%d.rdb"
,
(
int
)
getpid
());
fp
=
fopen
(
tmpfile
,
"w"
);
if
(
!
fp
)
{
redisLog
(
REDIS_WARNING
,
"Failed saving the DB: %s"
,
strerror
(
errno
));
return
REDIS_ERR
;
redisLog
(
REDIS_WARNING
,
"Failed opening .rdb for saving: %s"
,
strerror
(
errno
));
dsRdbSaveSetState
(
REDIS_BGSAVE_THREAD_DONE_ERR
);
return
NULL
;
}
if
(
fwrite
(
"REDIS0001"
,
9
,
1
,
fp
)
==
0
)
goto
werr
;
sleep
(
5
);
#if 0
/* Scan all diskstore dirs looking for keys */
for (j = 0; j < 256; j++) {
for (i = 0; i < 256; i++) {
...
...
@@ -377,6 +389,7 @@ void *dsRdbSave_thread(void *arg) {
if (rdbSaveLen(fp,j) == -1) goto werr;
}
}
#endif
/* Make sure data will not remain on the OS's output buffers */
fflush
(
fp
);
...
...
@@ -389,16 +402,20 @@ void *dsRdbSave_thread(void *arg) {
if
(
rename
(
tmpfile
,
filename
)
==
-
1
)
{
redisLog
(
REDIS_WARNING
,
"Error moving temp DB file on the final destination: %s"
,
strerror
(
errno
));
unlink
(
tmpfile
);
return
REDIS_ERR
;
dsRdbSaveSetState
(
REDIS_BGSAVE_THREAD_DONE_ERR
);
return
NULL
;
}
redisLog
(
REDIS_NOTICE
,
"DB saved on disk"
);
return
REDIS_OK
;
dsRdbSaveSetState
(
REDIS_BGSAVE_THREAD_DONE_OK
);
return
NULL
;
werr:
zfree
(
filename
);
fclose
(
fp
);
unlink
(
tmpfile
);
dsRdbSaveSetState
(
REDIS_BGSAVE_THREAD_DONE_ERR
);
redisLog
(
REDIS_WARNING
,
"Write error saving DB on disk: %s"
,
strerror
(
errno
));
return
NULL
;
}
int
dsRdbSave
(
char
*
filename
)
{
...
...
src/rdb.c
浏览文件 @
5b8ce853
...
...
@@ -437,7 +437,8 @@ int rdbSave(char *filename) {
snprintf
(
tmpfile
,
256
,
"temp-%d.rdb"
,
(
int
)
getpid
());
fp
=
fopen
(
tmpfile
,
"w"
);
if
(
!
fp
)
{
redisLog
(
REDIS_WARNING
,
"Failed saving the DB: %s"
,
strerror
(
errno
));
redisLog
(
REDIS_WARNING
,
"Failed opening .rdb for saving: %s"
,
strerror
(
errno
));
return
REDIS_ERR
;
}
if
(
fwrite
(
"REDIS0001"
,
9
,
1
,
fp
)
==
0
)
goto
werr
;
...
...
@@ -973,7 +974,7 @@ void backgroundSaveDoneHandler(int exitcode, int bysignal) {
}
void
saveCommand
(
redisClient
*
c
)
{
if
(
server
.
bgsavechildpid
!=
-
1
||
server
.
bgsavethread
!=
(
pthread
-
t
)
-
1
)
{
if
(
server
.
bgsavechildpid
!=
-
1
||
server
.
bgsavethread
!=
(
pthread
_
t
)
-
1
)
{
addReplyError
(
c
,
"Background save already in progress"
);
return
;
}
...
...
@@ -985,7 +986,7 @@ void saveCommand(redisClient *c) {
}
void
bgsaveCommand
(
redisClient
*
c
)
{
if
(
server
.
bgsavechildpid
!=
-
1
||
server
.
bgsavethread
!=
(
pthread
-
t
)
-
1
)
{
if
(
server
.
bgsavechildpid
!=
-
1
||
server
.
bgsavethread
!=
(
pthread
_
t
)
-
1
)
{
addReplyError
(
c
,
"Background save already in progress"
);
return
;
}
...
...
src/redis.c
浏览文件 @
5b8ce853
...
...
@@ -608,10 +608,11 @@ int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {
state
=
server
.
bgsavethread_state
;
pthread_mutex_unlock
(
&
server
.
bgsavethread_mutex
);
if
(
state
==
REDIS_BGSAVE_DONE_OK
||
state
==
REDIS_BGSAVE_DONE_ERR
)
if
(
state
==
REDIS_BGSAVE_THREAD_DONE_OK
||
state
==
REDIS_BGSAVE_THREAD_DONE_ERR
)
{
backgroundSaveDoneHandler
(
(
state
==
REDIS_BGSAVE_DONE_OK
)
?
0
:
1
,
0
);
(
state
==
REDIS_BGSAVE_
THREAD_
DONE_OK
)
?
0
:
1
,
0
);
}
}
}
else
if
(
!
server
.
ds_enabled
)
{
...
...
src/redis.h
浏览文件 @
5b8ce853
...
...
@@ -756,7 +756,7 @@ int rdbSaveObject(FILE *fp, robj *o);
off_t
rdbSavedObjectLen
(
robj
*
o
);
off_t
rdbSavedObjectPages
(
robj
*
o
);
robj
*
rdbLoadObject
(
int
type
,
FILE
*
fp
);
void
backgroundSaveDoneHandler
(
int
exitcode
,
int
bysignal
)
{
void
backgroundSaveDoneHandler
(
int
exitcode
,
int
bysignal
)
;
int
rdbSaveKeyValuePair
(
FILE
*
fp
,
redisDb
*
db
,
robj
*
key
,
robj
*
val
,
time_t
now
);
int
rdbLoadType
(
FILE
*
fp
);
time_t
rdbLoadTime
(
FILE
*
fp
);
...
...
@@ -800,6 +800,7 @@ robj *dsGet(redisDb *db, robj *key, time_t *expire);
int
dsDel
(
redisDb
*
db
,
robj
*
key
);
int
dsExists
(
redisDb
*
db
,
robj
*
key
);
void
dsFlushDb
(
int
dbid
);
int
dsRdbSave
(
char
*
filename
);
/* Disk Store Cache */
void
dsInit
(
void
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录