[lxc-devel] [lxd/master] i386/old kernel fixes
stgraber on Github
lxc-bot at linuxcontainers.org
Tue May 26 21:03:17 UTC 2020
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200526/85f90b5f/attachment.bin>
-------------- next part --------------
From 813785f1204f85fcedfb6123fd8a444bd26f6b5b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 26 May 2020 16:19:16 -0400
Subject: [PATCH 1/4] shared/subprocess: Ensure monitor routine exits
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
shared/subprocess/proc.go | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/shared/subprocess/proc.go b/shared/subprocess/proc.go
index 06157e6db0..bd490d428d 100644
--- a/shared/subprocess/proc.go
+++ b/shared/subprocess/proc.go
@@ -1,6 +1,7 @@
package subprocess
import (
+ "fmt"
"io/ioutil"
"os"
"os/exec"
@@ -13,9 +14,11 @@ import (
// Process struct. Has ability to set runtime arguments
type Process struct {
- exitCode int64 `yaml:"-"`
- exitErr error `yaml:"-"`
- chExit chan struct{} `yaml:"-"`
+ exitCode int64 `yaml:"-"`
+ exitErr error `yaml:"-"`
+
+ chExit chan struct{} `yaml:"-"`
+ hasMonitor bool `yaml:"-"`
Name string `yaml:"name"`
Args []string `yaml:"args,flow"`
@@ -48,6 +51,10 @@ func (p *Process) Stop() error {
}
}
+ if p.hasMonitor {
+ <-p.chExit
+ }
+
// Check if either the existence check or the kill resulted in an already finished error.
if strings.Contains(err.Error(), "process already finished") {
return ErrNotRunning
@@ -92,6 +99,7 @@ func (p *Process) Start() error {
p.Pid = int64(cmd.Process.Pid)
p.chExit = make(chan struct{})
+ p.hasMonitor = true
// Spawn a goroutine waiting for it to exit.
go func() {
@@ -177,6 +185,10 @@ func (p *Process) Signal(signal int64) error {
// Wait will wait for the given process object exit code
func (p *Process) Wait() (int64, error) {
+ if !p.hasMonitor {
+ return -1, fmt.Errorf("Unable to wait on process we didn't spawn")
+ }
+
<-p.chExit
return p.exitCode, p.exitErr
}
From f369612e66efe1dd002edec3fc4ee17503125b8f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 26 May 2020 16:34:58 -0400
Subject: [PATCH 2/4] shared/subprocess: Properly reset state
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
shared/subprocess/proc.go | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/shared/subprocess/proc.go b/shared/subprocess/proc.go
index bd490d428d..b5caf41068 100644
--- a/shared/subprocess/proc.go
+++ b/shared/subprocess/proc.go
@@ -98,10 +98,14 @@ func (p *Process) Start() error {
}
p.Pid = int64(cmd.Process.Pid)
- p.chExit = make(chan struct{})
- p.hasMonitor = true
+
+ // Reset exitCode/exitErr
+ p.exitCode = 0
+ p.exitErr = nil
// Spawn a goroutine waiting for it to exit.
+ p.chExit = make(chan struct{})
+ p.hasMonitor = true
go func() {
procstate, err := cmd.Process.Wait()
if err != nil {
From f861c17d172ba615ac3933d70a1f59c41841c50b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 26 May 2020 16:43:36 -0400
Subject: [PATCH 3/4] tests: Fix btrfs test on non-shiftfs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
test/suites/storage_driver_btrfs.sh | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/test/suites/storage_driver_btrfs.sh b/test/suites/storage_driver_btrfs.sh
index b5c483eb5a..85c3ac44bc 100644
--- a/test/suites/storage_driver_btrfs.sh
+++ b/test/suites/storage_driver_btrfs.sh
@@ -33,9 +33,13 @@ test_storage_driver_btrfs() {
lxc snapshot c1pool1 snap0
# Create some subvolumes and populate with test files. Mark the intermedia subvolume as read only.
+ OWNER="$(stat -c %u:%g "${LXD_DIR}/storage-pools/lxdtest-$(basename "${LXD_DIR}")-pool1/containers/c1pool1/rootfs")"
btrfs subvolume create "${LXD_DIR}/storage-pools/lxdtest-$(basename "${LXD_DIR}")-pool1/containers/c1pool1/rootfs/a"
+ chown "${OWNER}" "${LXD_DIR}/storage-pools/lxdtest-$(basename "${LXD_DIR}")-pool1/containers/c1pool1/rootfs/a"
btrfs subvolume create "${LXD_DIR}/storage-pools/lxdtest-$(basename "${LXD_DIR}")-pool1/containers/c1pool1/rootfs/a/b"
+ chown "${OWNER}" "${LXD_DIR}/storage-pools/lxdtest-$(basename "${LXD_DIR}")-pool1/containers/c1pool1/rootfs/a/b"
btrfs subvolume create "${LXD_DIR}/storage-pools/lxdtest-$(basename "${LXD_DIR}")-pool1/containers/c1pool1/rootfs/a/b/c"
+ chown "${OWNER}" "${LXD_DIR}/storage-pools/lxdtest-$(basename "${LXD_DIR}")-pool1/containers/c1pool1/rootfs/a/b/c"
lxc exec c1pool1 -- touch /a/a1.txt
lxc exec c1pool1 -- touch /a/b/b1.txt
lxc exec c1pool1 -- touch /a/b/c/c1.txt
From b99470f18932fc77df1b09053c9c96bc4c5e793a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 26 May 2020 17:00:50 -0400
Subject: [PATCH 4/4] tests: Old kernels don't let you rmdir btrfs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
test/suites/storage_driver_btrfs.sh | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/test/suites/storage_driver_btrfs.sh b/test/suites/storage_driver_btrfs.sh
index 85c3ac44bc..31fa6e63e9 100644
--- a/test/suites/storage_driver_btrfs.sh
+++ b/test/suites/storage_driver_btrfs.sh
@@ -101,7 +101,9 @@ test_storage_driver_btrfs() {
# Delete /a in c1pool1 and restore snap 1.
btrfs property set "${LXD_DIR}/storage-pools/lxdtest-$(basename "${LXD_DIR}")-pool1/containers/c1pool1/rootfs/a/b" ro false
- lxc exec c1pool1 -- rm -rf /a
+ btrfs subvol delete "${LXD_DIR}/storage-pools/lxdtest-$(basename "${LXD_DIR}")-pool1/containers/c1pool1/rootfs/a/b/c"
+ btrfs subvol delete "${LXD_DIR}/storage-pools/lxdtest-$(basename "${LXD_DIR}")-pool1/containers/c1pool1/rootfs/a/b"
+ btrfs subvol delete "${LXD_DIR}/storage-pools/lxdtest-$(basename "${LXD_DIR}")-pool1/containers/c1pool1/rootfs/a"
lxc restore c1pool1 snap1
lxc exec c1pool1 -- stat /a/a1.txt
lxc exec c1pool1 -- stat /a/b/b1.txt
More information about the lxc-devel
mailing list