1 Star 0 Fork 58

gnaygnil/docker

forked from src-openEuler/docker 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0109-graphdriver-add-Checkparent-method.patch 7.49 KB
一键复制 编辑 原始数据 按行查看 历史
gnaygnil 提交于 2020-02-13 15:36 . docker: Fixed build error and URL
From f3867c1d93f375441eda73a0c6cb4669fc75f660 Mon Sep 17 00:00:00 2001
From: zhangsong34 <zhangsong34@huawei.com>
Date: Sat, 23 Feb 2019 14:39:34 +0800
Subject: [PATCH 109/111] graphdriver: add Checkparent method
reason:Use this method to checkout the relationship between
a layer and this parent. It is very useful if graphdriver
stores methdata in its own dirs.
Change-Id: I07ebe752eb58bc2a027f8a93568b498ad8603713
Signed-off-by: Liu Hua <sdu.liu@huawei.com>
Signed-off-by: Deng Guangxing <dengguangxing@huawei.com>
Signed-off-by: zhangsong34 <zhangsong34@huawei.com>
---
.../engine/daemon/graphdriver/aufs/aufs.go | 5 +++++
.../engine/daemon/graphdriver/btrfs/btrfs.go | 5 +++++
.../daemon/graphdriver/devmapper/driver.go | 5 +++++
components/engine/daemon/graphdriver/driver.go | 2 ++
.../daemon/graphdriver/overlay/overlay.go | 5 +++++
.../daemon/graphdriver/overlay2/overlay.go | 18 ++++++++++++++++++
components/engine/daemon/graphdriver/proxy.go | 5 +++++
.../engine/daemon/graphdriver/vfs/driver.go | 5 +++++
.../engine/daemon/graphdriver/zfs/zfs.go | 5 +++++
components/engine/layer/layer_store.go | 5 +++++
10 files changed, 60 insertions(+)
diff --git a/components/engine/daemon/graphdriver/aufs/aufs.go b/components/engine/daemon/graphdriver/aufs/aufs.go
index 303138d48a..eef8387594 100644
--- a/components/engine/daemon/graphdriver/aufs/aufs.go
+++ b/components/engine/daemon/graphdriver/aufs/aufs.go
@@ -235,6 +235,11 @@ func (a *Driver) GetAll() []string {
return []string{}
}
+// CheckParent not implemented
+func (a *Driver) CheckParent(id, parent string) error {
+ return nil
+}
+
// CreateReadWrite creates a layer that is writable for use as a container
// file system.
func (a *Driver) CreateReadWrite(id, parent string, opts *graphdriver.CreateOpts) error {
diff --git a/components/engine/daemon/graphdriver/btrfs/btrfs.go b/components/engine/daemon/graphdriver/btrfs/btrfs.go
index d04ce10be9..7d1f9dc2b1 100644
--- a/components/engine/daemon/graphdriver/btrfs/btrfs.go
+++ b/components/engine/daemon/graphdriver/btrfs/btrfs.go
@@ -172,6 +172,11 @@ func (a *Driver) GetAll() []string {
return []string{}
}
+// CheckParent not implemented
+func (d *Driver) CheckParent(id, parent string) error {
+ return nil
+}
+
// Cleanup unmounts the home directory.
func (d *Driver) Cleanup() error {
err := d.subvolDisableQuota()
diff --git a/components/engine/daemon/graphdriver/devmapper/driver.go b/components/engine/daemon/graphdriver/devmapper/driver.go
index a56b26bc8f..1eade3aba5 100644
--- a/components/engine/daemon/graphdriver/devmapper/driver.go
+++ b/components/engine/daemon/graphdriver/devmapper/driver.go
@@ -131,6 +131,11 @@ func (a *Driver) GetAll() []string {
return []string{}
}
+// CheckParent not implemented
+func (d *Driver) CheckParent(id, parent string) error {
+ return nil
+}
+
// Cleanup unmounts a device.
func (d *Driver) Cleanup() error {
err := d.DeviceSet.Shutdown(d.home)
diff --git a/components/engine/daemon/graphdriver/driver.go b/components/engine/daemon/graphdriver/driver.go
index 672257a9b5..9976571cde 100644
--- a/components/engine/daemon/graphdriver/driver.go
+++ b/components/engine/daemon/graphdriver/driver.go
@@ -80,6 +80,8 @@ type ProtoDriver interface {
Cleanup() error
// GetAll returns all the mountid exists in this driver
GetAll() []string
+ // CheckParent checks whether the parent is the right lower layer
+ CheckParent(id, parent string) error
}
// DiffDriver is the interface to use to implement graph diffs
diff --git a/components/engine/daemon/graphdriver/overlay/overlay.go b/components/engine/daemon/graphdriver/overlay/overlay.go
index d59a6dfc83..7dbeec5376 100644
--- a/components/engine/daemon/graphdriver/overlay/overlay.go
+++ b/components/engine/daemon/graphdriver/overlay/overlay.go
@@ -276,6 +276,11 @@ func (d *Driver) Cleanup() error {
return mount.RecursiveUnmount(d.home)
}
+// CheckParent not implemented
+func (d *Driver) CheckParent(id, parent string) error {
+ return nil
+}
+
// CreateReadWrite creates a layer that is writable for use as a container
// file system.
func (d *Driver) CreateReadWrite(id, parent string, opts *graphdriver.CreateOpts) error {
diff --git a/components/engine/daemon/graphdriver/overlay2/overlay.go b/components/engine/daemon/graphdriver/overlay2/overlay.go
index 1a3c9c9d67..7fd3fab645 100644
--- a/components/engine/daemon/graphdriver/overlay2/overlay.go
+++ b/components/engine/daemon/graphdriver/overlay2/overlay.go
@@ -360,6 +360,24 @@ func (d *Driver) GetMetadata(id string) (map[string]string, error) {
return metadata, nil
}
+// CheckParent checks the relationship between id and parent
+func (d *Driver) CheckParent(id, parent string) error {
+ metadata, err := d.GetMetadata(id)
+ if err != nil {
+ return err
+ }
+ lowerDirs, exist := metadata["LowerDir"]
+ if !exist {
+ return fmt.Errorf("%s does not have lower layers", id)
+ }
+
+ if !strings.Contains(lowerDirs, parent) {
+ return fmt.Errorf("Lower layer(%s) of %s does not exist", parent, id)
+ }
+ return nil
+
+}
+
// Cleanup any state created by overlay which should be cleaned when daemon
// is being shutdown. For now, we just have to unmount the bind mounted
// we had created.
diff --git a/components/engine/daemon/graphdriver/proxy.go b/components/engine/daemon/graphdriver/proxy.go
index 6c132d40a8..990f9b4d4e 100644
--- a/components/engine/daemon/graphdriver/proxy.go
+++ b/components/engine/daemon/graphdriver/proxy.go
@@ -96,6 +96,11 @@ func (d *graphDriverProxy) GetAll() []string {
return []string{}
}
+// CheckParent not implemented
+func (a *graphDriverProxy) CheckParent(id, parent string) error {
+ return nil
+}
+
func (d *graphDriverProxy) CreateReadWrite(id, parent string, opts *CreateOpts) error {
return d.create("GraphDriver.CreateReadWrite", id, parent, opts)
}
diff --git a/components/engine/daemon/graphdriver/vfs/driver.go b/components/engine/daemon/graphdriver/vfs/driver.go
index 8c2947d9ee..6b9e92e16c 100644
--- a/components/engine/daemon/graphdriver/vfs/driver.go
+++ b/components/engine/daemon/graphdriver/vfs/driver.go
@@ -69,6 +69,11 @@ func (a *Driver) GetAll() []string {
return []string{}
}
+// CheckParent not implemented
+func (d *Driver) CheckParent(id, parent string) error {
+ return nil
+}
+
// Cleanup is used to implement graphdriver.ProtoDriver. There is no cleanup required for this driver.
func (d *Driver) Cleanup() error {
return nil
diff --git a/components/engine/daemon/graphdriver/zfs/zfs.go b/components/engine/daemon/graphdriver/zfs/zfs.go
index e1e2d0d823..e5958093db 100644
--- a/components/engine/daemon/graphdriver/zfs/zfs.go
+++ b/components/engine/daemon/graphdriver/zfs/zfs.go
@@ -232,6 +232,11 @@ func (a *Driver) GetAll() []string {
return []string{}
}
+// CheckParent not implemented
+func (d *Driver) CheckParent(id, parent string) error {
+ return nil
+}
+
func (d *Driver) cloneFilesystem(name, parentName string) error {
snapshotName := fmt.Sprintf("%d", time.Now().Nanosecond())
parentDataset := zfs.Dataset{Name: parentName}
diff --git a/components/engine/layer/layer_store.go b/components/engine/layer/layer_store.go
index b6fc45e655..c514ed802a 100644
--- a/components/engine/layer/layer_store.go
+++ b/components/engine/layer/layer_store.go
@@ -192,6 +192,11 @@ func (ls *layerStore) loadLayer(layer ChainID) (l *roLayer, err error) {
if err != nil {
return nil, err
}
+
+ err = ls.driver.CheckParent(cacheID, p.cacheID)
+ if err != nil {
+ return nil, err
+ }
cl.parent = p
} else {
_, err := ls.driver.GetMetadata(cacheID)
--
2.17.1
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/gnaygnil/docker.git
git@gitee.com:gnaygnil/docker.git
gnaygnil
docker
docker
master

搜索帮助