Browse code

pkg/sysinfo.New(), daemon.RawSysInfo(): remove "quiet" argument

The "quiet" argument was only used in a single place (at daemon startup), and
every other use had to pass "false" to prevent this function from logging
warnings.

Now that SysInfo contains the warnings that occurred when collecting the
system information, we can make leave it up to the caller to use those
warnings (and log them if wanted).

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

Sebastiaan van Stijn authored on 2021/07/14 23:45:02
Showing 15 changed files
... ...
@@ -478,14 +478,14 @@ func warnOnDeprecatedConfigOptions(config *config.Config) {
478 478
 func initRouter(opts routerOptions) {
479 479
 	decoder := runconfig.ContainerDecoder{
480 480
 		GetSysInfo: func() *sysinfo.SysInfo {
481
-			return opts.daemon.RawSysInfo(true)
481
+			return opts.daemon.RawSysInfo()
482 482
 		},
483 483
 	}
484 484
 
485 485
 	routers := []router.Router{
486 486
 		// we need to add the checkpoint router before the container router or the DELETE gets masked
487 487
 		checkpointrouter.NewRouter(opts.daemon, decoder),
488
-		container.NewRouter(opts.daemon, decoder, opts.daemon.RawSysInfo(true).CgroupUnified),
488
+		container.NewRouter(opts.daemon, decoder, opts.daemon.RawSysInfo().CgroupUnified),
489 489
 		image.NewRouter(opts.daemon.ImageService()),
490 490
 		systemrouter.NewRouter(opts.daemon, opts.cluster, opts.buildkit, opts.features),
491 491
 		volume.NewRouter(opts.daemon.VolumesService()),
... ...
@@ -1050,7 +1050,10 @@ func NewDaemon(ctx context.Context, config *config.Config, pluginStore *plugin.S
1050 1050
 		return nil, err
1051 1051
 	}
1052 1052
 
1053
-	sysInfo := d.RawSysInfo(false)
1053
+	sysInfo := d.RawSysInfo()
1054
+	for _, w := range sysInfo.Warnings {
1055
+		logrus.Warn(w)
1056
+	}
1054 1057
 	// Check if Devices cgroup is mounted, it is hard requirement for container security,
1055 1058
 	// on Linux.
1056 1059
 	if runtime.GOOS == "linux" && !sysInfo.CgroupDevicesEnabled && !userns.RunningInUserNS() {
... ...
@@ -666,7 +666,7 @@ func verifyPlatformContainerSettings(daemon *Daemon, hostConfig *containertypes.
666 666
 	if hostConfig == nil {
667 667
 		return nil, nil
668 668
 	}
669
-	sysInfo := daemon.RawSysInfo(true)
669
+	sysInfo := daemon.RawSysInfo()
670 670
 
671 671
 	w, err := verifyPlatformContainerResources(&hostConfig.Resources, sysInfo, update)
672 672
 
... ...
@@ -1718,14 +1718,14 @@ func (daemon *Daemon) setupSeccompProfile() error {
1718 1718
 }
1719 1719
 
1720 1720
 // RawSysInfo returns *sysinfo.SysInfo .
1721
-func (daemon *Daemon) RawSysInfo(quiet bool) *sysinfo.SysInfo {
1721
+func (daemon *Daemon) RawSysInfo() *sysinfo.SysInfo {
1722 1722
 	var siOpts []sysinfo.Opt
1723 1723
 	if daemon.getCgroupDriver() == cgroupSystemdDriver {
1724 1724
 		if euid := os.Getenv("ROOTLESSKIT_PARENT_EUID"); euid != "" {
1725 1725
 			siOpts = append(siOpts, sysinfo.WithCgroup2GroupPath("/user.slice/user-"+euid+".slice"))
1726 1726
 		}
1727 1727
 	}
1728
-	return sysinfo.New(quiet, siOpts...)
1728
+	return sysinfo.New(siOpts...)
1729 1729
 }
1730 1730
 
1731 1731
 func recursiveUnmount(target string) error {
... ...
@@ -13,6 +13,6 @@ func setupResolvConf(config *config.Config) {
13 13
 }
14 14
 
15 15
 // RawSysInfo returns *sysinfo.SysInfo .
16
-func (daemon *Daemon) RawSysInfo(quiet bool) *sysinfo.SysInfo {
17
-	return sysinfo.New(quiet)
16
+func (daemon *Daemon) RawSysInfo() *sysinfo.SysInfo {
17
+	return sysinfo.New()
18 18
 }
... ...
@@ -652,6 +652,6 @@ func setupResolvConf(config *config.Config) {
652 652
 }
653 653
 
654 654
 // RawSysInfo returns *sysinfo.SysInfo .
655
-func (daemon *Daemon) RawSysInfo(quiet bool) *sysinfo.SysInfo {
656
-	return sysinfo.New(quiet)
655
+func (daemon *Daemon) RawSysInfo() *sysinfo.SysInfo {
656
+	return sysinfo.New()
657 657
 }
... ...
@@ -30,7 +30,7 @@ import (
30 30
 func (daemon *Daemon) SystemInfo() *types.Info {
31 31
 	defer metrics.StartTimer(hostInfoFunctions.WithValues("system_info"))()
32 32
 
33
-	sysInfo := daemon.RawSysInfo(true)
33
+	sysInfo := daemon.RawSysInfo()
34 34
 	cRunning, cPaused, cStopped := stateCtr.get()
35 35
 
36 36
 	v := &types.Info{
... ...
@@ -824,7 +824,7 @@ func WithCgroups(daemon *Daemon, c *container.Container) coci.SpecOpts {
824 824
 		}
825 825
 
826 826
 		// FIXME this is very expensive way to check if cpu rt is supported
827
-		sysInfo := daemon.RawSysInfo(true)
827
+		sysInfo := daemon.RawSysInfo()
828 828
 		if !sysInfo.CPURealtime {
829 829
 			return errors.New("daemon-scoped cpu-rt-period and cpu-rt-runtime are not supported by the kernel")
830 830
 		}
... ...
@@ -699,7 +699,7 @@ func (s *DockerSuite) TestRunSwapLessThanMemoryLimit(c *testing.T) {
699 699
 func (s *DockerSuite) TestRunInvalidCpusetCpusFlagValue(c *testing.T) {
700 700
 	testRequires(c, cgroupCpuset, testEnv.IsLocalDaemon)
701 701
 
702
-	sysInfo := sysinfo.New(true)
702
+	sysInfo := sysinfo.New()
703 703
 	cpus, err := parsers.ParseUintList(sysInfo.Cpus)
704 704
 	assert.NilError(c, err)
705 705
 	var invalid int
... ...
@@ -718,7 +718,7 @@ func (s *DockerSuite) TestRunInvalidCpusetCpusFlagValue(c *testing.T) {
718 718
 func (s *DockerSuite) TestRunInvalidCpusetMemsFlagValue(c *testing.T) {
719 719
 	testRequires(c, cgroupCpuset)
720 720
 
721
-	sysInfo := sysinfo.New(true)
721
+	sysInfo := sysinfo.New()
722 722
 	mems, err := parsers.ParseUintList(sysInfo.Mems)
723 723
 	assert.NilError(c, err)
724 724
 	var invalid int
... ...
@@ -84,6 +84,6 @@ func overlayFSSupported() bool {
84 84
 
85 85
 func init() {
86 86
 	if testEnv.IsLocalDaemon() {
87
-		SysInfo = sysinfo.New(true)
87
+		SysInfo = sysinfo.New()
88 88
 	}
89 89
 }
... ...
@@ -12,7 +12,7 @@ import (
12 12
 	"github.com/sirupsen/logrus"
13 13
 )
14 14
 
15
-func newV2(quiet bool, options ...Opt) *SysInfo {
15
+func newV2(options ...Opt) *SysInfo {
16 16
 	sysInfo := &SysInfo{
17 17
 		CgroupUnified: true,
18 18
 		cg2GroupPath:  "/",
... ...
@@ -53,11 +53,6 @@ func newV2(quiet bool, options ...Opt) *SysInfo {
53 53
 	for _, o := range ops {
54 54
 		o(sysInfo)
55 55
 	}
56
-	if !quiet {
57
-		for _, w := range sysInfo.Warnings {
58
-			logrus.Warn(w)
59
-		}
60
-	}
61 56
 	return sysInfo
62 57
 }
63 58
 
... ...
@@ -45,16 +45,15 @@ func WithCgroup2GroupPath(g string) Opt {
45 45
 }
46 46
 
47 47
 // New returns a new SysInfo, using the filesystem to detect which features
48
-// the kernel supports. If `quiet` is `false` info.Warnings are printed in logs
49
-// whenever an error occurs or misconfigurations are present.
50
-func New(quiet bool, options ...Opt) *SysInfo {
48
+// the kernel supports.
49
+func New(options ...Opt) *SysInfo {
51 50
 	if cdcgroups.Mode() == cdcgroups.Unified {
52
-		return newV2(quiet, options...)
51
+		return newV2(options...)
53 52
 	}
54
-	return newV1(quiet)
53
+	return newV1()
55 54
 }
56 55
 
57
-func newV1(quiet bool) *SysInfo {
56
+func newV1() *SysInfo {
58 57
 	var (
59 58
 		err     error
60 59
 		sysInfo = &SysInfo{}
... ...
@@ -84,11 +83,6 @@ func newV1(quiet bool) *SysInfo {
84 84
 	for _, o := range ops {
85 85
 		o(sysInfo)
86 86
 	}
87
-	if !quiet {
88
-		for _, w := range sysInfo.Warnings {
89
-			logrus.Warn(w)
90
-		}
91
-	}
92 87
 	return sysInfo
93 88
 }
94 89
 
... ...
@@ -55,11 +55,7 @@ func TestCgroupEnabled(t *testing.T) {
55 55
 }
56 56
 
57 57
 func TestNew(t *testing.T) {
58
-	sysInfo := New(false)
59
-	assert.Assert(t, sysInfo != nil)
60
-	checkSysInfo(t, sysInfo)
61
-
62
-	sysInfo = New(true)
58
+	sysInfo := New()
63 59
 	assert.Assert(t, sysInfo != nil)
64 60
 	checkSysInfo(t, sysInfo)
65 61
 }
... ...
@@ -82,7 +78,7 @@ func TestNewAppArmorEnabled(t *testing.T) {
82 82
 		t.Skip("App Armor Must be Enabled")
83 83
 	}
84 84
 
85
-	sysInfo := New(true)
85
+	sysInfo := New()
86 86
 	assert.Assert(t, sysInfo.AppArmor)
87 87
 }
88 88
 
... ...
@@ -92,7 +88,7 @@ func TestNewAppArmorDisabled(t *testing.T) {
92 92
 		t.Skip("App Armor Must be Disabled")
93 93
 	}
94 94
 
95
-	sysInfo := New(true)
95
+	sysInfo := New()
96 96
 	assert.Assert(t, !sysInfo.AppArmor)
97 97
 }
98 98
 
... ...
@@ -102,7 +98,7 @@ func TestNewCgroupNamespacesEnabled(t *testing.T) {
102 102
 		t.Skip("cgroup namespaces must be enabled")
103 103
 	}
104 104
 
105
-	sysInfo := New(true)
105
+	sysInfo := New()
106 106
 	assert.Assert(t, sysInfo.CgroupNamespaces)
107 107
 }
108 108
 
... ...
@@ -112,7 +108,7 @@ func TestNewCgroupNamespacesDisabled(t *testing.T) {
112 112
 		t.Skip("cgroup namespaces must be disabled")
113 113
 	}
114 114
 
115
-	sysInfo := New(true)
115
+	sysInfo := New()
116 116
 	assert.Assert(t, !sysInfo.CgroupNamespaces)
117 117
 }
118 118
 
... ...
@@ -3,6 +3,6 @@
3 3
 package sysinfo // import "github.com/docker/docker/pkg/sysinfo"
4 4
 
5 5
 // New returns an empty SysInfo for non linux for now.
6
-func New(quiet bool, options ...Opt) *SysInfo {
6
+func New(options ...Opt) *SysInfo {
7 7
 	return &SysInfo{}
8 8
 }
... ...
@@ -21,7 +21,7 @@ func (r ContainerDecoder) DecodeConfig(src io.Reader) (*container.Config, *conta
21 21
 	if r.GetSysInfo != nil {
22 22
 		si = r.GetSysInfo()
23 23
 	} else {
24
-		si = sysinfo.New(true)
24
+		si = sysinfo.New()
25 25
 	}
26 26
 
27 27
 	return decodeContainerConfig(src, si)
... ...
@@ -47,7 +47,7 @@ func TestDecodeContainerConfig(t *testing.T) {
47 47
 			t.Fatal(err)
48 48
 		}
49 49
 
50
-		c, h, _, err := decodeContainerConfig(bytes.NewReader(b), sysinfo.New(true))
50
+		c, h, _, err := decodeContainerConfig(bytes.NewReader(b), sysinfo.New())
51 51
 		if err != nil {
52 52
 			t.Fatal(fmt.Errorf("Error parsing %s: %v", f, err))
53 53
 		}
... ...
@@ -131,5 +131,5 @@ func callDecodeContainerConfigIsolation(isolation string) (*container.Config, *c
131 131
 	if b, err = json.Marshal(w); err != nil {
132 132
 		return nil, nil, nil, fmt.Errorf("Error on marshal %s", err.Error())
133 133
 	}
134
-	return decodeContainerConfig(bytes.NewReader(b), sysinfo.New(true))
134
+	return decodeContainerConfig(bytes.NewReader(b), sysinfo.New())
135 135
 }