Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
iSulad
提交
9595034a
I
iSulad
项目概览
openeuler
/
iSulad
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
iSulad
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9595034a
编写于
7月 18, 2020
作者:
G
gaohuatao
提交者:
lifeng68
7月 25, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
devmapper: fix transaction bug
Signed-off-by:
N
gaohuatao
<
gaohuatao@huawei.com
>
上级
afd0e29f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
48 addition
and
4 deletion
+48
-4
src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c
...oci/storage/layer_store/graphdriver/devmapper/deviceset.c
+48
-4
未找到文件。
src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c
浏览文件 @
9595034a
...
...
@@ -685,7 +685,7 @@ static int device_file_walk(struct device_set *devset)
continue
;
}
device_info
=
lookup_device
(
devset
,
entry
->
d_name
);
// entry->d_name 取值base hash值等
device_info
=
lookup_device
(
devset
,
entry
->
d_name
);
if
(
device_info
==
NULL
)
{
ERROR
(
"devmapper: Error looking up device %s"
,
entry
->
d_name
);
ret
=
-
1
;
...
...
@@ -868,6 +868,42 @@ static int remove_metadata(struct device_set *devset, const char *hash)
return
ret
;
}
static
int
load_transaction_metadata
(
struct
device_set
*
devset
)
{
image_devmapper_transaction
*
trans
=
NULL
;
char
fname
[
PATH_MAX
]
=
{
0
};
parser_error
err
=
NULL
;
int
ret
=
0
;
int
nret
=
0
;
nret
=
snprintf
(
fname
,
sizeof
(
fname
),
"%s/metadata/%s"
,
devset
->
root
,
TRANSACTION_METADATA
);
if
(
nret
<
0
||
(
size_t
)
nret
>=
sizeof
(
fname
))
{
ERROR
(
"devmapper: failed make transaction-metadata full path"
);
ret
=
-
1
;
goto
out
;
}
if
(
!
util_file_exists
(
fname
))
{
devset
->
metadata_trans
->
open_transaction_id
=
devset
->
transaction_id
;
WARN
(
"There is no active transaction, may be during upgrade"
);
goto
out
;
}
trans
=
image_devmapper_transaction_parse_file
(
fname
,
NULL
,
&
err
);
if
(
trans
==
NULL
)
{
ERROR
(
"devmapper: load transaction metadata file error %s"
,
err
);
ret
=
-
1
;
goto
out
;
}
free_image_devmapper_transaction
(
devset
->
metadata_trans
);
devset
->
metadata_trans
=
trans
;
out:
free
(
err
);
return
ret
;
}
static
void
rollback_transaction
(
struct
device_set
*
devset
)
{
char
*
pool_dev
=
NULL
;
...
...
@@ -900,11 +936,19 @@ static void rollback_transaction(struct device_set *devset)
static
int
process_pending_transaction
(
struct
device_set
*
devset
)
{
int
ret
=
0
;
if
(
devset
==
NULL
||
devset
->
metadata_trans
==
NULL
)
{
ERROR
(
"devmapper: device set or tansaction is NULL"
);
return
-
1
;
}
if
(
load_transaction_metadata
(
devset
)
!=
0
)
{
ERROR
(
"devmapper: load transaction-metadata failed, process pending transaction terminate"
);
ret
=
-
1
;
goto
out
;
}
// If there was open transaction but pool transaction ID is same
// as open transaction ID, nothing to roll back.
if
(
devset
->
transaction_id
==
devset
->
metadata_trans
->
open_transaction_id
)
{
...
...
@@ -918,12 +962,11 @@ static int process_pending_transaction(struct device_set *devset)
devset
->
metadata_trans
->
open_transaction_id
,
devset
->
transaction_id
);
goto
out
;
}
rollback_transaction
(
devset
);
devset
->
metadata_trans
->
open_transaction_id
=
devset
->
transaction_id
;
out:
return
0
;
return
ret
;
}
static
void
cleanup_deleted_devices
(
struct
device_set
*
devset
)
...
...
@@ -1592,6 +1635,7 @@ static int take_snapshot(struct device_set *devset, const char *hash, image_devm
}
if
(
pool_has_free_space
(
devset
)
!=
0
)
{
ERROR
(
"devmapper: pool has no free space"
);
ret
=
-
1
;
goto
out
;
}
...
...
@@ -2966,7 +3010,7 @@ bool has_device(const char *hash, struct device_set *devset)
if
(
pthread_rwlock_wrlock
(
&
(
devset
->
devmapper_driver_rwlock
))
!=
0
)
{
ERROR
(
"lock devmapper conf failed"
);
return
-
1
;
return
false
;
}
device_info
=
lookup_device
(
devset
,
hash
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录