|
1 |
| -// Copyright (c) 2018, 2024, Oracle and/or its affiliates. |
| 1 | +// Copyright (c) 2018, 2025, Oracle and/or its affiliates. |
2 | 2 | // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
|
3 | 3 |
|
4 | 4 | package oracle.kubernetes.operator.helpers;
|
5 | 5 |
|
6 | 6 | import java.time.OffsetDateTime;
|
| 7 | +import java.time.temporal.ChronoUnit; |
7 | 8 | import java.util.ArrayList;
|
8 | 9 | import java.util.Collection;
|
9 | 10 | import java.util.Collections;
|
|
60 | 61 | import static oracle.kubernetes.common.logging.MessageKeys.INTROSPECTOR_FLUENTD_CONTAINER_TERMINATED;
|
61 | 62 | import static oracle.kubernetes.common.logging.MessageKeys.INTROSPECTOR_JOB_FAILED;
|
62 | 63 | import static oracle.kubernetes.common.logging.MessageKeys.INTROSPECTOR_JOB_FAILED_DETAIL;
|
| 64 | +import static oracle.kubernetes.common.logging.MessageKeys.JOB_DEADLINE_EXCEEDED_MESSAGE; |
63 | 65 | import static oracle.kubernetes.operator.DomainSourceType.FROM_MODEL;
|
64 | 66 | import static oracle.kubernetes.operator.DomainStatusUpdater.createIntrospectionFailureSteps;
|
65 | 67 | import static oracle.kubernetes.operator.DomainStatusUpdater.createRemoveFailuresStep;
|
@@ -208,6 +210,18 @@ private static class IntrospectionStartStep extends Step {
|
208 | 210 |
|
209 | 211 | }
|
210 | 212 |
|
| 213 | + private static boolean isJobPodTimedOut(V1Pod jobPod) { |
| 214 | + return "DeadlineExceeded".equals(getJobPodStatusReason(jobPod)); |
| 215 | + } |
| 216 | + |
| 217 | + private static String getJobPodStatusReason(V1Pod jobPod) { |
| 218 | + return Optional.ofNullable(jobPod.getStatus()).map(V1PodStatus::getReason).orElse(null); |
| 219 | + } |
| 220 | + |
| 221 | + private static boolean isJobTimedOut(V1Job job) { |
| 222 | + return "DeadlineExceeded".equals(JobWatcher.getFailedReason(job)); |
| 223 | + } |
| 224 | + |
211 | 225 | private static class IntrospectorJobStepContext extends JobStepContext {
|
212 | 226 |
|
213 | 227 | IntrospectorJobStepContext(Packet packet) {
|
@@ -861,14 +875,6 @@ protected Throwable createTerminationException(Packet packet) {
|
861 | 875 | return new JobWatcher.DeadlineExceededException((V1Job) packet.get(DOMAIN_INTROSPECTOR_JOB));
|
862 | 876 | }
|
863 | 877 |
|
864 |
| - private boolean isJobPodTimedOut(V1Pod jobPod) { |
865 |
| - return "DeadlineExceeded".equals(getJobPodStatusReason(jobPod)); |
866 |
| - } |
867 |
| - |
868 |
| - private String getJobPodStatusReason(V1Pod jobPod) { |
869 |
| - return Optional.ofNullable(jobPod.getStatus()).map(V1PodStatus::getReason).orElse(null); |
870 |
| - } |
871 |
| - |
872 | 878 | private Step createIntrospectorConfigMap() {
|
873 | 879 | return ConfigMapHelper.createIntrospectorConfigMapStep(null);
|
874 | 880 | }
|
@@ -955,7 +961,21 @@ private static void logIntrospectorFailure(Packet packet, V1Job domainIntrospect
|
955 | 961 | domainIntrospectorJob.getMetadata().getNamespace(),
|
956 | 962 | domainIntrospectorJob.getMetadata().getName(),
|
957 | 963 | domainIntrospectorJob.toString());
|
| 964 | + if (isJobTimedOut(domainIntrospectorJob) || (jobPod != null && isJobPodTimedOut(jobPod))) { |
| 965 | + LOGGER.info(JOB_DEADLINE_EXCEEDED_MESSAGE, |
| 966 | + Optional.of(domainIntrospectorJob).map(V1Job::getMetadata).map(V1ObjectMeta::getName).orElse(""), |
| 967 | + Optional.of(domainIntrospectorJob).map(V1Job::getSpec) |
| 968 | + .map(V1JobSpec::getActiveDeadlineSeconds).map(Object::toString).orElse(""), |
| 969 | + getJobStartedSeconds(domainIntrospectorJob)); |
| 970 | + } |
| 971 | + } |
| 972 | + } |
| 973 | + |
| 974 | + private static long getJobStartedSeconds(V1Job job) { |
| 975 | + if (job.getStatus() != null && job.getStatus().getStartTime() != null) { |
| 976 | + return ChronoUnit.SECONDS.between(job.getStatus().getStartTime(), SystemClock.now()); |
958 | 977 | }
|
| 978 | + return -1; |
959 | 979 | }
|
960 | 980 |
|
961 | 981 | private static String getName(V1Pod pod) {
|
|
0 commit comments