in clusterloader2/pkg/measurement/common/service_creation_latency.go [316:361]
func (p *pingChecker) run() {
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(p.svc)
if err != nil {
klog.Errorf("%s: meta key created error: %v", p.callerName, err)
return
}
success := 0
for {
select {
case <-p.stopCh:
return
default:
if _, exists := p.creationTimes.Get(key, phaseName(reachabilityPhase, p.svc.Spec.Type)); exists {
return
}
// 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
}
switch p.svc.Spec.Type {
case corev1.ServiceTypeClusterIP:
cmd := fmt.Sprintf("curl %s:%d", p.svc.Spec.ClusterIP, p.svc.Spec.Ports[0].Port)
_, err = execservice.RunCommand(pod, cmd)
case corev1.ServiceTypeNodePort:
cmd := fmt.Sprintf("curl %s:%d", pod.Status.HostIP, p.svc.Spec.Ports[0].NodePort)
_, err = execservice.RunCommand(pod, cmd)
case corev1.ServiceTypeLoadBalancer:
cmd := fmt.Sprintf("curl %s:%d", p.svc.Status.LoadBalancer.Ingress[0].IP, p.svc.Spec.Ports[0].Port)
_, err = execservice.RunCommand(pod, cmd)
}
if err != nil {
success = 0
time.Sleep(pingBackoff)
continue
}
success++
if success == pingChecks {
p.creationTimes.Set(key, phaseName(reachabilityPhase, p.svc.Spec.Type), time.Now())
}
}
}
}