Bläddra i källkod

fix: k8s job delete bug

claws 4 år sedan
förälder
incheckning
b8018eacae

+ 14 - 3
api/src/main/java/cn/seecoder/api/k8s/impl/JobApiImpl.java

@@ -83,15 +83,26 @@ public class JobApiImpl implements JobApi {
             );
             );
         } catch (ApiException e){
         } catch (ApiException e){
             LoggerUtil.error(logger, e, "删除Job失败,namespace={}, name={}, response={}", job.getNamespace(), job.getName(), e.getResponseBody());
             LoggerUtil.error(logger, e, "删除Job失败,namespace={}, name={}, response={}", job.getNamespace(), job.getName(), e.getResponseBody());
-
             if (e.getCode() == NOT_FOUND) {
             if (e.getCode() == NOT_FOUND) {
                 throw new K8sApiException(NOT_FOUND, "namespace不存在");
                 throw new K8sApiException(NOT_FOUND, "namespace不存在");
             }else {
             }else {
                 throw K8s_SYSTEM_ERROR_EXCEPTION;
                 throw K8s_SYSTEM_ERROR_EXCEPTION;
             }
             }
         } catch (Exception e){
         } catch (Exception e){
-            LoggerUtil.error(logger, e, "删除Job失败,namespace={}, name={}, response={}", job.getNamespace());
-            throw e;
+            // k8s api 删除job的时候存在bug
+            if (e.getCause() instanceof IllegalStateException) {
+                IllegalStateException ise = (IllegalStateException) e.getCause();
+                if (ise.getMessage() != null && ise.getMessage().contains("Expected a string but was BEGIN_OBJECT")) {
+                    // 实际上是删除成功了
+                    LoggerUtil.error(logger, e, "Catching exception because of issue https://github.com/kubernetes/kubernetes/issues/65121");
+                } else {
+                    LoggerUtil.error(logger, e, "删除Job失败,namespace={}, name={}, response={}", job.getNamespace());
+                    throw e;
+                }
+            } else {
+                LoggerUtil.error(logger, e, "删除Job失败,namespace={}, name={}, response={}", job.getNamespace());
+                throw e;
+            }
         }
         }
     }
     }
 
 

+ 2 - 2
web/src/main/java/cn/seecoder/web/core/pipeline/handler/K8sJobHandler.java

@@ -140,12 +140,12 @@ public class K8sJobHandler extends AbstractHandler{
             if (jobs.size() == 0){
             if (jobs.size() == 0){
                 jobApi.create(job);
                 jobApi.create(job);
                 log.info(String.format("Job创建成功: [namespace: %s, jobName: %s]", namespace, jobName));
                 log.info(String.format("Job创建成功: [namespace: %s, jobName: %s]", namespace, jobName));
-                context.appendSuccessResult(String.format("Job创建成功: [namespace: %s, deployName: %s]", namespace, deployName));
+                context.appendSuccessResult(String.format("Job创建成功: [namespace: %s, jobName: %s]", namespace, jobName));
             } else {
             } else {
                 log.info("job已存在!执行删除重建操作");
                 log.info("job已存在!执行删除重建操作");
                 jobApi.update(job);
                 jobApi.update(job);
                 log.info(String.format("Job重建成功: [namespace: %s, jobName: %s]", namespace, jobName));
                 log.info(String.format("Job重建成功: [namespace: %s, jobName: %s]", namespace, jobName));
-                context.appendErrorResult("Job已存在,放弃创建", new Exception());
+                context.appendSuccessResult("Job已存在,已成功删除并重建");
             }
             }
         } catch (K8sApiException e) {
         } catch (K8sApiException e) {
             context.appendErrorResult(PipelineException.JOB_CREATE_ERROR, e);
             context.appendErrorResult(PipelineException.JOB_CREATE_ERROR, e);