func (v *volume) heartbeatContinuously(logger lager.Logger, pacemaker clock.Ticker, initialTTL time.Duration) { defer v.heartbeating.Done() defer pacemaker.Stop() logger.Debug("start") defer logger.Debug("done") ttlToSet := initialTTL for { select { case <-pacemaker.C(): ttl, found, err := v.db.GetVolumeTTL(v.Handle()) if err != nil { logger.Error("failed-to-lookup-ttl", err) } else { if !found { logger.Info("volume-expired-from-database") return } ttlToSet = ttl } v.heartbeat(logger.Session("tick"), ttlToSet) case finalTTL := <-v.release: if finalTTL != nil { v.heartbeat(logger.Session("final"), *finalTTL) } return } } }
func (container *gardenWorkerContainer) heartbeat(pacemaker clock.Ticker) { defer container.heartbeating.Done() defer pacemaker.Stop() for { select { case <-pacemaker.C(): container.SetProperty("keepalive", fmt.Sprintf("%d", container.clock.Now().Unix())) case <-container.stopHeartbeating: return } } }
func (container *gardenWorkerContainer) heartbeatContinuously(logger lager.Logger, pacemaker clock.Ticker) { defer container.heartbeating.Done() defer pacemaker.Stop() logger.Debug("start") defer logger.Debug("done") for { select { case <-pacemaker.C(): container.heartbeat(logger.Session("tick"), ContainerTTL) case finalTTL := <-container.release: if finalTTL != nil { container.heartbeat(logger.Session("final"), *finalTTL) } return } } }