Skip to content

Commit b8dc72a

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

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

cmd/internal/labeler/labeler.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,27 @@ 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+
392+
defer os.RemoveAll(d)
393+
394+
tmpFile := filepath.Join(d, "labels.txt")
395+
396+
if err := l.printLabelsToFile(tmpFile); err != nil {
397+
return err
398+
}
399+
400+
return os.Rename(tmpFile, labelFile)
401+
}
402+
382403
func (l *labeler) printLabelsToFile(labelFile string) error {
383404
f, err := os.OpenFile(labelFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
384405
if err != nil {
@@ -448,7 +469,7 @@ func Run(sysfsDrmDir, nfdFeatureFile string, updateInterval time.Duration, scanR
448469
if l.labelsChanged {
449470
klog.V(1).Info("Writing labels")
450471

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

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

0 commit comments

Comments
 (0)