mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
layer/CreateRWLayerByGraphID: remove
This is an additon to commit 1fea38856a
("Remove v1.10 migrator")
aka PR #38265. Since that one, CreateRWLayerByGraphID() is not
used anywhere, so let's drop it.
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
parent
cae3c91d6b
commit
b4e9b50765
2 changed files with 0 additions and 219 deletions
|
@ -3,7 +3,6 @@ package layer // import "github.com/docker/docker/layer"
|
||||||
import (
|
import (
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
@ -13,64 +12,6 @@ import (
|
||||||
"github.com/vbatts/tar-split/tar/storage"
|
"github.com/vbatts/tar-split/tar/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CreateRWLayerByGraphID creates a RWLayer in the layer store using
|
|
||||||
// the provided name with the given graphID. To get the RWLayer
|
|
||||||
// after migration the layer may be retrieved by the given name.
|
|
||||||
func (ls *layerStore) CreateRWLayerByGraphID(name, graphID string, parent ChainID) (err error) {
|
|
||||||
ls.mountL.Lock()
|
|
||||||
m := ls.mounts[name]
|
|
||||||
ls.mountL.Unlock()
|
|
||||||
if m != nil {
|
|
||||||
if m.parent.chainID != parent {
|
|
||||||
return errors.New("name conflict, mismatched parent")
|
|
||||||
}
|
|
||||||
if m.mountID != graphID {
|
|
||||||
return errors.New("mount already exists")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if !ls.driver.Exists(graphID) {
|
|
||||||
return fmt.Errorf("graph ID does not exist: %q", graphID)
|
|
||||||
}
|
|
||||||
|
|
||||||
var p *roLayer
|
|
||||||
if string(parent) != "" {
|
|
||||||
p = ls.get(parent)
|
|
||||||
if p == nil {
|
|
||||||
return ErrLayerDoesNotExist
|
|
||||||
}
|
|
||||||
|
|
||||||
// Release parent chain if error
|
|
||||||
defer func() {
|
|
||||||
if err != nil {
|
|
||||||
ls.layerL.Lock()
|
|
||||||
ls.releaseLayer(p)
|
|
||||||
ls.layerL.Unlock()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Ensure graphID has correct parent
|
|
||||||
|
|
||||||
m = &mountedLayer{
|
|
||||||
name: name,
|
|
||||||
parent: p,
|
|
||||||
mountID: graphID,
|
|
||||||
layerStore: ls,
|
|
||||||
references: map[RWLayer]*referencedRWLayer{},
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for existing init layer
|
|
||||||
initID := fmt.Sprintf("%s-init", graphID)
|
|
||||||
if ls.driver.Exists(initID) {
|
|
||||||
m.initID = initID
|
|
||||||
}
|
|
||||||
|
|
||||||
return ls.saveMount(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (ls *layerStore) ChecksumForGraphID(id, parent, oldTarDataPath, newTarDataPath string) (diffID DiffID, size int64, err error) {
|
func (ls *layerStore) ChecksumForGraphID(id, parent, oldTarDataPath, newTarDataPath string) (diffID DiffID, size int64, err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -3,7 +3,6 @@ package layer // import "github.com/docker/docker/layer"
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
@ -12,7 +11,6 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/docker/docker/daemon/graphdriver"
|
"github.com/docker/docker/daemon/graphdriver"
|
||||||
"github.com/docker/docker/pkg/archive"
|
|
||||||
"github.com/docker/docker/pkg/stringid"
|
"github.com/docker/docker/pkg/stringid"
|
||||||
"github.com/vbatts/tar-split/tar/asm"
|
"github.com/vbatts/tar-split/tar/asm"
|
||||||
"github.com/vbatts/tar-split/tar/storage"
|
"github.com/vbatts/tar-split/tar/storage"
|
||||||
|
@ -269,161 +267,3 @@ func TestLayerMigrationNoTarsplit(t *testing.T) {
|
||||||
|
|
||||||
assertMetadata(t, metadata, createMetadata(layer2a))
|
assertMetadata(t, metadata, createMetadata(layer2a))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMountMigration(t *testing.T) {
|
|
||||||
// TODO Windows: Figure out why this is failing (obvious - paths... needs porting)
|
|
||||||
if runtime.GOOS == "windows" {
|
|
||||||
t.Skip("Failing on Windows")
|
|
||||||
}
|
|
||||||
ls, _, cleanup := newTestStore(t)
|
|
||||||
defer cleanup()
|
|
||||||
|
|
||||||
baseFiles := []FileApplier{
|
|
||||||
newTestFile("/root/.bashrc", []byte("# Boring configuration"), 0644),
|
|
||||||
newTestFile("/etc/profile", []byte("# Base configuration"), 0644),
|
|
||||||
}
|
|
||||||
initFiles := []FileApplier{
|
|
||||||
newTestFile("/etc/hosts", []byte{}, 0644),
|
|
||||||
newTestFile("/etc/resolv.conf", []byte{}, 0644),
|
|
||||||
}
|
|
||||||
mountFiles := []FileApplier{
|
|
||||||
newTestFile("/etc/hosts", []byte("localhost 127.0.0.1"), 0644),
|
|
||||||
newTestFile("/root/.bashrc", []byte("# Updated configuration"), 0644),
|
|
||||||
newTestFile("/root/testfile1.txt", []byte("nothing valuable"), 0644),
|
|
||||||
}
|
|
||||||
|
|
||||||
initTar, err := tarFromFiles(initFiles...)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
mountTar, err := tarFromFiles(mountFiles...)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
graph := ls.(*layerStore).driver
|
|
||||||
|
|
||||||
layer1, err := createLayer(ls, "", initWithFiles(baseFiles...))
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
graphID1 := layer1.(*referencedCacheLayer).cacheID
|
|
||||||
|
|
||||||
containerID := stringid.GenerateRandomID()
|
|
||||||
containerInit := fmt.Sprintf("%s-init", containerID)
|
|
||||||
|
|
||||||
if err := graph.Create(containerInit, graphID1, nil); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if _, err := graph.ApplyDiff(containerInit, graphID1, bytes.NewReader(initTar)); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := graph.Create(containerID, containerInit, nil); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if _, err := graph.ApplyDiff(containerID, containerInit, bytes.NewReader(mountTar)); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := ls.(*layerStore).CreateRWLayerByGraphID("migration-mount", containerID, layer1.ChainID()); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
rwLayer1, err := ls.GetRWLayer("migration-mount")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := rwLayer1.Mount(""); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
changes, err := rwLayer1.Changes()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if expected := 5; len(changes) != expected {
|
|
||||||
t.Logf("Changes %#v", changes)
|
|
||||||
t.Fatalf("Wrong number of changes %d, expected %d", len(changes), expected)
|
|
||||||
}
|
|
||||||
|
|
||||||
sortChanges(changes)
|
|
||||||
|
|
||||||
assertChange(t, changes[0], archive.Change{
|
|
||||||
Path: "/etc",
|
|
||||||
Kind: archive.ChangeModify,
|
|
||||||
})
|
|
||||||
assertChange(t, changes[1], archive.Change{
|
|
||||||
Path: "/etc/hosts",
|
|
||||||
Kind: archive.ChangeModify,
|
|
||||||
})
|
|
||||||
assertChange(t, changes[2], archive.Change{
|
|
||||||
Path: "/root",
|
|
||||||
Kind: archive.ChangeModify,
|
|
||||||
})
|
|
||||||
assertChange(t, changes[3], archive.Change{
|
|
||||||
Path: "/root/.bashrc",
|
|
||||||
Kind: archive.ChangeModify,
|
|
||||||
})
|
|
||||||
assertChange(t, changes[4], archive.Change{
|
|
||||||
Path: "/root/testfile1.txt",
|
|
||||||
Kind: archive.ChangeAdd,
|
|
||||||
})
|
|
||||||
|
|
||||||
if _, err := ls.CreateRWLayer("migration-mount", layer1.ChainID(), nil); err == nil {
|
|
||||||
t.Fatal("Expected error creating mount with same name")
|
|
||||||
} else if err != ErrMountNameConflict {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
rwLayer2, err := ls.GetRWLayer("migration-mount")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if getMountLayer(rwLayer1) != getMountLayer(rwLayer2) {
|
|
||||||
t.Fatal("Expected same layer from get with same name as from migrate")
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := rwLayer2.Mount(""); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := rwLayer2.Mount(""); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if metadata, err := ls.Release(layer1); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
} else if len(metadata) > 0 {
|
|
||||||
t.Fatalf("Expected no layers to be deleted, deleted %#v", metadata)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := rwLayer1.Unmount(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := ls.ReleaseRWLayer(rwLayer1); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := rwLayer2.Unmount(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if err := rwLayer2.Unmount(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
metadata, err := ls.ReleaseRWLayer(rwLayer2)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if len(metadata) == 0 {
|
|
||||||
t.Fatal("Expected base layer to be deleted when deleting mount")
|
|
||||||
}
|
|
||||||
|
|
||||||
assertMetadata(t, metadata, createMetadata(layer1))
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue