Skip to content

Commit

Permalink
Added check for pod running (#202)
Browse files Browse the repository at this point in the history
yutachaos authored May 26, 2024
1 parent 1340cfc commit fdd5094
Showing 1 changed file with 42 additions and 1 deletion.
43 changes: 42 additions & 1 deletion controller.go
Original file line number Diff line number Diff line change
@@ -80,7 +80,7 @@ func NewController(
jobInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(new interface{}) {
newJob := new.(*batchv1.Job)
klog.Infof("Job Added: %v", newJob.Status)
klog.Infof("Job added: %v", newJob.Status)

if newJob.CreationTimestamp.Sub(serverStartTime).Seconds() < 0 {
return
@@ -92,6 +92,14 @@ func NewController(

klog.Infof("Job started: %v", newJob.Status)

jobPod, err := getPodFromControllerUID(kubeclientset, newJob)
err = waitForPodRunning(kubeclientset, jobPod)

if err != nil {
klog.Errorf("Error waiting for pod to become running: %v", jobPod)
return
}

cronJob, err := getCronJobNameFromOwnerReferences(kubeclientset, newJob)

if err != nil {
@@ -127,13 +135,22 @@ func NewController(
return
}

jobPod, err := getPodFromControllerUID(kubeclientset, newJob)
err = waitForPodRunning(kubeclientset, jobPod)

if err != nil {
klog.Errorf("Error waiting for pod to become running: %v", err)
return
}

if newJob.Status.Succeeded == intTrue {
klog.Infof("Job succeeded: Name: %s: Status: %v", newJob.Name, newJob.Status)
jobPod, err := getPodFromControllerUID(kubeclientset, newJob)
if err != nil {
klog.Errorf("Get pods failed: %v", err)
return
}

cronJobName, err := getCronJobNameFromOwnerReferences(kubeclientset, newJob)

if err != nil {
@@ -384,3 +401,27 @@ func getPodLogs(clientset kubernetes.Interface, pod corev1.Pod, containerName st
}
return str
}

func waitForPodRunning(clientset kubernetes.Interface, pod corev1.Pod) error {
pollInterval := 10 * time.Second

timeout := 20 * time.Minute
deadline := time.Now().Add(timeout)

for {
if time.Now().After(deadline) {
return fmt.Errorf("timeout waiting for pod to become running")
}

pod, err := clientset.CoreV1().Pods(pod.Namespace).Get(context.TODO(), pod.Name, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("error getting pod: %v", err)
}

if pod.Status.Phase != corev1.PodPending {
return nil
}

time.Sleep(pollInterval)
}
}

0 comments on commit fdd5094

Please sign in to comment.