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" =>