@@ -576,7 +576,26 @@ def get_or_create_pod(self, pod_request_obj: k8s.V1Pod, context: Context) -> k8s
576
576
if self .reattach_on_restart :
577
577
pod = self .find_pod (pod_request_obj .metadata .namespace , context = context )
578
578
if pod :
579
- return pod
579
+ # If pod is terminated then delete the pod an create a new as not possible to get xcom
580
+ pod_phase = (
581
+ pod .status .phase if hasattr (pod , "status" ) and hasattr (pod .status , "phase" ) else None
582
+ )
583
+ if pod_phase and pod_phase not in (PodPhase .SUCCEEDED , PodPhase .FAILED ):
584
+ return pod
585
+
586
+ self .log .info (
587
+ "Found terminated old matching pod %s with labels %s" ,
588
+ pod .metadata .name ,
589
+ pod .metadata .labels ,
590
+ )
591
+
592
+ # if not required to delete the pod then keep old logic and not automatically create new pod
593
+ deleted_pod = self .process_pod_deletion (pod )
594
+ if not deleted_pod :
595
+ return pod
596
+
597
+ self .log .info ("Deleted pod to handle rerun and create new pod!" )
598
+
580
599
self .log .debug ("Starting pod:\n %s" , yaml .safe_dump (pod_request_obj .to_dict ()))
581
600
self .pod_manager .create_pod (pod = pod_request_obj )
582
601
return pod_request_obj
@@ -1067,7 +1086,7 @@ def kill_istio_sidecar(self, pod: V1Pod) -> None:
1067
1086
if self .KILL_ISTIO_PROXY_SUCCESS_MSG not in output_str :
1068
1087
raise AirflowException ("Error while deleting istio-proxy sidecar: %s" , output_str )
1069
1088
1070
- def process_pod_deletion (self , pod : k8s .V1Pod , * , reraise = True ):
1089
+ def process_pod_deletion (self , pod : k8s .V1Pod , * , reraise = True ) -> bool :
1071
1090
with _optionally_suppress (reraise = reraise ):
1072
1091
if pod is not None :
1073
1092
should_delete_pod = (self .on_finish_action == OnFinishAction .DELETE_POD ) or (
@@ -1080,8 +1099,10 @@ def process_pod_deletion(self, pod: k8s.V1Pod, *, reraise=True):
1080
1099
if should_delete_pod :
1081
1100
self .log .info ("Deleting pod: %s" , pod .metadata .name )
1082
1101
self .pod_manager .delete_pod (pod )
1083
- else :
1084
- self .log .info ("Skipping deleting pod: %s" , pod .metadata .name )
1102
+ return True
1103
+ self .log .info ("Skipping deleting pod: %s" , pod .metadata .name )
1104
+
1105
+ return False
1085
1106
1086
1107
def _build_find_pod_label_selector (self , context : Context | None = None , * , exclude_checked = True ) -> str :
1087
1108
labels = {
0 commit comments