Skip to content

Commit d43b1f4

Browse files
committed
Use an atomic label write
Signed-off-by: Tuomas Katila <[email protected]>
1 parent a669a98 commit d43b1f4

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

cmd/internal/labeler/labeler.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,26 @@ func createNumaNodeMappingLabel(mapping map[int][]string) string {
379379
return strings.Join(parts, "_")
380380
}
381381

382+
func (l *labeler) atomicPrintLabelsToFile(labelFile string) error {
383+
baseDir := filepath.Dir(labelFile)
384+
385+
d, err := os.MkdirTemp(baseDir, "labels")
386+
if err != nil {
387+
klog.Warning("could not create temporary directory, writing directly to destination")
388+
389+
return l.printLabelsToFile(labelFile)
390+
}
391+
defer os.RemoveAll(d)
392+
393+
tmpFile := filepath.Join(d, "labels.txt")
394+
395+
if err := l.printLabelsToFile(tmpFile); err != nil {
396+
return err
397+
}
398+
399+
return os.Rename(tmpFile, labelFile)
400+
}
401+
382402
func (l *labeler) printLabelsToFile(labelFile string) error {
383403
f, err := os.OpenFile(labelFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
384404
if err != nil {
@@ -448,7 +468,7 @@ func Run(sysfsDrmDir, nfdFeatureFile string, updateInterval time.Duration, scanR
448468
if l.labelsChanged {
449469
klog.V(1).Info("Writing labels")
450470

451-
if err := l.printLabelsToFile(nfdFeatureFile); err != nil {
471+
if err := l.atomicPrintLabelsToFile(nfdFeatureFile); err != nil {
452472
klog.Warningf("failed to write labels to file: %+v", err)
453473

454474
// Reset labels so that next time the labeler runs the writing is retried.

0 commit comments

Comments
 (0)