Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
hanoi2005
redis
提交
8b41e19e
R
redis
项目概览
hanoi2005
/
redis
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
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,发现更多精彩内容 >>
提交
8b41e19e
编写于
4月 03, 2013
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rio.c: added ability to fdatasync() from time to time while writing.
上级
cf7b2c32
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
33 addition
and
1 deletion
+33
-1
src/rio.c
src/rio.c
+30
-1
src/rio.h
src/rio.h
+3
-0
未找到文件。
src/rio.c
浏览文件 @
8b41e19e
...
...
@@ -48,8 +48,11 @@
#include "fmacros.h"
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include "rio.h"
#include "util.h"
#include "config.h"
#include "redis.h"
uint64_t
crc64
(
uint64_t
crc
,
const
unsigned
char
*
s
,
uint64_t
l
);
...
...
@@ -76,7 +79,18 @@ static off_t rioBufferTell(rio *r) {
/* Returns 1 or 0 for success/failure. */
static
size_t
rioFileWrite
(
rio
*
r
,
const
void
*
buf
,
size_t
len
)
{
return
fwrite
(
buf
,
len
,
1
,
r
->
io
.
file
.
fp
);
size_t
retval
;
retval
=
fwrite
(
buf
,
len
,
1
,
r
->
io
.
file
.
fp
);
r
->
io
.
file
.
buffered
+=
len
;
if
(
r
->
io
.
file
.
autosync
&&
r
->
io
.
file
.
buffered
>=
r
->
io
.
file
.
autosync
)
{
aof_fsync
(
fileno
(
r
->
io
.
file
.
fp
));
r
->
io
.
file
.
buffered
=
0
;
}
return
retval
;
}
/* Returns 1 or 0 for success/failure. */
...
...
@@ -110,6 +124,8 @@ static const rio rioFileIO = {
void
rioInitWithFile
(
rio
*
r
,
FILE
*
fp
)
{
*
r
=
rioFileIO
;
r
->
io
.
file
.
fp
=
fp
;
r
->
io
.
file
.
buffered
=
0
;
r
->
io
.
file
.
autosync
=
0
;
}
void
rioInitWithBuffer
(
rio
*
r
,
sds
s
)
{
...
...
@@ -124,6 +140,19 @@ void rioGenericUpdateChecksum(rio *r, const void *buf, size_t len) {
r
->
cksum
=
crc64
(
r
->
cksum
,
buf
,
len
);
}
/* Set the file-based rio object to auto-fsync every 'bytes' file written.
* By default this is set to zero that means no automatic file sync is
* performed.
*
* This feature is useful in a few contexts since when we rely on OS write
* buffers sometimes the OS buffers way too much, resulting in too many
* disk I/O concentrated in very little time. When we fsync in an explicit
* way instead the I/O pressure is more distributed across time. */
void
rioSetAutoSync
(
rio
*
r
,
off_t
bytes
)
{
redisAssert
(
r
->
read
==
rioFileIO
.
read
);
r
->
io
.
file
.
autosync
=
bytes
;
}
/* ------------------------------ Higher level interface ---------------------------
* The following higher level functions use lower level rio.c functions to help
* generating the Redis protocol for the Append Only File. */
...
...
src/rio.h
浏览文件 @
8b41e19e
...
...
@@ -61,6 +61,8 @@ struct _rio {
}
buffer
;
struct
{
FILE
*
fp
;
off_t
buffered
;
/* Bytes written since last fsync. */
off_t
autosync
;
/* fsync after 'autosync' bytes written. */
}
file
;
}
io
;
};
...
...
@@ -97,5 +99,6 @@ size_t rioWriteBulkLongLong(rio *r, long long l);
size_t
rioWriteBulkDouble
(
rio
*
r
,
double
d
);
void
rioGenericUpdateChecksum
(
rio
*
r
,
const
void
*
buf
,
size_t
len
);
void
rioSetAutoSync
(
rio
*
r
,
off_t
bytes
);
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录