[lxc-devel] [lxd/master] storage: Add ioprogress.ProgressTracker field to storage
joelhockey on Github
lxc-bot at linuxcontainers.org
Sun Feb 3 22:10:05 UTC 2019
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 559 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190203/19f53baf/attachment.bin>
-------------- next part --------------
From 31c858fe97ace735ad9803975badc59da81af841 Mon Sep 17 00:00:00 2001
From: Joel Hockey <joelhockey at chromium.org>
Date: Sun, 3 Feb 2019 14:03:50 -0800
Subject: [PATCH] storage: Add ioprogress.ProgressTracker field to storage
This is part 4 of a series of patches to add better progress
tracking support for export and import.
Add a tracker field to ContainerCreateFromImage and ImageCreate
which can be used during Unpack.
Signed-off-by: Joel Hockey <joelhockey at chromium.org>
---
lxd/container.go | 5 +++--
lxd/containers_post.go | 4 ++--
lxd/images.go | 2 +-
lxd/storage.go | 4 ++--
lxd/storage_btrfs.go | 9 +++++----
lxd/storage_ceph.go | 7 ++++---
lxd/storage_dir.go | 5 +++--
lxd/storage_lvm.go | 5 +++--
lxd/storage_lvm_utils.go | 2 +-
lxd/storage_mock.go | 5 +++--
lxd/storage_zfs.go | 7 ++++---
11 files changed, 31 insertions(+), 24 deletions(-)
diff --git a/lxd/container.go b/lxd/container.go
index b255f8e07b..af06c744ff 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -25,6 +25,7 @@ import (
"github.com/lxc/lxd/shared"
"github.com/lxc/lxd/shared/api"
"github.com/lxc/lxd/shared/idmap"
+ "github.com/lxc/lxd/shared/ioprogress"
log "github.com/lxc/lxd/shared/log15"
"github.com/lxc/lxd/shared/logger"
"github.com/lxc/lxd/shared/osarch"
@@ -768,7 +769,7 @@ func containerCreateEmptySnapshot(s *state.State, args db.ContainerArgs) (contai
return c, nil
}
-func containerCreateFromImage(d *Daemon, args db.ContainerArgs, hash string) (container, error) {
+func containerCreateFromImage(d *Daemon, args db.ContainerArgs, hash string, tracker *ioprogress.ProgressTracker) (container, error) {
s := d.State()
// Get the image properties
@@ -827,7 +828,7 @@ func containerCreateFromImage(d *Daemon, args db.ContainerArgs, hash string) (co
}
// Now create the storage from an image
- err = c.Storage().ContainerCreateFromImage(c, hash)
+ err = c.Storage().ContainerCreateFromImage(c, hash, tracker)
if err != nil {
c.Delete()
return nil, errors.Wrap(err, "Create container from image")
diff --git a/lxd/containers_post.go b/lxd/containers_post.go
index 1ec8a6b3c6..ad6cdfb008 100644
--- a/lxd/containers_post.go
+++ b/lxd/containers_post.go
@@ -128,7 +128,7 @@ func createFromImage(d *Daemon, project string, req *api.ContainersPost) Respons
return err
}
- _, err = containerCreateFromImage(d, args, info.Fingerprint)
+ _, err = containerCreateFromImage(d, args, info.Fingerprint, nil)
return err
}
@@ -356,7 +356,7 @@ func createFromMigration(d *Daemon, project string, req *api.ContainersPost) Res
}
if ps.MigrationType() == migration.MigrationFSType_RSYNC {
- c, err = containerCreateFromImage(d, args, req.Source.BaseImage)
+ c, err = containerCreateFromImage(d, args, req.Source.BaseImage, nil)
if err != nil {
return InternalError(err)
}
diff --git a/lxd/images.go b/lxd/images.go
index 67db1b3c39..530d5a17b6 100644
--- a/lxd/images.go
+++ b/lxd/images.go
@@ -618,7 +618,7 @@ func imageCreateInPool(d *Daemon, info *api.Image, storagePool string) error {
// Create the storage volume for the image on the requested storage
// pool.
- err = s.ImageCreate(info.Fingerprint)
+ err = s.ImageCreate(info.Fingerprint, nil)
if err != nil {
return err
}
diff --git a/lxd/storage.go b/lxd/storage.go
index 3b2dca1ddc..3ed516ca2e 100644
--- a/lxd/storage.go
+++ b/lxd/storage.go
@@ -175,7 +175,7 @@ type storage interface {
ContainerCreate(container container) error
// ContainerCreateFromImage creates a container from a image.
- ContainerCreateFromImage(c container, fingerprint string) error
+ ContainerCreateFromImage(c container, fingerprint string, tracker *ioprogress.ProgressTracker) error
ContainerCanRestore(target container, source container) error
ContainerDelete(c container) error
ContainerCopy(target container, source container, containerOnly bool) error
@@ -201,7 +201,7 @@ type storage interface {
ContainerSnapshotCreateEmpty(c container) error
// Functions dealing with image storage volumes.
- ImageCreate(fingerprint string) error
+ ImageCreate(fingerprint string, tracker *ioprogress.ProgressTracker) error
ImageDelete(fingerprint string) error
ImageMount(fingerprint string) (bool, error)
ImageUmount(fingerprint string) (bool, error)
diff --git a/lxd/storage_btrfs.go b/lxd/storage_btrfs.go
index 26f6a95b26..e371848e12 100644
--- a/lxd/storage_btrfs.go
+++ b/lxd/storage_btrfs.go
@@ -22,6 +22,7 @@ import (
"github.com/lxc/lxd/lxd/util"
"github.com/lxc/lxd/shared"
"github.com/lxc/lxd/shared/api"
+ "github.com/lxc/lxd/shared/ioprogress"
"github.com/lxc/lxd/shared/logger"
)
@@ -868,7 +869,7 @@ func (s *storageBtrfs) ContainerCreate(container container) error {
}
// And this function is why I started hating on btrfs...
-func (s *storageBtrfs) ContainerCreateFromImage(container container, fingerprint string) error {
+func (s *storageBtrfs) ContainerCreateFromImage(container container, fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf("Creating BTRFS storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
source := s.pool.Config["source"]
@@ -911,7 +912,7 @@ func (s *storageBtrfs) ContainerCreateFromImage(container container, fingerprint
var imgerr error
if !shared.PathExists(imageMntPoint) || !isBtrfsSubVolume(imageMntPoint) {
- imgerr = s.ImageCreate(fingerprint)
+ imgerr = s.ImageCreate(fingerprint, tracker)
}
lxdStorageMapLock.Lock()
@@ -2005,7 +2006,7 @@ func (s *storageBtrfs) ContainerBackupLoad(info backupInfo, data io.ReadSeeker,
return s.doContainerBackupLoadVanilla(info, data, tarArgs)
}
-func (s *storageBtrfs) ImageCreate(fingerprint string) error {
+func (s *storageBtrfs) ImageCreate(fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf("Creating BTRFS storage volume for image \"%s\" on storage pool \"%s\"", fingerprint, s.pool.Name)
// Create the subvolume.
@@ -2057,7 +2058,7 @@ func (s *storageBtrfs) ImageCreate(fingerprint string) error {
// Unpack the image in imageMntPoint.
imagePath := shared.VarPath("images", fingerprint)
- err = unpackImage(imagePath, tmpImageSubvolumeName, storageTypeBtrfs, s.s.OS.RunningInUserNS, nil)
+ err = unpackImage(imagePath, tmpImageSubvolumeName, storageTypeBtrfs, s.s.OS.RunningInUserNS, tracker)
if err != nil {
return err
}
diff --git a/lxd/storage_ceph.go b/lxd/storage_ceph.go
index 8dc18784c0..8158e7a1dc 100644
--- a/lxd/storage_ceph.go
+++ b/lxd/storage_ceph.go
@@ -15,6 +15,7 @@ import (
"github.com/lxc/lxd/lxd/state"
"github.com/lxc/lxd/shared"
"github.com/lxc/lxd/shared/api"
+ "github.com/lxc/lxd/shared/ioprogress"
"github.com/lxc/lxd/shared/logger"
"github.com/pborman/uuid"
@@ -796,7 +797,7 @@ func (s *storageCeph) ContainerCreate(container container) error {
return nil
}
-func (s *storageCeph) ContainerCreateFromImage(container container, fingerprint string) error {
+func (s *storageCeph) ContainerCreateFromImage(container container, fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf(`Creating RBD storage volume for container "%s" on storage pool "%s"`, s.volume.Name, s.pool.Name)
revert := true
@@ -837,7 +838,7 @@ func (s *storageCeph) ContainerCreateFromImage(container container, fingerprint
}
if !ok {
- imgerr = s.ImageCreate(fingerprint)
+ imgerr = s.ImageCreate(fingerprint, tracker)
}
lxdStorageMapLock.Lock()
@@ -2083,7 +2084,7 @@ func (s *storageCeph) ContainerBackupLoad(info backupInfo, data io.ReadSeeker, t
return nil
}
-func (s *storageCeph) ImageCreate(fingerprint string) error {
+func (s *storageCeph) ImageCreate(fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf(`Creating RBD storage volume for image "%s" on storage pool "%s"`, fingerprint, s.pool.Name)
revert := true
diff --git a/lxd/storage_dir.go b/lxd/storage_dir.go
index fc32a9d939..6fe7b3e5b1 100644
--- a/lxd/storage_dir.go
+++ b/lxd/storage_dir.go
@@ -16,6 +16,7 @@ import (
"github.com/lxc/lxd/lxd/state"
"github.com/lxc/lxd/shared"
"github.com/lxc/lxd/shared/api"
+ "github.com/lxc/lxd/shared/ioprogress"
"github.com/lxc/lxd/shared/logger"
)
@@ -513,7 +514,7 @@ func (s *storageDir) ContainerCreate(container container) error {
return nil
}
-func (s *storageDir) ContainerCreateFromImage(container container, imageFingerprint string) error {
+func (s *storageDir) ContainerCreateFromImage(container container, imageFingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf("Creating DIR storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
_, err := s.StoragePoolMount()
@@ -1242,7 +1243,7 @@ func (s *storageDir) ContainerBackupLoad(info backupInfo, data io.ReadSeeker, ta
return nil
}
-func (s *storageDir) ImageCreate(fingerprint string) error {
+func (s *storageDir) ImageCreate(fingerprint string, tracker *ioprogress.ProgressTracker) error {
return nil
}
diff --git a/lxd/storage_lvm.go b/lxd/storage_lvm.go
index 91b1f9f413..cd1380894e 100644
--- a/lxd/storage_lvm.go
+++ b/lxd/storage_lvm.go
@@ -17,6 +17,7 @@ import (
"github.com/lxc/lxd/lxd/state"
"github.com/lxc/lxd/shared"
"github.com/lxc/lxd/shared/api"
+ "github.com/lxc/lxd/shared/ioprogress"
"github.com/lxc/lxd/shared/logger"
)
@@ -995,7 +996,7 @@ func (s *storageLvm) ContainerCreate(container container) error {
return nil
}
-func (s *storageLvm) ContainerCreateFromImage(container container, fingerprint string) error {
+func (s *storageLvm) ContainerCreateFromImage(container container, fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf("Creating LVM storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
tryUndo := true
@@ -1908,7 +1909,7 @@ func (s *storageLvm) doContainerBackupLoad(project, containerName string, privil
return containerPath, nil
}
-func (s *storageLvm) ImageCreate(fingerprint string) error {
+func (s *storageLvm) ImageCreate(fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf("Creating LVM storage volume for image \"%s\" on storage pool \"%s\"", fingerprint, s.pool.Name)
tryUndo := true
diff --git a/lxd/storage_lvm_utils.go b/lxd/storage_lvm_utils.go
index 77e7ad8372..e73fc0cffa 100644
--- a/lxd/storage_lvm_utils.go
+++ b/lxd/storage_lvm_utils.go
@@ -548,7 +548,7 @@ func (s *storageLvm) containerCreateFromImageThinLv(c container, fp string) erro
}
if !ok {
- imgerr = s.ImageCreate(fp)
+ imgerr = s.ImageCreate(fp, nil)
}
lxdStorageMapLock.Lock()
diff --git a/lxd/storage_mock.go b/lxd/storage_mock.go
index c5f2e23772..58c993f511 100644
--- a/lxd/storage_mock.go
+++ b/lxd/storage_mock.go
@@ -8,6 +8,7 @@ import (
"github.com/lxc/lxd/lxd/migration"
"github.com/lxc/lxd/lxd/state"
"github.com/lxc/lxd/shared/api"
+ "github.com/lxc/lxd/shared/ioprogress"
"github.com/lxc/lxd/shared/logger"
)
@@ -117,7 +118,7 @@ func (s *storageMock) ContainerCreate(container container) error {
}
func (s *storageMock) ContainerCreateFromImage(
- container container, imageFingerprint string) error {
+ container container, imageFingerprint string, tracker *ioprogress.ProgressTracker) error {
return nil
}
@@ -200,7 +201,7 @@ func (s *storageMock) ContainerBackupLoad(info backupInfo, data io.ReadSeeker, t
return nil
}
-func (s *storageMock) ImageCreate(fingerprint string) error {
+func (s *storageMock) ImageCreate(fingerprint string, tracker *ioprogress.ProgressTracker) error {
return nil
}
diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index 6eff09ff19..0c0f169f4b 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
@@ -19,6 +19,7 @@ import (
"github.com/lxc/lxd/lxd/util"
"github.com/lxc/lxd/shared"
"github.com/lxc/lxd/shared/api"
+ "github.com/lxc/lxd/shared/ioprogress"
"github.com/lxc/lxd/shared/logger"
"github.com/pborman/uuid"
@@ -851,7 +852,7 @@ func (s *storageZfs) ContainerCreate(container container) error {
return nil
}
-func (s *storageZfs) ContainerCreateFromImage(container container, fingerprint string) error {
+func (s *storageZfs) ContainerCreateFromImage(container container, fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf("Creating ZFS storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
containerPath := container.Path()
@@ -876,7 +877,7 @@ func (s *storageZfs) ContainerCreateFromImage(container container, fingerprint s
var imgerr error
if !zfsFilesystemEntityExists(poolName, fsImage) {
- imgerr = s.ImageCreate(fingerprint)
+ imgerr = s.ImageCreate(fingerprint, tracker)
}
lxdStorageMapLock.Lock()
@@ -2348,7 +2349,7 @@ func (s *storageZfs) ContainerBackupLoad(info backupInfo, data io.ReadSeeker, ta
// - mark new zfs volume images/<fingerprint> readonly
// - remove mountpoint property from zfs volume images/<fingerprint>
// - create read-write snapshot from zfs volume images/<fingerprint>
-func (s *storageZfs) ImageCreate(fingerprint string) error {
+func (s *storageZfs) ImageCreate(fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf("Creating ZFS storage volume for image \"%s\" on storage pool \"%s\"", fingerprint, s.pool.Name)
poolName := s.getOnDiskPoolName()
More information about the lxc-devel
mailing list