Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Juicedata
JuiceFS
提交
4e58e9d7
JuiceFS
项目概览
Juicedata
/
JuiceFS
通知
10
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
JuiceFS
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
4e58e9d7
编写于
1月 29, 2021
作者:
D
Davies Liu
提交者:
GitHub
1月 29, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
improve performance of accesslog (#155)
上级
efce9537
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
32 addition
and
22 deletion
+32
-22
pkg/vfs/accesslog.go
pkg/vfs/accesslog.go
+32
-22
未找到文件。
pkg/vfs/accesslog.go
浏览文件 @
4e58e9d7
...
...
@@ -21,24 +21,26 @@ import (
"time"
)
const
(
maxLineLength
=
1000
)
type
logReader
struct
{
sync
.
Mutex
buffer
chan
[]
byte
last
[]
byte
}
var
(
readerLock
sync
.
Mutex
readers
map
[
uint64
]
chan
[]
byte
readers
map
[
uint64
]
*
logReader
)
func
init
()
{
readers
=
make
(
map
[
uint64
]
chan
[]
byte
)
readers
=
make
(
map
[
uint64
]
*
logReader
)
}
func
logit
(
ctx
Context
,
format
string
,
args
...
interface
{})
{
used
:=
ctx
.
Duration
()
readerLock
.
Lock
()
defer
readerLock
.
Unlock
()
if
len
(
readers
)
==
0
||
used
>
time
.
Second
*
10
{
if
len
(
readers
)
==
0
&&
used
<
time
.
Second
*
10
{
return
}
...
...
@@ -46,14 +48,14 @@ func logit(ctx Context, format string, args ...interface{}) {
t
:=
time
.
Now
()
ts
:=
t
.
Format
(
"2006.01.02 15:04:05.000000"
)
cmd
+=
fmt
.
Sprintf
(
" <%.6f>"
,
used
.
Seconds
())
if
ctx
.
Pid
()
!=
0
&&
used
>
time
.
Second
*
10
{
if
ctx
.
Pid
()
!=
0
&&
used
>
=
time
.
Second
*
10
{
logger
.
Infof
(
"slow operation: %s"
,
cmd
)
}
line
:=
[]
byte
(
fmt
.
Sprintf
(
"%s [uid:%d,gid:%d,pid:%d] %s
\n
"
,
ts
,
ctx
.
Uid
(),
ctx
.
Gid
(),
ctx
.
Pid
(),
cmd
))
for
_
,
ch
:=
range
readers
{
for
_
,
r
:=
range
readers
{
select
{
case
ch
<-
line
:
case
r
.
buffer
<-
line
:
default
:
}
}
...
...
@@ -62,7 +64,7 @@ func logit(ctx Context, format string, args ...interface{}) {
func
openAccessLog
(
fh
uint64
)
uint64
{
readerLock
.
Lock
()
defer
readerLock
.
Unlock
()
readers
[
fh
]
=
make
(
chan
[]
byte
,
1024
)
readers
[
fh
]
=
&
logReader
{
buffer
:
make
(
chan
[]
byte
,
10240
)}
return
fh
}
...
...
@@ -74,27 +76,35 @@ func closeAccessLog(fh uint64) {
func
readAccessLog
(
fh
uint64
,
buf
[]
byte
)
int
{
readerLock
.
Lock
()
buffe
r
,
ok
:=
readers
[
fh
]
r
,
ok
:=
readers
[
fh
]
readerLock
.
Unlock
()
if
!
ok
{
return
0
}
r
.
Lock
()
defer
r
.
Unlock
()
var
n
int
if
len
(
r
.
last
)
>
0
{
n
=
copy
(
buf
,
r
.
last
)
r
.
last
=
r
.
last
[
n
:
]
}
var
t
=
time
.
NewTimer
(
time
.
Second
)
select
{
case
l
:=
<-
buffer
:
n
=
copy
(
buf
,
l
)
for
n
+
maxLineLength
<=
len
(
buf
)
{
select
{
case
l
=
<-
buffer
:
n
+=
copy
(
buf
[
n
:
],
l
)
default
:
defer
t
.
Stop
()
for
n
<
len
(
buf
)
{
select
{
case
line
:=
<-
r
.
buffer
:
l
:=
copy
(
buf
[
n
:
],
line
)
n
+=
l
if
l
<
len
(
line
)
{
r
.
last
=
line
[
l
:
]
return
n
}
case
<-
t
.
C
:
if
n
==
0
{
n
=
copy
(
buf
,
[]
byte
(
"#
\n
"
))
}
return
n
}
return
n
case
<-
t
.
C
:
n
=
copy
(
buf
,
[]
byte
(
"#
\n
"
))
}
return
n
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录