Do not create new layer for View

Signed-off-by: Darren Stahl <darst@microsoft.com>
This commit is contained in:
Darren Stahl 2018-01-11 17:09:28 -08:00
parent dcff993653
commit e981cc6289

View File

@ -228,7 +228,11 @@ func (s *snapshotter) Close() error {
} }
func (s *snapshotter) mounts(sn storage.Snapshot) []mount.Mount { func (s *snapshotter) mounts(sn storage.Snapshot) []mount.Mount {
var roFlag string var (
roFlag string
source string
parentLayerPaths []string
)
if sn.Kind == snapshots.KindView { if sn.Kind == snapshots.KindView {
roFlag = "ro" roFlag = "ro"
@ -236,14 +240,21 @@ func (s *snapshotter) mounts(sn storage.Snapshot) []mount.Mount {
roFlag = "rw" roFlag = "rw"
} }
parentLayerPaths := s.parentIDsToParentPaths(sn.ParentIDs) if len(sn.ParentIDs) == 0 || sn.Kind == snapshots.KindActive {
source = s.getSnapshotDir(sn.ID)
parentLayerPaths = s.parentIDsToParentPaths(sn.ParentIDs)
} else {
source = s.getSnapshotDir(sn.ParentIDs[0])
parentLayerPaths = s.parentIDsToParentPaths(sn.ParentIDs[1:])
}
// error is not checked here, as a string array will never fail to Marshal // error is not checked here, as a string array will never fail to Marshal
parentLayersJSON, _ := json.Marshal(parentLayerPaths) parentLayersJSON, _ := json.Marshal(parentLayerPaths)
parentLayersOption := mount.ParentLayerPathsFlag + string(parentLayersJSON) parentLayersOption := mount.ParentLayerPathsFlag + string(parentLayersJSON)
var mounts []mount.Mount var mounts []mount.Mount
mounts = append(mounts, mount.Mount{ mounts = append(mounts, mount.Mount{
Source: s.getSnapshotDir(sn.ID), Source: source,
Type: "windows-layer", Type: "windows-layer",
Options: []string{ Options: []string{
roFlag, roFlag,
@ -270,16 +281,7 @@ func (s *snapshotter) createSnapshot(ctx context.Context, kind snapshots.Kind, k
return nil, errors.Wrap(err, "failed to create snapshot") return nil, errors.Wrap(err, "failed to create snapshot")
} }
switch kind { if kind == snapshots.KindActive {
case snapshots.KindView:
var parentID string
if len(newSnapshot.ParentIDs) != 0 {
parentID = newSnapshot.ParentIDs[0]
}
if err := hcsshim.CreateLayer(s.info, newSnapshot.ID, parentID); err != nil {
return nil, errors.Wrap(err, "failed to create layer")
}
case snapshots.KindActive:
parentLayerPaths := s.parentIDsToParentPaths(newSnapshot.ParentIDs) parentLayerPaths := s.parentIDsToParentPaths(newSnapshot.ParentIDs)
var parentPath string var parentPath string