This is an automated email from the ASF dual-hosted git repository.

pingsutw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/submarine.git


The following commit(s) were added to refs/heads/master by this push:
     new b3e9be84 SUBMARINE-1251. fix patch type and add error handling
b3e9be84 is described below

commit b3e9be84400feb4bf8ebbc5e77d28b0d4c91c655
Author: KUAN-HSUN-LI <b06209...@ntu.edu.tw>
AuthorDate: Mon Apr 4 16:51:33 2022 +0800

    SUBMARINE-1251. fix patch type and add error handling
    
    ### What is this PR for?
    In the previous PR #915, the patch method is not fixed since the 
`InvalidSpecException` is sending status code 200.
    
    ### What type of PR is it?
    [Bug Fix]
    
    ### Todos
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/SUBMARINE-1251
    
    ### How should this be tested?
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Do the license files need updating? No
    * Are there breaking changes for older versions? No
    * Does this need new documentation? No
    
    Author: KUAN-HSUN-LI <b06209...@ntu.edu.tw>
    
    Signed-off-by: Kevin <pings...@apache.org>
    
    Closes #919 from KUAN-HSUN-LI/SUBMARINE-1251 and squashes the following 
commits:
    
    2ce66f4a [KUAN-HSUN-LI] SUBMARINE-1251. fix patch type and add error 
handling
---
 .../submarine/server/submitter/k8s/K8sSubmitter.java     | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git 
a/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sSubmitter.java
 
b/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sSubmitter.java
index d9e86809..d06eef39 100644
--- 
a/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sSubmitter.java
+++ 
b/submarine-server/server-submitter/submitter-k8s/src/main/java/org/apache/submarine/server/submitter/k8s/K8sSubmitter.java
@@ -32,6 +32,7 @@ import java.util.function.Function;
 import com.google.gson.Gson;
 import com.google.gson.JsonSyntaxException;
 
+import io.kubernetes.client.util.generic.options.PatchOptions;
 import okhttp3.OkHttpClient;
 import io.kubernetes.client.openapi.ApiClient;
 import io.kubernetes.client.openapi.ApiException;
@@ -318,19 +319,28 @@ public class K8sSubmitter implements Submitter {
     try {
       MLJob mlJob = ExperimentSpecParser.parseJob(spec);
       mlJob.getMetadata().setNamespace(getServerNamespace());
+      // Using apply yaml patch, field manager must be set, and it must be 
forced.
+      // 
https://kubernetes.io/docs/reference/using-api/server-side-apply/#field-management
+      PatchOptions patchOptions = new PatchOptions();
+      patchOptions.setFieldManager(spec.getMeta().getExperimentId());
+      patchOptions.setForce(true);
       Object object = mlJob.getPlural().equals(TFJob.CRD_TF_PLURAL_V1)
               ? tfJobClient.patch(getServerNamespace(), 
mlJob.getMetadata().getName(),
               V1Patch.PATCH_FORMAT_APPLY_YAML,
-              new V1Patch(new Gson().toJson(((TFJob) 
mlJob).getSpec()))).throwsApiException().getObject()
+              new V1Patch(new Gson().toJson(mlJob)),
+              patchOptions).throwsApiException().getObject()
               : pyTorchJobClient.patch(getServerNamespace(), 
mlJob.getMetadata().getName(),
               V1Patch.PATCH_FORMAT_APPLY_YAML,
-              new V1Patch(new Gson().toJson(((PyTorchJob) 
mlJob).getSpec()))).throwsApiException().getObject()
+              new V1Patch(new Gson().toJson(mlJob)),
+              patchOptions).throwsApiException().getObject()
               ;
       experiment = parseExperimentResponseObject(object, 
ParseOp.PARSE_OP_RESULT);
     } catch (InvalidSpecException e) {
-      throw new SubmarineRuntimeException(200, e.getMessage());
+      throw new SubmarineRuntimeException(409, e.getMessage());
     } catch (ApiException e) {
       throw new SubmarineRuntimeException(e.getCode(), e.getMessage());
+    } catch (Error e) {
+      throw new SubmarineRuntimeException(500, String.format("Unhandled error: 
%s", e.getMessage()));
     }
     return experiment;
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@submarine.apache.org
For additional commands, e-mail: dev-h...@submarine.apache.org

Reply via email to