Skip to content
Snippets Groups Projects
Commit dabed2e0 authored by Than McIntosh's avatar Than McIntosh Committed by Cherry Mui
Browse files

[release-branch.go1.21] cmd/internal/cov: close counter data files eagerly

When reading the counter data files from a given pod, close the
underlying *os.File immediately after each one is read, as opposed to
using a deferred close in the loop (which will close them all at the
end of the function). Doing things this way avoids running into "too
many open files" when processing large clumps of counter data files.

Fixes #68491.
Updates #68468.

Change-Id: Ic1fe1d36c44d3f5d7318578cd18d0e65465d71d9
Reviewed-on: https://go-review.googlesource.com/c/go/+/598735


Reviewed-by: default avatarCherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit 35571182)
Reviewed-on: https://go-review.googlesource.com/c/go/+/599055
parent d149ce82
No related branches found
No related tags found
No related merge requests found
......@@ -204,15 +204,12 @@ func (r *CovDataReader) visitPod(p pods.Pod) error {
}
r.vis.VisitMetaDataFile(p.MetaFile, mfr)
// Read counter data files.
for k, cdf := range p.CounterDataFiles {
processCounterDataFile := func(cdf string, k int) error {
cf, err := os.Open(cdf)
if err != nil {
return r.fatal("opening counter data file %s: %s", cdf, err)
}
defer func(f *os.File) {
f.Close()
}(cf)
defer cf.Close()
var mr *MReader
mr, err = NewMreader(cf)
if err != nil {
......@@ -236,6 +233,14 @@ func (r *CovDataReader) visitPod(p pods.Pod) error {
r.vis.VisitFuncCounterData(data)
}
r.vis.EndCounterDataFile(cdf, cdr, p.Origins[k])
return nil
}
// Read counter data files.
for k, cdf := range p.CounterDataFiles {
if err := processCounterDataFile(cdf, k); err != nil {
return err
}
}
r.vis.EndCounters()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment