Browse Source

Cleanup: move image depth checks in image/

Signed-off-by: Solomon Hykes <solomon@docker.com>
Solomon Hykes 11 years ago
parent
commit
2a39635d30
3 changed files with 22 additions and 19 deletions
  1. 1 1
      daemon/create.go
  2. 0 18
      daemon/daemon.go
  3. 21 0
      image/image.go

+ 1 - 1
daemon/create.go

@@ -64,7 +64,7 @@ func (daemon *Daemon) Create(config *runconfig.Config, name string) (*Container,
 	if err != nil {
 		return nil, nil, err
 	}
-	if err := daemon.checkImageDepth(img); err != nil {
+	if err := img.CheckDepth(); err != nil {
 		return nil, nil, err
 	}
 	if warnings, err = daemon.mergeAndVerifyConfig(config, img); err != nil {

+ 0 - 18
daemon/daemon.go

@@ -39,11 +39,6 @@ import (
 	"github.com/docker/docker/utils"
 )
 
-// Set the max depth to the aufs default that most
-// kernels are compiled with
-// For more information see: http://sourceforge.net/p/aufs/aufs3-standalone/ci/aufs3.12/tree/config.mk
-const MaxImageDepth = 127
-
 var (
 	DefaultDns                = []string{"8.8.8.8", "8.8.4.4"}
 	validContainerNameChars   = `[a-zA-Z0-9_.-]`
@@ -388,19 +383,6 @@ func (daemon *Daemon) restore() error {
 	return nil
 }
 
-func (daemon *Daemon) checkImageDepth(img *image.Image) error {
-	// We add 2 layers to the depth because the container's rw and
-	// init layer add to the restriction
-	depth, err := img.Depth()
-	if err != nil {
-		return err
-	}
-	if depth+2 >= MaxImageDepth {
-		return fmt.Errorf("Cannot create container with more than %d parents", MaxImageDepth)
-	}
-	return nil
-}
-
 func (daemon *Daemon) checkDeprecatedExpose(config *runconfig.Config) bool {
 	if config != nil {
 		if config.PortSpecs != nil {

+ 21 - 0
image/image.go

@@ -16,6 +16,11 @@ import (
 	"github.com/docker/docker/utils"
 )
 
+// Set the max depth to the aufs default that most
+// kernels are compiled with
+// For more information see: http://sourceforge.net/p/aufs/aufs3-standalone/ci/aufs3.12/tree/config.mk
+const MaxImageDepth = 127
+
 type Image struct {
 	ID              string            `json:"id"`
 	Parent          string            `json:"parent,omitempty"`
@@ -297,6 +302,22 @@ func (img *Image) Depth() (int, error) {
 	return count, nil
 }
 
+// CheckDepth returns an error if the depth of an image, as returned
+// by ImageDepth, is too large to support creating a container from it
+// on this daemon.
+func (img *Image) CheckDepth() error {
+	// We add 2 layers to the depth because the container's rw and
+	// init layer add to the restriction
+	depth, err := img.Depth()
+	if err != nil {
+		return err
+	}
+	if depth+2 >= MaxImageDepth {
+		return fmt.Errorf("Cannot create container with more than %d parents", MaxImageDepth)
+	}
+	return nil
+}
+
 // Build an Image object from raw json data
 func NewImgJSON(src []byte) (*Image, error) {
 	ret := &Image{}