MCPcopy Create free account
hub / github.com/facebook/time / Run

Method Run

fbclock/daemon/daemon.go:635–685  ·  view source on GitHub ↗

Run a daemon

(ctx context.Context)

Source from the content-addressed store, hash-verified

633 }
634 }
635 }
636}
637
638// Run a daemon
639func (s *Daemon) Run(ctx context.Context) error {
640 shm, err := fbclock.OpenFBClockSHMv1()
641 if err != nil {
642 return fmt.Errorf("opening fbclock shm: %w", err)
643 }
644 defer shm.Close()
645
646 if s.cfg.LinearizabilityTestInterval != 0 {
647 go s.runLinearizabilityTests(ctx)
648 }
649
650 if s.cfg.EnableDataV2 {
651 shmv2, err := fbclock.OpenFBClockSHMv2()
652 if err != nil {
653 return fmt.Errorf("opening fbclock shm v2: %w", err)
654 }
655 defer shmv2.Close()
656 go s.populateDataV2(shmv2)
657 }
658
659 ticker := time.NewTicker(s.cfg.Interval)
660 defer ticker.Stop()
661 for ; true; <-ticker.C { // first run without delay, then at interval
662 data, err := s.FetchStats(s.cfg)
663 if err != nil {
664 log.Error(err)
665 s.stats.UpdateCounterBy("data_error", 1)
666 continue
667 }
668 s.stats.SetCounter("data_error", 0)
669 // get PHC freq adjustment
670 freqPPB, err := s.getPHCFreqPPB()
671 if err != nil {
672 return err
673 }
674 data.FreqAdjustmentPPB = freqPPB
675 if err := s.doWork(shm, data); err != nil {
676 if errors.Is(err, errNoPHC) {
677 return err
678 } else if errors.Is(err, errCorrectness) {
679 log.Warning(err)
680 } else {
681 log.Error(err)
682 }
683 s.stats.UpdateCounterBy("processing_error", 1)
684 continue
685 }
686 s.stats.SetCounter("processing_error", 0)
687 }
688 return nil

Callers

nothing calls this directly

Calls 11

populateDataV2Method · 0.95
doWorkMethod · 0.95
OpenFBClockSHMv1Function · 0.92
OpenFBClockSHMv2Function · 0.92
CloseMethod · 0.65
FetchStatsMethod · 0.65
UpdateCounterByMethod · 0.65
SetCounterMethod · 0.65
StopMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected