func()

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())
			}
		}
	}
}