code: func (a *AuthServer) runPeriodicOperations() {
  	// run periodic functions with a semi-random period
  	// to avoid contention on the database in case if there are multiple
  	// auth servers running - so they don't compete trying
  	// to update the same resources.
  	r := rand.New(rand.NewSource(a.GetClock().Now().UnixNano()))
  	period := defaults.HighResPollingPeriod + time.Duration(r.Intn(int(defaults.HighResPollingPeriod/time.Second)))*time.Second
  	log.Debugf("Ticking with period: %v.", period)
  	ticker := time.NewTicker(period)
  	defer ticker.Stop()
  	for {
  		select {
  		case <-a.closeCtx.Done():
  			return
  		case <-ticker.C:
  			err := a.autoRotateCertAuthorities()
  			if err != nil {
  				if trace.IsCompareFailed(err) {
  					log.Debugf("Cert authority has been updated concurrently: %v.", err)
  				} else {
  					log.Errorf("Failed to perform cert rotation check: %v.", err)
  				}
  			}
  		}
  	}
  }
docs: // runPeriodicOperations runs some periodic bookkeeping operations
  // performed by auth server