in clusterloader2/pkg/measurement/common/service_creation_latency.go [476:525]
func (p *pingChecker) run() {
var key string
var err error
var svcType corev1.ServiceType
if p.svc != nil {
key, err = cache.DeletionHandlingMetaNamespaceKeyFunc(p.svc)
svcType = p.svc.Spec.Type
} else {
key, err = cache.DeletionHandlingMetaNamespaceKeyFunc(p.ingress)
svcType = ingressType
}
if err != nil {
klog.Errorf("%s: meta key created error: %v", p.callerName, err)
return
}
success := 0
for {
select {
case <-p.stopCh:
return
default:
// TODO(#685): Make ping checks less communication heavy.
pod, err := execservice.GetPod()
if err != nil {
klog.Warningf("call to execservice.GetPod() ended with error: %v", err)
success = 0
time.Sleep(pingBackoff)
continue
}
addresses := p.collectAddresses(pod)
for _, address := range addresses {
command := fmt.Sprintf("curl %s", address)
_, err = execservice.RunCommand(context.TODO(), pod, command)
if err != nil {
break
}
}
if err != nil {
success = 0
time.Sleep(pingBackoff)
continue
}
success++
if success == pingChecks {
p.creationTimes.Set(key, phaseName(reachabilityPhase, svcType), time.Now())
return
}
}
}
}