Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
55228dae
提交
55228dae
authored
3月 13, 2015
作者:
Tommi Virtanen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Simplify FSRepo life cycle, it's either open or closed
上级
384ca525
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
19 行增加
和
59 行删除
+19
-59
fsrepo.go
repo/fsrepo/fsrepo.go
+19
-37
state.go
repo/fsrepo/state.go
+0
-22
没有找到文件。
repo/fsrepo/fsrepo.go
浏览文件 @
55228dae
package
fsrepo
import
(
"fmt"
"io"
"os"
"path"
...
...
@@ -52,15 +51,14 @@ var (
// FSRepo represents an IPFS FileSystem Repo. It is safe for use by multiple
// callers.
type
FSRepo
struct
{
//
state is the FSRepo's state (unopened, opened, closed)
state
state
//
has Close been called already
closed
bool
// path is the file-system path
path
string
// lockfile is the file system lock to prevent others from opening
// the same fsrepo path concurrently
lockfile
io
.
Closer
// config is set on Open, guarded by packageLock
config
*
config
.
Config
config
*
config
.
Config
// ds is set on Open
ds
ds2
.
ThreadSafeDatastoreCloser
}
...
...
@@ -110,9 +108,11 @@ func open(repoPath string) (repo.Repo, error) {
// log.Debugf("writing eventlogs to ...", c.path)
configureEventLoggerAtRepoPath
(
r
.
config
,
r
.
path
)
if
err
:=
r
.
transitionToOpened
();
err
!=
nil
{
closer
,
err
:=
lockfile
.
Lock
(
r
.
path
)
if
err
!=
nil
{
return
nil
,
err
}
r
.
lockfile
=
closer
return
r
,
nil
}
...
...
@@ -255,8 +255,8 @@ func (r *FSRepo) Close() error {
packageLock
.
Lock
()
defer
packageLock
.
Unlock
()
if
r
.
state
!=
open
ed
{
return
debugerror
.
Errorf
(
"repo is %s"
,
r
.
state
)
if
r
.
clos
ed
{
return
debugerror
.
New
(
"repo is closed"
)
}
if
err
:=
r
.
ds
.
Close
();
err
!=
nil
{
...
...
@@ -271,7 +271,11 @@ func (r *FSRepo) Close() error {
// to disable logging once the component is closed.
// eventlog.Configure(eventlog.Output(os.Stderr))
return
r
.
transitionToClosed
()
r
.
closed
=
true
if
err
:=
r
.
lockfile
.
Close
();
err
!=
nil
{
return
err
}
return
nil
}
// Config returns the FSRepo's config. This method must not be called if the
...
...
@@ -288,8 +292,8 @@ func (r *FSRepo) Config() *config.Config {
packageLock
.
Lock
()
defer
packageLock
.
Unlock
()
if
r
.
state
!=
open
ed
{
panic
(
fmt
.
Sprintln
(
"repo is"
,
r
.
state
)
)
if
r
.
clos
ed
{
panic
(
"repo is closed"
)
}
return
r
.
config
}
...
...
@@ -336,8 +340,8 @@ func (r *FSRepo) GetConfigKey(key string) (interface{}, error) {
packageLock
.
Lock
()
defer
packageLock
.
Unlock
()
if
r
.
state
!=
open
ed
{
return
nil
,
debugerror
.
Errorf
(
"repo is %s"
,
r
.
state
)
if
r
.
clos
ed
{
return
nil
,
debugerror
.
New
(
"repo is closed"
)
}
filename
,
err
:=
config
.
Filename
(
r
.
path
)
...
...
@@ -356,8 +360,8 @@ func (r *FSRepo) SetConfigKey(key string, value interface{}) error {
packageLock
.
Lock
()
defer
packageLock
.
Unlock
()
if
r
.
state
!=
open
ed
{
return
debugerror
.
Errorf
(
"repo is %s"
,
r
.
state
)
if
r
.
clos
ed
{
return
debugerror
.
New
(
"repo is closed"
)
}
filename
,
err
:=
config
.
Filename
(
r
.
path
)
...
...
@@ -422,25 +426,3 @@ func isInitializedUnsynced(repoPath string) bool {
}
return
true
}
// transitionToOpened manages the state transition to |opened|. Caller must hold
// the package mutex.
func
(
r
*
FSRepo
)
transitionToOpened
()
error
{
r
.
state
=
opened
closer
,
err
:=
lockfile
.
Lock
(
r
.
path
)
if
err
!=
nil
{
return
err
}
r
.
lockfile
=
closer
return
nil
}
// transitionToClosed manages the state transition to |closed|. Caller must
// hold the package mutex.
func
(
r
*
FSRepo
)
transitionToClosed
()
error
{
r
.
state
=
closed
if
err
:=
r
.
lockfile
.
Close
();
err
!=
nil
{
return
err
}
return
nil
}
repo/fsrepo/state.go
deleted
100644 → 0
浏览文件 @
384ca525
package
fsrepo
type
state
int
const
(
unopened
=
iota
opened
closed
)
func
(
s
state
)
String
()
string
{
switch
s
{
case
unopened
:
return
"unopened"
case
opened
:
return
"opened"
case
closed
:
return
"closed"
default
:
return
"invalid"
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论