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

rexxiong pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/celeborn.git


The following commit(s) were added to refs/heads/main by this push:
     new be4c02e6d [CELEBORN-1601][FOLLOWUP] Refine the RESTful apis for revise 
lost shuffles
be4c02e6d is described below

commit be4c02e6d0a738800ddd88aedd2f8d179ce6fd2c
Author: Wang, Fei <[email protected]>
AuthorDate: Tue Nov 12 10:11:25 2024 +0800

    [CELEBORN-1601][FOLLOWUP] Refine the RESTful apis for revise lost shuffles
    
    ### What changes were proposed in this pull request?
    
    1. `GET /api/v1/applications/deleteApps`  -> `DELETE /api/v1/applications`
    
    2. `GET /api/v1/applications/reviseLostShuffles`  -> `POST 
/api/v1/applications/revise_lost_shuffles`
    
    ### Why are the changes needed?
    Followup for https://github.com/apache/celeborn/pull/2746
    
    ### Does this PR introduce _any_ user-facing change?
    
    No, these APIs has not been released yet.
    
    ### How was this patch tested?
    GA.
    
    Closes #2892 from turboFei/delete_app.
    
    Authored-by: Wang, Fei <[email protected]>
    Signed-off-by: Shuang <[email protected]>
---
 .../celeborn/cli/master/MasterSubcommandImpl.scala |  25 +++-
 .../celeborn/service/deploy/master/Master.scala    |   8 --
 .../master/http/api/v1/ApplicationResource.scala   |  57 ++++----
 openapi/openapi-client/README.md                   |   2 +
 .../celeborn/rest/v1/master/ApplicationApi.java    |  53 ++++----
 .../celeborn/rest/v1/model/DeleteAppsRequest.java  | 119 ++++++++++++++++
 .../rest/v1/model/ReviseLostShufflesRequest.java   | 150 +++++++++++++++++++++
 .../src/main/openapi3/master_rest_v1.yaml          |  83 +++++++-----
 .../celeborn/server/common/HttpService.scala       |   4 -
 .../celeborn/service/deploy/worker/Worker.scala    |   5 -
 10 files changed, 389 insertions(+), 117 deletions(-)

diff --git 
a/cli/src/main/scala/org/apache/celeborn/cli/master/MasterSubcommandImpl.scala 
b/cli/src/main/scala/org/apache/celeborn/cli/master/MasterSubcommandImpl.scala
index 70bd32c63..7dbc67f3f 100644
--- 
a/cli/src/main/scala/org/apache/celeborn/cli/master/MasterSubcommandImpl.scala
+++ 
b/cli/src/main/scala/org/apache/celeborn/cli/master/MasterSubcommandImpl.scala
@@ -21,6 +21,7 @@ import java.util
 
 import scala.collection.JavaConverters._
 
+import org.apache.commons.lang3.StringUtils
 import picocli.CommandLine.{Command, ParameterException}
 
 import org.apache.celeborn.cli.config.CliConfigManager
@@ -224,18 +225,34 @@ class MasterSubcommandImpl extends Runnable with 
MasterSubcommand {
   private[master] def runShowContainerInfo: ContainerInfo = 
defaultApi.getContainerInfo
 
   override private[master] def reviseLostShuffles: HandleResponse = {
+    if (StringUtils.isAnyBlank(commonOptions.apps, 
reviseLostShuffleOptions.shuffleIds)) {
+      throw new ParameterException(
+        spec.commandLine(),
+        "Application id and Shuffle ids must be provided for this command.")
+    }
+
     val app = commonOptions.apps
     if (app.contains(",")) {
       throw new ParameterException(
         spec.commandLine(),
         "Only one application id can be provided for this command.")
     }
-    val shuffleIds = reviseLostShuffleOptions.shuffleIds
-    applicationApi.reviseLostShuffles(app, shuffleIds)
+
+    val shuffleIds = util.Arrays.asList[Integer](
+      reviseLostShuffleOptions.shuffleIds.split(",").map(Integer.valueOf): _*)
+    val request =
+      new ReviseLostShufflesRequest().appId(app).shuffleIds(shuffleIds)
+    applicationApi.reviseLostShuffles(request)
   }
 
   override private[master] def deleteApps: HandleResponse = {
-    val apps = commonOptions.apps
-    applicationApi.deleteApps(apps)
+    if (StringUtils.isBlank(commonOptions.apps)) {
+      throw new ParameterException(
+        spec.commandLine(),
+        "Applications must be provided for this command.")
+    }
+    val appIds = util.Arrays.asList[String](commonOptions.apps.split(","): _*)
+    val request = new DeleteAppsRequest().apps(appIds)
+    applicationApi.deleteApps(request)
   }
 }
diff --git 
a/master/src/main/scala/org/apache/celeborn/service/deploy/master/Master.scala 
b/master/src/main/scala/org/apache/celeborn/service/deploy/master/Master.scala
index 0a95609e1..16a00b2dc 100644
--- 
a/master/src/main/scala/org/apache/celeborn/service/deploy/master/Master.scala
+++ 
b/master/src/main/scala/org/apache/celeborn/service/deploy/master/Master.scala
@@ -1486,14 +1486,6 @@ private[celeborn] class Master(
     }
   }
 
-  override def reviseLostShuffles(appId: String, shuffles: 
java.util.List[Integer]): Unit = {
-    statusSystem.reviseLostShuffles(appId, shuffles)
-  }
-
-  override def deleteApps(appIds: String): Unit = {
-    appIds.split(",").foreach(id => statusSystem.deleteApp(id))
-  }
-
   override def getWorkerEventInfo(): String = {
     val sb = new StringBuilder
     sb.append("======================= Workers Event in Master 
========================\n")
diff --git 
a/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/v1/ApplicationResource.scala
 
b/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/v1/ApplicationResource.scala
index 18cab93e8..c3ad1e750 100644
--- 
a/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/v1/ApplicationResource.scala
+++ 
b/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/v1/ApplicationResource.scala
@@ -17,8 +17,7 @@
 
 package org.apache.celeborn.service.deploy.master.http.api.v1
 
-import java.util
-import javax.ws.rs.{Consumes, GET, Path, Produces, QueryParam}
+import javax.ws.rs.{Consumes, DELETE, GET, Path, POST, Produces}
 import javax.ws.rs.core.MediaType
 
 import scala.collection.JavaConverters._
@@ -28,7 +27,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse
 import io.swagger.v3.oas.annotations.tags.Tag
 
 import org.apache.celeborn.common.util.Utils
-import org.apache.celeborn.rest.v1.model.{AppDiskUsageData, 
AppDiskUsageSnapshotData, AppDiskUsageSnapshotsResponse, 
ApplicationHeartbeatData, ApplicationsHeartbeatResponse, HandleResponse, 
HostnamesResponse}
+import org.apache.celeborn.rest.v1.model.{AppDiskUsageData, 
AppDiskUsageSnapshotData, AppDiskUsageSnapshotsResponse, 
ApplicationHeartbeatData, ApplicationsHeartbeatResponse, DeleteAppsRequest, 
HandleResponse, HostnamesResponse, ReviseLostShufflesRequest}
 import org.apache.celeborn.server.common.http.api.ApiRequestContext
 import org.apache.celeborn.service.deploy.master.Master
 
@@ -55,6 +54,19 @@ class ApplicationResource extends ApiRequestContext {
         }.toSeq.asJava)
   }
 
+  @ApiResponse(
+    responseCode = "200",
+    content = Array(new Content(
+      mediaType = MediaType.APPLICATION_JSON,
+      schema = new Schema(implementation = classOf[HandleResponse]))),
+    description = "Delete resource of apps.")
+  @DELETE
+  def deleteApps(request: DeleteAppsRequest): HandleResponse = {
+    val apps = request.getApps.asScala
+    apps.foreach(app => statusSystem.deleteApp(app))
+    new HandleResponse().success(true).message(s"deleted shuffles of app 
${apps}")
+  }
+
   @ApiResponse(
     responseCode = "200",
     content = Array(new Content(
@@ -96,41 +108,18 @@ class ApplicationResource extends ApiRequestContext {
     new 
HostnamesResponse().hostnames(statusSystem.hostnameSet.asScala.toSeq.asJava)
   }
 
-  @Path("/reviseLostShuffles")
+  @Path("/revise_lost_shuffles")
   @ApiResponse(
     responseCode = "200",
     content = Array(new Content(
       mediaType = MediaType.APPLICATION_JSON,
       schema = new Schema(implementation = classOf[HandleResponse]))),
-    description =
-      "Revise lost shuffles")
-  @GET
-  def reviseLostShuffles(
-      @QueryParam("app") appId: String,
-      @QueryParam("shuffleIds") shufflesIds: String): HandleResponse = {
-    val shuffles = new util.ArrayList[Integer]()
-    shufflesIds.split(",").foreach { p =>
-      shuffles.add(Integer.parseInt(p))
-    }
-    if (!shuffles.isEmpty) {
-      httpService.reviseLostShuffles(appId, shuffles)
-    }
-    new HandleResponse().success(true).message("revise lost shuffle done")
+    description = "Revise lost shuffles or deleted shuffles of an 
application.")
+  @POST
+  def reviseLostShuffles(request: ReviseLostShufflesRequest): HandleResponse = 
{
+    val appId = request.getAppId
+    val shuffleIds = request.getShuffleIds
+    statusSystem.reviseLostShuffles(appId, shuffleIds)
+    new HandleResponse().success(true).message(s"revised app:$appId lost 
shuffles:$shuffleIds")
   }
-
-  @Path("/deleteApps")
-  @ApiResponse(
-    responseCode = "200",
-    content = Array(new Content(
-      mediaType = MediaType.APPLICATION_JSON,
-      schema = new Schema(implementation = classOf[HandleResponse]))),
-    description =
-      "Delete resource of an app")
-  @GET
-  def deleteApp(
-      @QueryParam("apps") apps: String): HandleResponse = {
-    httpService.deleteApps(apps)
-    new HandleResponse().success(true).message(s"delete shuffles of app 
${apps}")
-  }
-
 }
diff --git a/openapi/openapi-client/README.md b/openapi/openapi-client/README.md
index cbf91a7b5..4a9df6040 100644
--- a/openapi/openapi-client/README.md
+++ b/openapi/openapi-client/README.md
@@ -1,5 +1,7 @@
 # Celeborn OpenAPI Client
 
+**Note:** It is recommended to use `under_score` style naming for new RESTful 
APIs to maintain consistency.
+
 To update the OpenAPI specification
 - just update the specification under 
`openapi/openapi-client/src/main/openapi3/` and keep the schema definitions 
consistent between master and worker.
 - Install JDK 11 or above by whatever mechanism is appropriate for your 
system, and set that version to be the default Java version (e.g., by setting 
env variable `JAVA_HOME`)
diff --git 
a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/master/ApplicationApi.java
 
b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/master/ApplicationApi.java
index 2afac4729..dc844dac2 100644
--- 
a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/master/ApplicationApi.java
+++ 
b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/master/ApplicationApi.java
@@ -27,8 +27,10 @@ import org.apache.celeborn.rest.v1.master.invoker.Pair;
 
 import org.apache.celeborn.rest.v1.model.AppDiskUsageSnapshotsResponse;
 import org.apache.celeborn.rest.v1.model.ApplicationsHeartbeatResponse;
+import org.apache.celeborn.rest.v1.model.DeleteAppsRequest;
 import org.apache.celeborn.rest.v1.model.HandleResponse;
 import org.apache.celeborn.rest.v1.model.HostnamesResponse;
+import org.apache.celeborn.rest.v1.model.ReviseLostShufflesRequest;
 
 
 import java.util.ArrayList;
@@ -51,29 +53,29 @@ public class ApplicationApi extends BaseApi {
 
   /**
    * 
-   * Delete resource of apps
-   * @param apps  (optional)
+   * Delete resource of apps.
+   * @param deleteAppsRequest  (optional)
    * @return HandleResponse
    * @throws ApiException if fails to make API call
    */
-  public HandleResponse deleteApps(String apps) throws ApiException {
-    return this.deleteApps(apps, Collections.emptyMap());
+  public HandleResponse deleteApps(DeleteAppsRequest deleteAppsRequest) throws 
ApiException {
+    return this.deleteApps(deleteAppsRequest, Collections.emptyMap());
   }
 
 
   /**
    * 
-   * Delete resource of apps
-   * @param apps  (optional)
+   * Delete resource of apps.
+   * @param deleteAppsRequest  (optional)
    * @param additionalHeaders additionalHeaders for this call
    * @return HandleResponse
    * @throws ApiException if fails to make API call
    */
-  public HandleResponse deleteApps(String apps, Map<String, String> 
additionalHeaders) throws ApiException {
-    Object localVarPostBody = null;
+  public HandleResponse deleteApps(DeleteAppsRequest deleteAppsRequest, 
Map<String, String> additionalHeaders) throws ApiException {
+    Object localVarPostBody = deleteAppsRequest;
     
     // create path and map variables
-    String localVarPath = "/api/v1/applications/deleteApps";
+    String localVarPath = "/api/v1/applications";
 
     StringJoiner localVarQueryStringJoiner = new StringJoiner("&");
     String localVarQueryParameterBaseName;
@@ -83,7 +85,6 @@ public class ApplicationApi extends BaseApi {
     Map<String, String> localVarCookieParams = new HashMap<String, String>();
     Map<String, Object> localVarFormParams = new HashMap<String, Object>();
 
-    localVarQueryParams.addAll(apiClient.parameterToPair("apps", apps));
     
     localVarHeaderParams.putAll(additionalHeaders);
 
@@ -95,7 +96,7 @@ public class ApplicationApi extends BaseApi {
     final String localVarAccept = 
apiClient.selectHeaderAccept(localVarAccepts);
 
     final String[] localVarContentTypes = {
-      
+      "application/json"
     };
     final String localVarContentType = 
apiClient.selectHeaderContentType(localVarContentTypes);
 
@@ -104,7 +105,7 @@ public class ApplicationApi extends BaseApi {
     TypeReference<HandleResponse> localVarReturnType = new 
TypeReference<HandleResponse>() {};
     return apiClient.invokeAPI(
         localVarPath,
-        "GET",
+        "DELETE",
         localVarQueryParams,
         localVarCollectionQueryParams,
         localVarQueryStringJoiner.toString(),
@@ -322,31 +323,29 @@ public class ApplicationApi extends BaseApi {
 
   /**
    * 
-   * Revise lost shuffles or delete shuffles of an application.
-   * @param app  (optional)
-   * @param shuffleIds  (optional)
+   * Revise lost shuffles or deleted shuffles of an application.
+   * @param reviseLostShufflesRequest  (optional)
    * @return HandleResponse
    * @throws ApiException if fails to make API call
    */
-  public HandleResponse reviseLostShuffles(String app, String shuffleIds) 
throws ApiException {
-    return this.reviseLostShuffles(app, shuffleIds, Collections.emptyMap());
+  public HandleResponse reviseLostShuffles(ReviseLostShufflesRequest 
reviseLostShufflesRequest) throws ApiException {
+    return this.reviseLostShuffles(reviseLostShufflesRequest, 
Collections.emptyMap());
   }
 
 
   /**
    * 
-   * Revise lost shuffles or delete shuffles of an application.
-   * @param app  (optional)
-   * @param shuffleIds  (optional)
+   * Revise lost shuffles or deleted shuffles of an application.
+   * @param reviseLostShufflesRequest  (optional)
    * @param additionalHeaders additionalHeaders for this call
    * @return HandleResponse
    * @throws ApiException if fails to make API call
    */
-  public HandleResponse reviseLostShuffles(String app, String shuffleIds, 
Map<String, String> additionalHeaders) throws ApiException {
-    Object localVarPostBody = null;
+  public HandleResponse reviseLostShuffles(ReviseLostShufflesRequest 
reviseLostShufflesRequest, Map<String, String> additionalHeaders) throws 
ApiException {
+    Object localVarPostBody = reviseLostShufflesRequest;
     
     // create path and map variables
-    String localVarPath = "/api/v1/applications/reviseLostShuffles";
+    String localVarPath = "/api/v1/applications/revise_lost_shuffles";
 
     StringJoiner localVarQueryStringJoiner = new StringJoiner("&");
     String localVarQueryParameterBaseName;
@@ -356,8 +355,6 @@ public class ApplicationApi extends BaseApi {
     Map<String, String> localVarCookieParams = new HashMap<String, String>();
     Map<String, Object> localVarFormParams = new HashMap<String, Object>();
 
-    localVarQueryParams.addAll(apiClient.parameterToPair("app", app));
-    localVarQueryParams.addAll(apiClient.parameterToPair("shuffleIds", 
shuffleIds));
     
     localVarHeaderParams.putAll(additionalHeaders);
 
@@ -369,7 +366,7 @@ public class ApplicationApi extends BaseApi {
     final String localVarAccept = 
apiClient.selectHeaderAccept(localVarAccepts);
 
     final String[] localVarContentTypes = {
-      
+      "application/json"
     };
     final String localVarContentType = 
apiClient.selectHeaderContentType(localVarContentTypes);
 
@@ -378,7 +375,7 @@ public class ApplicationApi extends BaseApi {
     TypeReference<HandleResponse> localVarReturnType = new 
TypeReference<HandleResponse>() {};
     return apiClient.invokeAPI(
         localVarPath,
-        "GET",
+        "POST",
         localVarQueryParams,
         localVarCollectionQueryParams,
         localVarQueryStringJoiner.toString(),
@@ -411,7 +408,7 @@ public class ApplicationApi extends BaseApi {
     final String localVarAccept = 
apiClient.selectHeaderAccept(localVarAccepts);
 
     final String[] localVarContentTypes = {
-      
+      "application/json"
     };
     final String localVarContentType = 
apiClient.selectHeaderContentType(localVarContentTypes);
 
diff --git 
a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/DeleteAppsRequest.java
 
b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/DeleteAppsRequest.java
new file mode 100644
index 000000000..f15edca2a
--- /dev/null
+++ 
b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/DeleteAppsRequest.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.celeborn.rest.v1.model;
+
+import java.util.Objects;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+
+/**
+ * DeleteAppsRequest
+ */
+@JsonPropertyOrder({
+  DeleteAppsRequest.JSON_PROPERTY_APPS
+})
[email protected](value = 
"org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator 
version: 7.8.0")
+public class DeleteAppsRequest {
+  public static final String JSON_PROPERTY_APPS = "apps";
+  private List<String> apps = new ArrayList<>();
+
+  public DeleteAppsRequest() {
+  }
+
+  public DeleteAppsRequest apps(List<String> apps) {
+    
+    this.apps = apps;
+    return this;
+  }
+
+  public DeleteAppsRequest addAppsItem(String appsItem) {
+    if (this.apps == null) {
+      this.apps = new ArrayList<>();
+    }
+    this.apps.add(appsItem);
+    return this;
+  }
+
+  /**
+   * The apps to be deleted.
+   * @return apps
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_APPS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<String> getApps() {
+    return apps;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_APPS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setApps(List<String> apps) {
+    this.apps = apps;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    DeleteAppsRequest deleteAppsRequest = (DeleteAppsRequest) o;
+    return Objects.equals(this.apps, deleteAppsRequest.apps);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(apps);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class DeleteAppsRequest {\n");
+    sb.append("    apps: ").append(toIndentedString(apps)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git 
a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/ReviseLostShufflesRequest.java
 
b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/ReviseLostShufflesRequest.java
new file mode 100644
index 000000000..ee6ba925e
--- /dev/null
+++ 
b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/ReviseLostShufflesRequest.java
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.celeborn.rest.v1.model;
+
+import java.util.Objects;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+
+/**
+ * ReviseLostShufflesRequest
+ */
+@JsonPropertyOrder({
+  ReviseLostShufflesRequest.JSON_PROPERTY_APP_ID,
+  ReviseLostShufflesRequest.JSON_PROPERTY_SHUFFLE_IDS
+})
[email protected](value = 
"org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator 
version: 7.8.0")
+public class ReviseLostShufflesRequest {
+  public static final String JSON_PROPERTY_APP_ID = "appId";
+  private String appId;
+
+  public static final String JSON_PROPERTY_SHUFFLE_IDS = "shuffleIds";
+  private List<Integer> shuffleIds = new ArrayList<>();
+
+  public ReviseLostShufflesRequest() {
+  }
+
+  public ReviseLostShufflesRequest appId(String appId) {
+    
+    this.appId = appId;
+    return this;
+  }
+
+  /**
+   * The application id.
+   * @return appId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_APP_ID)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getAppId() {
+    return appId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_APP_ID)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setAppId(String appId) {
+    this.appId = appId;
+  }
+
+  public ReviseLostShufflesRequest shuffleIds(List<Integer> shuffleIds) {
+    
+    this.shuffleIds = shuffleIds;
+    return this;
+  }
+
+  public ReviseLostShufflesRequest addShuffleIdsItem(Integer shuffleIdsItem) {
+    if (this.shuffleIds == null) {
+      this.shuffleIds = new ArrayList<>();
+    }
+    this.shuffleIds.add(shuffleIdsItem);
+    return this;
+  }
+
+  /**
+   * The shuffle ids to be revised.
+   * @return shuffleIds
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_SHUFFLE_IDS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<Integer> getShuffleIds() {
+    return shuffleIds;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SHUFFLE_IDS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setShuffleIds(List<Integer> shuffleIds) {
+    this.shuffleIds = shuffleIds;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ReviseLostShufflesRequest reviseLostShufflesRequest = 
(ReviseLostShufflesRequest) o;
+    return Objects.equals(this.appId, reviseLostShufflesRequest.appId) &&
+        Objects.equals(this.shuffleIds, reviseLostShufflesRequest.shuffleIds);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(appId, shuffleIds);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ReviseLostShufflesRequest {\n");
+    sb.append("    appId: ").append(toIndentedString(appId)).append("\n");
+    sb.append("    shuffleIds: 
").append(toIndentedString(shuffleIds)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/openapi/openapi-client/src/main/openapi3/master_rest_v1.yaml 
b/openapi/openapi-client/src/main/openapi3/master_rest_v1.yaml
index 108e185a3..72ab9d31d 100644
--- a/openapi/openapi-client/src/main/openapi3/master_rest_v1.yaml
+++ b/openapi/openapi-client/src/main/openapi3/master_rest_v1.yaml
@@ -239,6 +239,23 @@ paths:
             application/json:
               schema:
                 $ref: '#/components/schemas/ApplicationsHeartbeatResponse'
+    delete:
+      tags:
+        - Application
+      operationId: deleteApps
+      description: Delete resource of apps.
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/DeleteAppsRequest'
+      responses:
+        "200":
+          description: The request was successful.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HandleResponse'
 
   /api/v1/applications/top_disk_usages:
     get:
@@ -270,43 +287,17 @@ paths:
               schema:
                 $ref: '#/components/schemas/HostnamesResponse'
 
-  /api/v1/applications/reviseLostShuffles:
-    get:
+  /api/v1/applications/revise_lost_shuffles:
+    post:
       tags:
         - Application
       operationId: reviseLostShuffles
-      description: Revise lost shuffles or delete shuffles of an application.
-      parameters:
-        - name: app
-          in: query
-          required: false
-          schema:
-            type: string
-        - name: shuffleIds
-          in: query
-          required: false
-          schema:
-            type: string
-      responses:
-        "200":
-          description: The request was successful.
-          content:
-            application/json:
-              schema:
-                $ref: '#/components/schemas/HandleResponse'
-
-  /api/v1/applications/deleteApps:
-    get:
-      tags:
-        - Application
-      operationId: deleteApps
-      description: Delete resource of apps
-      parameters:
-        - name: apps
-          in: query
-          required: false
-          schema:
-            type: string
+      description: Revise lost shuffles or deleted shuffles of an application.
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReviseLostShufflesRequest'
       responses:
         "200":
           description: The request was successful.
@@ -1093,6 +1084,30 @@ components:
       required:
         - peers
 
+    DeleteAppsRequest:
+      type: object
+      properties:
+        apps:
+          type: array
+          description: The apps to be deleted.
+          items:
+            type: string
+      required:
+        - apps
+
+    ReviseLostShufflesRequest:
+      type: object
+      properties:
+        appId:
+          type: string
+          description: The application id.
+        shuffleIds:
+          type: array
+          description: The shuffle ids to be revised.
+          items:
+            type: integer
+            format: int32
+
     HandleResponse:
       type: object
       properties:
diff --git 
a/service/src/main/scala/org/apache/celeborn/server/common/HttpService.scala 
b/service/src/main/scala/org/apache/celeborn/server/common/HttpService.scala
index e8610dfdc..bb98e88f6 100644
--- a/service/src/main/scala/org/apache/celeborn/server/common/HttpService.scala
+++ b/service/src/main/scala/org/apache/celeborn/server/common/HttpService.scala
@@ -194,10 +194,6 @@ abstract class HttpService extends Service with Logging {
 
   def getWorkerEventInfo(): String = throw new UnsupportedOperationException()
 
-  def reviseLostShuffles(appId: String, shuffles: java.util.List[Integer])
-
-  def deleteApps(appIds: String)
-
   def startHttpServer(): Unit = {
     httpServer = HttpServer(
       serviceName,
diff --git 
a/worker/src/main/scala/org/apache/celeborn/service/deploy/worker/Worker.scala 
b/worker/src/main/scala/org/apache/celeborn/service/deploy/worker/Worker.scala
index 62602cd06..b9bfff05b 100644
--- 
a/worker/src/main/scala/org/apache/celeborn/service/deploy/worker/Worker.scala
+++ 
b/worker/src/main/scala/org/apache/celeborn/service/deploy/worker/Worker.scala
@@ -866,11 +866,6 @@ private[celeborn] class Worker(
     sb.toString()
   }
 
-  override def reviseLostShuffles(appId: String, shuffles: 
java.util.List[Integer]): Unit =
-    throw new UnsupportedOperationException()
-
-  override def deleteApps(appIds: String): Unit = throw new 
UnsupportedOperationException()
-
   override def exit(exitType: String): String = {
     exitType.toUpperCase(Locale.ROOT) match {
       case "DECOMMISSION" =>

Reply via email to