1 Star 0 Fork 58

gnaygnil/docker

forked from src-openEuler/docker 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0092-Revert-docker-Lock-the-RWLayer-while-committi.patch 6.95 KB
一键复制 编辑 原始数据 按行查看 历史
gnaygnil 提交于 2020-02-13 15:36 . docker: Fixed build error and URL
From 5c472ad67723ba45ee92dce62f9f45292213644e Mon Sep 17 00:00:00 2001
From: jingrui <jingrui@huawei.com>
Date: Fri, 1 Feb 2019 11:02:31 +0800
Subject: [PATCH 092/111] Revert "docker: Lock the RWLayer while
committing/exporting"
reason: This reverts commit a3dbaededfff6d20e16740c47ac69de9a91cccff.
1. rwlayer is already protected by ls.mountL.Lock, no need add lock to
mountedLayer.
2. rwlayer is protected by reference, no need add lock during commit or
export.
known issues:
- commit or export will put reference during hold lock, if put the last
reference, dead lock happens on release layer.
- delete(docker rm) will set container.RWLayer = nil, it's dangrous
after export or commit when calling container.RWLayer.RUnlockRWLayer().
Change-Id: I72cc72a3398133d693cb813fde1964068544ec03
Signed-off-by: jingrui <jingrui@huawei.com>
---
components/engine/daemon/commit.go | 2 --
components/engine/daemon/export.go | 2 --
components/engine/layer/empty.go | 13 +------------
components/engine/layer/layer.go | 7 -------
components/engine/layer/layer_store.go | 4 ----
components/engine/layer/mounted_layer.go | 10 ----------
components/engine/layer/ro_layer.go | 10 ----------
11 files changed, 7 insertions(+), 53 deletions(-)
diff --git a/components/engine/daemon/commit.go b/components/engine/daemon/commit.go
index fc7d2782ef..0f6f440514 100644
--- a/components/engine/daemon/commit.go
+++ b/components/engine/daemon/commit.go
@@ -155,8 +155,6 @@ func (daemon *Daemon) CreateImageFromContainer(name string, c *backend.CreateIma
return "", err
}
- container.RWLayer.RLockRWLayer()
- defer container.RWLayer.RUnlockRWLayer()
id, err := daemon.imageService.CommitImage(backend.CommitConfig{
Author: c.Author,
Comment: c.Comment,
diff --git a/components/engine/daemon/export.go b/components/engine/daemon/export.go
index ebd2d75f40..27bc35967d 100644
--- a/components/engine/daemon/export.go
+++ b/components/engine/daemon/export.go
@@ -34,8 +34,6 @@ func (daemon *Daemon) ContainerExport(name string, out io.Writer) error {
return errdefs.Conflict(err)
}
- container.RWLayer.RLockRWLayer()
- defer container.RWLayer.RUnlockRWLayer()
data, err := daemon.containerExport(container)
if err != nil {
return fmt.Errorf("Error exporting container %s: %v", name, err)
diff --git a/components/engine/layer/empty.go b/components/engine/layer/empty.go
index 16a49a7abd..c81c702140 100644
--- a/components/engine/layer/empty.go
+++ b/components/engine/layer/empty.go
@@ -6,16 +6,13 @@ import (
"fmt"
"io"
"io/ioutil"
- "sync"
)
// DigestSHA256EmptyTar is the canonical sha256 digest of empty tar file -
// (1024 NULL bytes)
const DigestSHA256EmptyTar = DiffID("sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef")
-type emptyLayer struct {
- sync.RWMutex
-}
+type emptyLayer struct{}
// EmptyLayer is a layer that corresponds to empty tar.
var EmptyLayer = &emptyLayer{}
@@ -58,14 +55,6 @@ func (el *emptyLayer) Metadata() (map[string]string, error) {
return make(map[string]string), nil
}
-func (el *emptyLayer) RLockRWLayer() {
- el.RLock()
-}
-
-func (el *emptyLayer) RUnlockRWLayer() {
- el.RUnlock()
-}
-
// IsEmpty returns true if the layer is an EmptyLayer
func IsEmpty(diffID DiffID) bool {
return diffID == DigestSHA256EmptyTar
diff --git a/components/engine/layer/layer.go b/components/engine/layer/layer.go
index e35a13135b..cb13c98d0b 100644
--- a/components/engine/layer/layer.go
+++ b/components/engine/layer/layer.go
@@ -145,13 +145,6 @@ type RWLayer interface {
// Metadata returns the low level metadata for the mutable layer
Metadata() (map[string]string, error)
-
- // RLockRWLayer locks the RWLayer to block unmounting/removal
- // of that layer
- RLockRWLayer()
-
- // RUnlockRWLayer unlocks the RWLayer
- RUnlockRWLayer()
}
// Metadata holds information about a
diff --git a/components/engine/layer/layer_store.go b/components/engine/layer/layer_store.go
index 553b098dfd..b6fc45e655 100644
--- a/components/engine/layer/layer_store.go
+++ b/components/engine/layer/layer_store.go
@@ -598,7 +598,6 @@ func (ls *layerStore) CreateRWLayer(name string, parent ChainID, opts *CreateRWL
// Release parent chain if error
defer func() {
if err != nil {
- m.Lock()
if deferErr := ls.driver.Remove(m.mountID); deferErr != nil {
logrus.Errorf("Error removing mounted layer during create rw layer %s: %s", m.name, deferErr)
}
@@ -610,7 +609,6 @@ func (ls *layerStore) CreateRWLayer(name string, parent ChainID, opts *CreateRWL
if deferErr := ls.store.RemoveMount(m.name); deferErr != nil {
logrus.Errorf("Error removing mount metadata during create rw layer %s: %s", m.name, deferErr)
}
- m.Unlock()
ls.layerL.Lock()
ls.releaseLayer(p)
@@ -688,8 +686,6 @@ func (ls *layerStore) ReleaseRWLayer(l RWLayer) ([]Metadata, error) {
return []Metadata{}, nil
}
- m.Lock()
- defer m.Unlock()
if err := ls.driver.Remove(m.mountID); err != nil {
logrus.Errorf("Error removing mounted layer %s: %s", m.name, err)
m.retakeReference(l)
diff --git a/components/engine/layer/mounted_layer.go b/components/engine/layer/mounted_layer.go
index 66711d6cf7..d6858c662c 100644
--- a/components/engine/layer/mounted_layer.go
+++ b/components/engine/layer/mounted_layer.go
@@ -2,7 +2,6 @@ package layer // import "github.com/docker/docker/layer"
import (
"io"
- "sync"
"github.com/docker/docker/pkg/archive"
"github.com/docker/docker/pkg/containerfs"
@@ -17,7 +16,6 @@ type mountedLayer struct {
layerStore *layerStore
references map[RWLayer]*referencedRWLayer
- sync.RWMutex
}
func (ml *mountedLayer) cacheParent() string {
@@ -60,14 +58,6 @@ func (ml *mountedLayer) Metadata() (map[string]string, error) {
return ml.layerStore.driver.GetMetadata(ml.mountID)
}
-func (ml *mountedLayer) RLockRWLayer() {
- ml.RLock()
-}
-
-func (ml *mountedLayer) RUnlockRWLayer() {
- ml.RUnlock()
-}
-
func (ml *mountedLayer) getReference() RWLayer {
ref := &referencedRWLayer{
mountedLayer: ml,
diff --git a/components/engine/layer/ro_layer.go b/components/engine/layer/ro_layer.go
index 59bcf17d18..3555e8b027 100644
--- a/components/engine/layer/ro_layer.go
+++ b/components/engine/layer/ro_layer.go
@@ -3,7 +3,6 @@ package layer // import "github.com/docker/docker/layer"
import (
"fmt"
"io"
- "sync"
"github.com/docker/distribution"
"github.com/opencontainers/go-digest"
@@ -20,7 +19,6 @@ type roLayer struct {
referenceCount int
references map[Layer]struct{}
- sync.RWMutex
}
// TarStream for roLayer guarantees that the data that is produced is the exact
@@ -94,14 +92,6 @@ func (rl *roLayer) Metadata() (map[string]string, error) {
return rl.layerStore.driver.GetMetadata(rl.cacheID)
}
-func (rl *roLayer) RLockRWLayer() {
- rl.RLock()
-}
-
-func (rl *roLayer) RUnlockRWLayer() {
- rl.RUnlock()
-}
-
type referencedCacheLayer struct {
*roLayer
}
--
2.17.1
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/gnaygnil/docker.git
git@gitee.com:gnaygnil/docker.git
gnaygnil
docker
docker
master

搜索帮助