Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Juicedata
JuiceFS
提交
911aac01
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,发现更多精彩内容 >>
未验证
提交
911aac01
编写于
6月 17, 2021
作者:
S
Sandy Xu
提交者:
GitHub
6月 17, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cmd/dump&load: dump dentries in a map instead of a list (#529)
上级
d1575e3d
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
33 addition
and
40 deletion
+33
-40
pkg/meta/metadata.sample
pkg/meta/metadata.sample
+9
-15
pkg/meta/redis.go
pkg/meta/redis.go
+9
-9
pkg/meta/sql.go
pkg/meta/sql.go
+7
-8
pkg/meta/types.go
pkg/meta/types.go
+8
-8
未找到文件。
pkg/meta/metadata.sample
浏览文件 @
911aac01
...
...
@@ -23,7 +23,6 @@
"Sustained": [],
"DelFiles": [],
"FSTree": {
"name": "/",
"inode": 1,
"attr": {
"type": "directory",
...
...
@@ -39,9 +38,8 @@
"nlink": 3,
"length": 0
},
"entries": [
{
"name": "d1",
"entries": {
"d1": {
"inode": 3,
"attr": {
"type": "directory",
...
...
@@ -57,9 +55,8 @@
"nlink": 2,
"length": 0
},
"entries": [
{
"name": "f11",
"entries": {
"f11": {
"inode": 4,
"attr": {
"type": "regular",
...
...
@@ -90,10 +87,9 @@
}
]
}
]
}
},
{
"name": "f1",
"f1": {
"inode": 2,
"attr": {
"type": "regular",
...
...
@@ -144,8 +140,7 @@
}
]
},
{
"name": "l1",
"l1": {
"inode": 4,
"attr": {
"type": "regular",
...
...
@@ -176,8 +171,7 @@
}
]
},
{
"name": "s1",
"s1": {
"inode": 5,
"attr": {
"type": "symlink",
...
...
@@ -195,6 +189,6 @@
},
"symlink": "d1/f11"
}
]
}
}
}
pkg/meta/redis.go
浏览文件 @
911aac01
...
...
@@ -2736,9 +2736,9 @@ func (r *redisMeta) checkServerConfig() {
logger
.
Infof
(
"Ping redis: %s"
,
time
.
Since
(
start
))
}
func
(
m
*
redisMeta
)
dumpEntry
(
name
string
,
inode
Ino
)
(
*
DumpedEntry
,
error
)
{
func
(
m
*
redisMeta
)
dumpEntry
(
inode
Ino
)
(
*
DumpedEntry
,
error
)
{
ctx
:=
Background
e
:=
&
DumpedEntry
{
Name
:
name
,
Inode
:
inode
}
e
:=
&
DumpedEntry
{
Inode
:
inode
}
st
:=
m
.
txn
(
ctx
,
func
(
tx
*
redis
.
Tx
)
error
{
a
,
err
:=
tx
.
Get
(
ctx
,
m
.
inodeKey
(
inode
))
.
Bytes
()
if
err
!=
nil
{
...
...
@@ -2789,16 +2789,16 @@ func (m *redisMeta) dumpEntry(name string, inode Ino) (*DumpedEntry, error) {
}
}
func
(
m
*
redisMeta
)
dumpDir
(
inode
Ino
)
(
[
]
*
DumpedEntry
,
error
)
{
func
(
m
*
redisMeta
)
dumpDir
(
inode
Ino
)
(
map
[
string
]
*
DumpedEntry
,
error
)
{
ctx
:=
Background
keys
,
err
:=
m
.
rdb
.
HGetAll
(
ctx
,
m
.
entryKey
(
inode
))
.
Result
()
if
err
!=
nil
{
return
nil
,
err
}
entries
:=
make
(
[]
*
DumpedEntry
,
0
,
len
(
keys
)
)
entries
:=
make
(
map
[
string
]
*
DumpedEntry
)
for
k
,
v
:=
range
keys
{
typ
,
inode
:=
m
.
parseEntry
([]
byte
(
v
))
entry
,
err
:=
m
.
dumpEntry
(
k
,
inode
)
entry
,
err
:=
m
.
dumpEntry
(
inode
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -2807,9 +2807,8 @@ func (m *redisMeta) dumpDir(inode Ino) ([]*DumpedEntry, error) {
return
nil
,
err
}
}
entries
=
append
(
entries
,
entry
)
entries
[
k
]
=
entry
}
sort
.
Slice
(
entries
,
func
(
i
,
j
int
)
bool
{
return
entries
[
i
]
.
Name
<
entries
[
j
]
.
Name
})
return
entries
,
nil
}
...
...
@@ -2830,7 +2829,7 @@ func (m *redisMeta) DumpMeta(w io.Writer) error {
dels
=
append
(
dels
,
&
DumpedDelFile
{
Ino
(
inode
),
length
,
int64
(
z
.
Score
)})
}
tree
,
err
:=
m
.
dumpEntry
(
"/"
,
1
)
tree
,
err
:=
m
.
dumpEntry
(
1
)
if
err
!=
nil
{
return
err
}
...
...
@@ -2916,7 +2915,8 @@ func collectEntry(e *DumpedEntry, entries map[Ino]*DumpedEntry) error {
e
.
Parent
=
1
}
e
.
Attr
.
Nlink
=
2
for
_
,
child
:=
range
e
.
Entries
{
for
name
,
child
:=
range
e
.
Entries
{
child
.
Name
=
name
child
.
Parent
=
e
.
Inode
if
typeFromString
(
child
.
Attr
.
Type
)
==
TypeDirectory
{
e
.
Attr
.
Nlink
++
...
...
pkg/meta/sql.go
浏览文件 @
911aac01
...
...
@@ -2304,8 +2304,8 @@ func (m *dbMeta) RemoveXattr(ctx Context, inode Ino, name string) syscall.Errno
}))
}
func
(
m
*
dbMeta
)
dumpEntry
(
name
string
,
inode
Ino
)
(
*
DumpedEntry
,
error
)
{
e
:=
&
DumpedEntry
{
Name
:
name
,
Inode
:
inode
}
func
(
m
*
dbMeta
)
dumpEntry
(
inode
Ino
)
(
*
DumpedEntry
,
error
)
{
e
:=
&
DumpedEntry
{
Inode
:
inode
}
return
e
,
m
.
txn
(
func
(
s
*
xorm
.
Session
)
error
{
n
:=
&
node
{
Inode
:
inode
}
ok
,
err
:=
m
.
engine
.
Get
(
n
)
...
...
@@ -2361,14 +2361,14 @@ func (m *dbMeta) dumpEntry(name string, inode Ino) (*DumpedEntry, error) {
})
}
func
(
m
*
dbMeta
)
dumpDir
(
inode
Ino
)
(
[
]
*
DumpedEntry
,
error
)
{
func
(
m
*
dbMeta
)
dumpDir
(
inode
Ino
)
(
map
[
string
]
*
DumpedEntry
,
error
)
{
var
edges
[]
edge
if
err
:=
m
.
engine
.
Find
(
&
edges
,
&
edge
{
Parent
:
inode
});
err
!=
nil
{
return
nil
,
err
}
entries
:=
make
(
[]
*
DumpedEntry
,
0
,
len
(
edges
)
)
entries
:=
make
(
map
[
string
]
*
DumpedEntry
)
for
_
,
e
:=
range
edges
{
entry
,
err
:=
m
.
dumpEntry
(
e
.
Name
,
e
.
Inode
)
entry
,
err
:=
m
.
dumpEntry
(
e
.
Inode
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -2377,9 +2377,8 @@ func (m *dbMeta) dumpDir(inode Ino) ([]*DumpedEntry, error) {
return
nil
,
err
}
}
entries
=
append
(
entries
,
entry
)
entries
[
e
.
Name
]
=
entry
}
sort
.
Slice
(
entries
,
func
(
i
,
j
int
)
bool
{
return
entries
[
i
]
.
Name
<
entries
[
j
]
.
Name
})
return
entries
,
nil
}
...
...
@@ -2393,7 +2392,7 @@ func (m *dbMeta) DumpMeta(w io.Writer) error {
dels
=
append
(
dels
,
&
DumpedDelFile
{
row
.
Inode
,
row
.
Length
,
row
.
Expire
})
}
tree
,
err
:=
m
.
dumpEntry
(
"/"
,
1
)
tree
,
err
:=
m
.
dumpEntry
(
1
)
if
err
!=
nil
{
return
err
}
...
...
pkg/meta/types.go
浏览文件 @
911aac01
...
...
@@ -70,14 +70,14 @@ type DumpedXattr struct {
}
type
DumpedEntry
struct
{
Name
string
`json:"name
"`
Inode
Ino
`json:"inode"`
Attr
*
DumpedAttr
`json:"attr"`
Parent
Ino
`json:"-"`
Symlink
string
`json:"symlink,omitempty"`
Xattrs
[]
*
DumpedXattr
`json:"xattrs,omitempty"`
Chunks
[]
*
DumpedChunk
`json:"chunks,omitempty"`
Entries
[
]
*
DumpedEntry
`json:"entries,omitempty"`
Name
string
`json:"-
"`
Inode
Ino
`json:"inode"`
Attr
*
DumpedAttr
`json:"attr"`
Parent
Ino
`json:"-"`
Symlink
string
`json:"symlink,omitempty"`
Xattrs
[]
*
DumpedXattr
`json:"xattrs,omitempty"`
Chunks
[]
*
DumpedChunk
`json:"chunks,omitempty"`
Entries
map
[
string
]
*
DumpedEntry
`json:"entries,omitempty"`
}
type
DumpedMeta
struct
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录