Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Juicedata
JuiceFS
提交
4dda37e9
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,体验更适合开发者的 AI 搜索 >>
未验证
提交
4dda37e9
编写于
10月 22, 2021
作者:
D
Davies Liu
提交者:
GitHub
10月 22, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add a option to limit the concurrent deletes (#917)
* add a option to limit the concurrent deletes * fix tests
上级
7a42e87a
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
48 addition
and
24 deletion
+48
-24
cmd/gateway.go
cmd/gateway.go
+5
-4
cmd/gc.go
cmd/gc.go
+5
-1
cmd/mount.go
cmd/mount.go
+6
-0
pkg/fs/fs_test.go
pkg/fs/fs_test.go
+1
-1
pkg/meta/config.go
pkg/meta/config.go
+1
-0
pkg/meta/redis.go
pkg/meta/redis.go
+4
-1
pkg/meta/redis_test.go
pkg/meta/redis_test.go
+4
-4
pkg/meta/sql.go
pkg/meta/sql.go
+4
-1
pkg/meta/sql_test.go
pkg/meta/sql_test.go
+6
-6
pkg/meta/tkv.go
pkg/meta/tkv.go
+4
-1
pkg/meta/tkv_test.go
pkg/meta/tkv_test.go
+1
-1
sdk/java/libjfs/main.go
sdk/java/libjfs/main.go
+6
-4
sdk/java/src/main/java/io/juicefs/JuiceFileSystemImpl.java
sdk/java/src/main/java/io/juicefs/JuiceFileSystemImpl.java
+1
-0
未找到文件。
cmd/gateway.go
浏览文件 @
4dda37e9
...
...
@@ -162,10 +162,11 @@ func (g *GateWay) NewGatewayLayer(creds auth.Credentials) (minio.ObjectLayer, er
c
:=
g
.
ctx
addr
:=
c
.
Args
()
.
Get
(
0
)
m
:=
meta
.
NewClient
(
addr
,
&
meta
.
Config
{
Retries
:
10
,
Strict
:
true
,
ReadOnly
:
c
.
Bool
(
"read-only"
),
OpenCache
:
time
.
Duration
(
c
.
Float64
(
"open-cache"
)
*
1e9
),
Retries
:
10
,
Strict
:
true
,
ReadOnly
:
c
.
Bool
(
"read-only"
),
OpenCache
:
time
.
Duration
(
c
.
Float64
(
"open-cache"
)
*
1e9
),
MaxDeletes
:
c
.
Int
(
"max-deletes"
),
})
format
,
err
:=
m
.
Load
()
if
err
!=
nil
{
...
...
cmd/gc.go
浏览文件 @
4dda37e9
...
...
@@ -80,7 +80,11 @@ func gc(ctx *cli.Context) error {
if
ctx
.
Args
()
.
Len
()
<
1
{
return
fmt
.
Errorf
(
"META-URL is needed"
)
}
m
:=
meta
.
NewClient
(
ctx
.
Args
()
.
Get
(
0
),
&
meta
.
Config
{
Retries
:
10
,
Strict
:
true
})
m
:=
meta
.
NewClient
(
ctx
.
Args
()
.
Get
(
0
),
&
meta
.
Config
{
Retries
:
10
,
Strict
:
true
,
MaxDeletes
:
ctx
.
Int
(
"threads"
),
})
format
,
err
:=
m
.
Load
()
if
err
!=
nil
{
logger
.
Fatalf
(
"load setting: %s"
,
err
)
...
...
cmd/mount.go
浏览文件 @
4dda37e9
...
...
@@ -120,6 +120,7 @@ func mount(c *cli.Context) error {
OpenCache
:
time
.
Duration
(
c
.
Float64
(
"open-cache"
)
*
1e9
),
MountPoint
:
mp
,
Subdir
:
c
.
String
(
"subdir"
),
MaxDeletes
:
c
.
Int
(
"max-deletes"
),
}
m
:=
meta
.
NewClient
(
addr
,
metaConf
)
format
,
err
:=
m
.
Load
()
...
...
@@ -277,6 +278,11 @@ func clientFlags() []cli.Flag {
Value
:
20
,
Usage
:
"number of connections to upload"
,
},
&
cli
.
IntFlag
{
Name
:
"max-deletes"
,
Value
:
2
,
Usage
:
"number of threads to delete objects"
,
},
&
cli
.
IntFlag
{
Name
:
"buffer-size"
,
Value
:
300
,
...
...
pkg/fs/fs_test.go
浏览文件 @
4dda37e9
...
...
@@ -27,7 +27,7 @@ import (
// nolint:errcheck
func
TestFileSystem
(
t
*
testing
.
T
)
{
m
:=
meta
.
NewClient
(
"redis://127.0.0.1:6379/10"
,
&
meta
.
Config
{})
m
:=
meta
.
NewClient
(
"redis://127.0.0.1:6379/10"
,
&
meta
.
Config
{
MaxDeletes
:
1
})
format
:=
meta
.
Format
{
Name
:
"test"
,
BlockSize
:
4096
,
...
...
pkg/meta/config.go
浏览文件 @
4dda37e9
...
...
@@ -26,6 +26,7 @@ type Config struct {
OpenCache
time
.
Duration
MountPoint
string
Subdir
string
MaxDeletes
int
}
type
Format
struct
{
...
...
pkg/meta/redis.go
浏览文件 @
4dda37e9
...
...
@@ -162,7 +162,7 @@ func newRedisMeta(driver, addr string, conf *Config) (Meta, error) {
of
:
newOpenFiles
(
conf
.
OpenCache
),
removedFiles
:
make
(
map
[
Ino
]
bool
),
compacting
:
make
(
map
[
uint64
]
bool
),
deleting
:
make
(
chan
int
,
2
),
deleting
:
make
(
chan
int
,
conf
.
MaxDeletes
),
symlinks
:
&
sync
.
Map
{},
msgCallbacks
:
&
msgCallbacks
{
callbacks
:
make
(
map
[
uint32
]
MsgCallback
),
...
...
@@ -2535,6 +2535,9 @@ func (r *redisMeta) toDelete(inode Ino, length uint64) string {
}
func
(
r
*
redisMeta
)
deleteSlice
(
ctx
Context
,
chunkid
uint64
,
size
uint32
)
{
if
r
.
conf
.
MaxDeletes
==
0
{
return
}
r
.
deleting
<-
1
defer
func
()
{
<-
r
.
deleting
}()
err
:=
r
.
newMsg
(
DeleteChunk
,
chunkid
,
size
)
...
...
pkg/meta/redis_test.go
浏览文件 @
4dda37e9
...
...
@@ -32,7 +32,7 @@ import (
)
func
TestRedisClient
(
t
*
testing
.
T
)
{
var
conf
Config
var
conf
=
Config
{
MaxDeletes
:
1
}
_
,
err
:=
newRedisMeta
(
"http"
,
"127.0.0.1:6379/7"
,
&
conf
)
if
err
==
nil
{
t
.
Fatal
(
"meta created with invalid url"
)
...
...
@@ -680,7 +680,7 @@ func testCaseIncensi(t *testing.T, m Meta) {
}
func
TestCompaction
(
t
*
testing
.
T
)
{
var
conf
Config
var
conf
=
Config
{
MaxDeletes
:
1
}
m
,
err
:=
newRedisMeta
(
"redis"
,
"127.0.0.1:6379/8"
,
&
conf
)
if
err
!=
nil
{
t
.
Skipf
(
"redis is not available: %s"
,
err
)
...
...
@@ -785,7 +785,7 @@ func testCompaction(t *testing.T, m Meta) {
}
func
TestConcurrentWrite
(
t
*
testing
.
T
)
{
var
conf
Config
var
conf
=
Config
{
MaxDeletes
:
1
}
m
,
err
:=
newRedisMeta
(
"redis"
,
"127.0.0.1/9"
,
&
conf
)
if
err
!=
nil
{
t
.
Skipf
(
"redis is not available: %s"
,
err
)
...
...
@@ -836,7 +836,7 @@ func testConcurrentWrite(t *testing.T, m Meta) {
}
func
TestTruncateAndDelete
(
t
*
testing
.
T
)
{
var
conf
Config
var
conf
=
Config
{
MaxDeletes
:
1
}
m
,
err
:=
newRedisMeta
(
"redis"
,
"127.0.0.1/10"
,
&
conf
)
if
err
!=
nil
{
t
.
Skipf
(
"redis is not available: %s"
,
err
)
...
...
pkg/meta/sql.go
浏览文件 @
4dda37e9
...
...
@@ -190,7 +190,7 @@ func newSQLMeta(driver, addr string, conf *Config) (Meta, error) {
of
:
newOpenFiles
(
conf
.
OpenCache
),
removedFiles
:
make
(
map
[
Ino
]
bool
),
compacting
:
make
(
map
[
uint64
]
bool
),
deleting
:
make
(
chan
int
,
2
),
deleting
:
make
(
chan
int
,
conf
.
MaxDeletes
),
symlinks
:
&
sync
.
Map
{},
msgCallbacks
:
&
msgCallbacks
{
callbacks
:
make
(
map
[
uint32
]
MsgCallback
),
...
...
@@ -2261,6 +2261,9 @@ func (m *dbMeta) cleanupSlices() {
}
func
(
m
*
dbMeta
)
deleteSlice
(
chunkid
uint64
,
size
uint32
)
{
if
m
.
conf
.
MaxDeletes
==
0
{
return
}
m
.
deleting
<-
1
defer
func
()
{
<-
m
.
deleting
}()
err
:=
m
.
newMsg
(
DeleteChunk
,
chunkid
,
size
)
...
...
pkg/meta/sql_test.go
浏览文件 @
4dda37e9
...
...
@@ -53,7 +53,7 @@ func resetDB(m *dbMeta) {
func
TestSQLiteClient
(
t
*
testing
.
T
)
{
tmp
:=
tempFile
(
t
)
defer
os
.
Remove
(
tmp
)
m
,
err
:=
newSQLMeta
(
"sqlite3"
,
tmp
,
&
Config
{})
m
,
err
:=
newSQLMeta
(
"sqlite3"
,
tmp
,
&
Config
{
MaxDeletes
:
1
})
if
err
!=
nil
{
t
.
Fatalf
(
"create meta: %s"
,
err
)
}
...
...
@@ -61,7 +61,7 @@ func TestSQLiteClient(t *testing.T) {
}
func
TestMySQLClient
(
t
*
testing
.
T
)
{
m
,
err
:=
newSQLMeta
(
"mysql"
,
"root:@/dev"
,
&
Config
{})
m
,
err
:=
newSQLMeta
(
"mysql"
,
"root:@/dev"
,
&
Config
{
MaxDeletes
:
1
})
if
err
!=
nil
{
t
.
Fatalf
(
"create meta: %s"
,
err
)
}
...
...
@@ -80,7 +80,7 @@ func TestMySQLClient(t *testing.T) {
}
func
TestPostgresQLClient
(
t
*
testing
.
T
)
{
m
,
err
:=
newSQLMeta
(
"postgres"
,
"localhost:5432/test?sslmode=disable"
,
&
Config
{})
m
,
err
:=
newSQLMeta
(
"postgres"
,
"localhost:5432/test?sslmode=disable"
,
&
Config
{
MaxDeletes
:
1
})
if
err
!=
nil
{
t
.
Fatalf
(
"create meta: %s"
,
err
)
}
...
...
@@ -121,7 +121,7 @@ func TestLocksSQLite(t *testing.T) {
func
TestConcurrentWriteSQLite
(
t
*
testing
.
T
)
{
tmp
:=
tempFile
(
t
)
defer
os
.
Remove
(
tmp
)
m
,
err
:=
newSQLMeta
(
"sqlite3"
,
tmp
,
&
Config
{})
m
,
err
:=
newSQLMeta
(
"sqlite3"
,
tmp
,
&
Config
{
MaxDeletes
:
1
})
if
err
!=
nil
{
t
.
Fatalf
(
"create meta: %s"
,
err
)
}
...
...
@@ -131,7 +131,7 @@ func TestConcurrentWriteSQLite(t *testing.T) {
func
TestCompactionSQLite
(
t
*
testing
.
T
)
{
tmp
:=
tempFile
(
t
)
defer
os
.
Remove
(
tmp
)
m
,
err
:=
newSQLMeta
(
"sqlite3"
,
tmp
,
&
Config
{})
m
,
err
:=
newSQLMeta
(
"sqlite3"
,
tmp
,
&
Config
{
MaxDeletes
:
1
})
if
err
!=
nil
{
t
.
Fatalf
(
"create meta: %s"
,
err
)
}
...
...
@@ -141,7 +141,7 @@ func TestCompactionSQLite(t *testing.T) {
func
TestTruncateAndDeleteSQLite
(
t
*
testing
.
T
)
{
tmp
:=
tempFile
(
t
)
defer
os
.
Remove
(
tmp
)
m
,
err
:=
newSQLMeta
(
"sqlite3"
,
tmp
,
&
Config
{})
m
,
err
:=
newSQLMeta
(
"sqlite3"
,
tmp
,
&
Config
{
MaxDeletes
:
1
})
if
err
!=
nil
{
t
.
Fatalf
(
"create meta: %s"
,
err
)
}
...
...
pkg/meta/tkv.go
浏览文件 @
4dda37e9
...
...
@@ -97,7 +97,7 @@ func newKVMeta(driver, addr string, conf *Config) (Meta, error) {
of
:
newOpenFiles
(
conf
.
OpenCache
),
removedFiles
:
make
(
map
[
Ino
]
bool
),
compacting
:
make
(
map
[
uint64
]
bool
),
deleting
:
make
(
chan
int
,
2
),
deleting
:
make
(
chan
int
,
conf
.
MaxDeletes
),
symlinks
:
&
sync
.
Map
{},
msgCallbacks
:
&
msgCallbacks
{
callbacks
:
make
(
map
[
uint32
]
MsgCallback
),
...
...
@@ -2183,6 +2183,9 @@ func (r *kvMeta) cleanupZeroRef(chunkid uint64, size uint32) {
}
func
(
m
*
kvMeta
)
deleteSlice
(
chunkid
uint64
,
size
uint32
)
{
if
m
.
conf
.
MaxDeletes
==
0
{
return
}
m
.
deleting
<-
1
defer
func
()
{
<-
m
.
deleting
}()
err
:=
m
.
newMsg
(
DeleteChunk
,
chunkid
,
size
)
...
...
pkg/meta/tkv_test.go
浏览文件 @
4dda37e9
...
...
@@ -48,7 +48,7 @@ func TestMemKV(t *testing.T) {
}
func
TestTKVClient
(
t
*
testing
.
T
)
{
m
,
err
:=
newKVMeta
(
"memkv"
,
"test/jfs"
,
&
Config
{})
m
,
err
:=
newKVMeta
(
"memkv"
,
"test/jfs"
,
&
Config
{
MaxDeletes
:
1
})
// m, err := newKVMeta("tikv", "127.0.0.1:2379/jfs", &Config{})
if
err
!=
nil
{
t
.
Fatalf
(
"create meta: %s"
,
err
)
...
...
sdk/java/libjfs/main.go
浏览文件 @
4dda37e9
...
...
@@ -228,6 +228,7 @@ type javaConf struct {
UploadLimit
int
`json:"uploadLimit"`
DownloadLimit
int
`json:"downloadLimit"`
MaxUploads
int
`json:"maxUploads"`
MaxDeletes
int
`json:"maxDeletes"`
GetTimeout
int
`json:"getTimeout"`
PutTimeout
int
`json:"putTimeout"`
FastResolve
bool
`json:"fastResolve"`
...
...
@@ -318,10 +319,11 @@ func jfs_init(cname, jsonConf, user, group, superuser, supergroup *C.char) uintp
addr
:=
jConf
.
MetaURL
m
:=
meta
.
NewClient
(
addr
,
&
meta
.
Config
{
Retries
:
10
,
Strict
:
true
,
ReadOnly
:
jConf
.
ReadOnly
,
OpenCache
:
time
.
Duration
(
jConf
.
OpenCache
*
1e9
),
Retries
:
10
,
Strict
:
true
,
ReadOnly
:
jConf
.
ReadOnly
,
OpenCache
:
time
.
Duration
(
jConf
.
OpenCache
*
1e9
),
MaxDeletes
:
jConf
.
MaxDeletes
,
})
format
,
err
:=
m
.
Load
()
if
err
!=
nil
{
...
...
sdk/java/src/main/java/io/juicefs/JuiceFileSystemImpl.java
浏览文件 @
4dda37e9
...
...
@@ -321,6 +321,7 @@ public class JuiceFileSystemImpl extends FileSystem {
obj
.
put
(
"metacache"
,
Boolean
.
valueOf
(
getConf
(
conf
,
"metacache"
,
"true"
)));
obj
.
put
(
"autoCreate"
,
Boolean
.
valueOf
(
getConf
(
conf
,
"auto-create-cache-dir"
,
"true"
)));
obj
.
put
(
"maxUploads"
,
Integer
.
valueOf
(
getConf
(
conf
,
"max-uploads"
,
"20"
)));
obj
.
put
(
"maxDeletes"
,
Integer
.
valueOf
(
getConf
(
conf
,
"max-deletes"
,
"2"
)));
obj
.
put
(
"uploadLimit"
,
Integer
.
valueOf
(
getConf
(
conf
,
"upload-limit"
,
"0"
)));
obj
.
put
(
"downloadLimit"
,
Integer
.
valueOf
(
getConf
(
conf
,
"download-limit"
,
"0"
)));
obj
.
put
(
"getTimeout"
,
Integer
.
valueOf
(
getConf
(
conf
,
"get-timeout"
,
getConf
(
conf
,
"object-timeout"
,
"5"
))));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录