Skip to content

Commit b167a8c

Browse files
committed
Merge remote-tracking branch 'google/master' into dependabot/go_modules/github.com/cyphar/filepath-securejoin-0.2.4
2 parents 9c604ae + 6c0ca3e commit b167a8c

File tree

8 files changed

+89
-47
lines changed

8 files changed

+89
-47
lines changed

cmd/cadvisor.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,13 @@ func init() {
100100
optstr := container.AllMetrics.String()
101101
flag.Var(&ignoreMetrics, "disable_metrics", fmt.Sprintf("comma-separated list of `metrics` to be disabled. Options are %s.", optstr))
102102
flag.Var(&enableMetrics, "enable_metrics", fmt.Sprintf("comma-separated list of `metrics` to be enabled. If set, overrides 'disable_metrics'. Options are %s.", optstr))
103-
104-
// Default logging verbosity to V(2)
105-
_ = flag.Set("v", "2")
106103
}
107104

108105
func main() {
109106
klog.InitFlags(nil)
110107
defer klog.Flush()
108+
// Default logging verbosity to V(2)
109+
_ = flag.Set("v", "2")
111110
flag.Parse()
112111

113112
if *versionFlag {

cmd/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ require (
4545
github.com/containerd/console v1.0.3 // indirect
4646
github.com/containerd/ttrpc v1.2.2 // indirect
4747
github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534 // indirect
48-
github.com/cyphar/filepath-securejoin v0.2.3 // indirect
48+
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
4949
github.com/davecgh/go-spew v1.1.1 // indirect
5050
github.com/docker/distribution v2.8.1+incompatible // indirect
51-
github.com/docker/docker v20.10.21+incompatible // indirect
51+
github.com/docker/docker v20.10.24+incompatible // indirect
5252
github.com/docker/go-connections v0.4.0 // indirect
5353
github.com/docker/go-units v0.5.0 // indirect
5454
github.com/eapache/go-resiliency v1.3.0 // indirect

cmd/go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,15 @@ github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY
9191
github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534 h1:rtAn27wIbmOGUs7RIbVgPEjb31ehTVniDwPGXyMxm5U=
9292
github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
9393
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
94-
github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI=
95-
github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
94+
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
95+
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
9696
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
9797
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
9898
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
9999
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
100100
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
101-
github.com/docker/docker v20.10.21+incompatible h1:UTLdBmHk3bEY+w8qeO5KttOhy6OmXWsl/FEet9Uswog=
102-
github.com/docker/docker v20.10.21+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
101+
github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE=
102+
github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
103103
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
104104
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
105105
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=

container/libcontainer/handler.go

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import (
3939
)
4040

4141
var (
42-
whitelistedUlimits = [...]string{"max_open_files"}
4342
referencedResetInterval = flag.Uint64("referenced_reset_interval", 0,
4443
"Reset interval for referenced bytes (container_referenced_bytes metric), number of measurement cycles after which referenced bytes are cleared, if set to 0 referenced bytes are never cleared (default: 0)")
4544

@@ -205,51 +204,53 @@ func parseUlimit(value string) (int64, error) {
205204
return num, nil
206205
}
207206

208-
func isUlimitWhitelisted(name string) bool {
209-
for _, whitelist := range whitelistedUlimits {
210-
if name == whitelist {
211-
return true
212-
}
213-
}
214-
return false
215-
}
216-
217207
func processLimitsFile(fileData string) []info.UlimitSpec {
208+
const maxOpenFilesLinePrefix = "Max open files"
209+
218210
limits := strings.Split(fileData, "\n")
219211
ulimits := make([]info.UlimitSpec, 0, len(limits))
220212
for _, lim := range limits {
221213
// Skip any headers/footers
222-
if strings.HasPrefix(lim, "Max") {
223-
224-
// Line format: Max open files 16384 16384 files
225-
fields := regexp.MustCompile(`[\s]{2,}`).Split(lim, -1)
226-
name := strings.Replace(strings.ToLower(strings.TrimSpace(fields[0])), " ", "_", -1)
227-
228-
found := isUlimitWhitelisted(name)
229-
if !found {
230-
continue
231-
}
232-
233-
soft := strings.TrimSpace(fields[1])
234-
softNum, softErr := parseUlimit(soft)
235-
236-
hard := strings.TrimSpace(fields[2])
237-
hardNum, hardErr := parseUlimit(hard)
238-
239-
// Omit metric if there were any parsing errors
240-
if softErr == nil && hardErr == nil {
241-
ulimitSpec := info.UlimitSpec{
242-
Name: name,
243-
SoftLimit: int64(softNum),
244-
HardLimit: int64(hardNum),
245-
}
246-
ulimits = append(ulimits, ulimitSpec)
214+
if strings.HasPrefix(lim, "Max open files") {
215+
// Remove line prefix
216+
ulimit, err := processMaxOpenFileLimitLine(
217+
"max_open_files",
218+
lim[len(maxOpenFilesLinePrefix):],
219+
)
220+
if err == nil {
221+
ulimits = append(ulimits, ulimit)
247222
}
248223
}
249224
}
250225
return ulimits
251226
}
252227

228+
// Any caller of processMaxOpenFileLimitLine must ensure that the name prefix is already removed from the limit line.
229+
// with the "Max open files" prefix.
230+
func processMaxOpenFileLimitLine(name, line string) (info.UlimitSpec, error) {
231+
// Remove any leading whitespace
232+
line = strings.TrimSpace(line)
233+
// Split on whitespace
234+
fields := strings.Fields(line)
235+
if len(fields) != 3 {
236+
return info.UlimitSpec{}, fmt.Errorf("unable to parse max open files line: %s", line)
237+
}
238+
// The first field is the soft limit, the second is the hard limit
239+
soft, err := parseUlimit(fields[0])
240+
if err != nil {
241+
return info.UlimitSpec{}, err
242+
}
243+
hard, err := parseUlimit(fields[1])
244+
if err != nil {
245+
return info.UlimitSpec{}, err
246+
}
247+
return info.UlimitSpec{
248+
Name: name,
249+
SoftLimit: soft,
250+
HardLimit: hard,
251+
}, nil
252+
}
253+
253254
func processRootProcUlimits(rootFs string, rootPid int) []info.UlimitSpec {
254255
filePath := path.Join(rootFs, "/proc", strconv.Itoa(rootPid), "limits")
255256
out, err := os.ReadFile(filePath)

container/libcontainer/handler_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,3 +296,28 @@ func TestClearReferencedBytesWhenClearRefsMissing(t *testing.T) {
296296
err := clearReferencedBytes(pids, 0, 1)
297297
assert.Nil(t, err)
298298
}
299+
300+
var ulimits []info.UlimitSpec
301+
302+
func BenchmarkProcessLimitsFile(b *testing.B) {
303+
content, err := os.ReadFile("testdata/limits")
304+
assert.Nil(b, err)
305+
306+
b.ResetTimer()
307+
for i := 0; i < b.N; i++ {
308+
ulimits = processLimitsFile(string(content))
309+
}
310+
311+
// Ensure the compiler doesn't optimize away the benchmark
312+
_ = ulimits
313+
}
314+
315+
func TestProcessMaxOpenFileLimitLine(t *testing.T) {
316+
line := " 1073741816 1073741816 files "
317+
318+
ulimit, err := processMaxOpenFileLimitLine("max_open_files", line)
319+
assert.Nil(t, err)
320+
assert.Equal(t, "max_open_files", ulimit.Name)
321+
assert.Equal(t, int64(1073741816), ulimit.SoftLimit)
322+
assert.Equal(t, int64(1073741816), ulimit.HardLimit)
323+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
Limit Soft Limit Hard Limit Units
2+
Max cpu time unlimited unlimited seconds
3+
Max file size unlimited unlimited bytes
4+
Max data size unlimited unlimited bytes
5+
Max stack size 8388608 unlimited bytes
6+
Max core file size unlimited unlimited bytes
7+
Max resident set unlimited unlimited bytes
8+
Max processes 119958 119958 processes
9+
Max open files 1073741816 1073741816 files
10+
Max locked memory 3932852224 3932852224 bytes
11+
Max address space unlimited unlimited bytes
12+
Max file locks unlimited unlimited locks
13+
Max pending signals 119958 119958 signals
14+
Max msgqueue size 819200 819200 bytes
15+
Max nice priority 0 0
16+
Max realtime priority 0 0
17+
Max realtime timeout unlimited unlimited us

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ require (
4545
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
4646
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
4747
github.com/davecgh/go-spew v1.1.1 // indirect
48-
github.com/docker/distribution v2.8.1+incompatible // indirect
48+
github.com/docker/distribution v2.8.2+incompatible // indirect
4949
github.com/go-logr/logr v1.2.0 // indirect
5050
github.com/godbus/dbus/v5 v5.0.6 // indirect
5151
github.com/golang/protobuf v1.5.3 // indirect

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG
8080
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
8181
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
8282
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
83-
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
84-
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
83+
github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
84+
github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
8585
github.com/docker/docker v20.10.21+incompatible h1:UTLdBmHk3bEY+w8qeO5KttOhy6OmXWsl/FEet9Uswog=
8686
github.com/docker/docker v20.10.21+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
8787
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=

0 commit comments

Comments
 (0)