diff --git a/common/src/main/scala/org/apache/celeborn/common/protocol/message/ControlMessages.scala b/common/src/main/scala/org/apache/celeborn/common/protocol/message/ControlMessages.scala index c2c7b6bf4b5..e68212bafc6 100644 --- a/common/src/main/scala/org/apache/celeborn/common/protocol/message/ControlMessages.scala +++ b/common/src/main/scala/org/apache/celeborn/common/protocol/message/ControlMessages.scala @@ -425,11 +425,11 @@ object ControlMessages extends Logging { object WorkerEventRequest { def apply( workers: util.List[WorkerInfo], - eventType: String, + eventType: WorkerEventType, requestId: String): PbWorkerEventRequest = PbWorkerEventRequest.newBuilder() .setRequestId(requestId) - .setWorkerEventType(WorkerEventType.valueOf(eventType)) + .setWorkerEventType(eventType) .addAllWorkers(workers.asScala.map { workerInfo => PbSerDeUtils.toPbWorkerInfo(workerInfo, true, false) }.toList.asJava) 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 4c65e9816f5..7d8e5cc2d87 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 @@ -1218,7 +1218,7 @@ private[celeborn] class Master( } override def handleWorkerEvent( - workerEventType: String, + workerEventType: WorkerEventType, workers: Seq[WorkerInfo]): HandleResponse = { val sb = new StringBuilder() try { diff --git a/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/ApiMasterResource.scala b/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/ApiMasterResource.scala index ee6fcdd6730..ac326c5fb94 100644 --- a/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/ApiMasterResource.scala +++ b/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/ApiMasterResource.scala @@ -26,6 +26,7 @@ import io.swagger.v3.oas.annotations.tags.Tag import org.apache.commons.lang3.StringUtils import org.apache.celeborn.common.meta.WorkerInfo +import org.apache.celeborn.common.protocol.WorkerEventType import org.apache.celeborn.server.common.http.api.ApiRequestContext @Tag(name = "Deprecated") @@ -136,7 +137,9 @@ class ApiMasterResource extends ApiRequestContext { } sb.append("============================ Handle Worker Event =============================\n") val workerList = workers.split(",").filter(_.nonEmpty).map(WorkerInfo.fromUniqueId) - sb.append(httpService.handleWorkerEvent(normalizeParam(eventType), workerList)._2) + sb.append(httpService.handleWorkerEvent( + WorkerEventType.valueOf(normalizeParam(eventType)), + workerList)._2) sb.toString() } } diff --git a/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/v1/WorkerResource.scala b/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/v1/WorkerResource.scala index a41a07c5d48..8d1b20bc3a0 100644 --- a/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/v1/WorkerResource.scala +++ b/master/src/main/scala/org/apache/celeborn/service/deploy/master/http/api/v1/WorkerResource.scala @@ -26,7 +26,9 @@ import io.swagger.v3.oas.annotations.media.{Content, Schema} import io.swagger.v3.oas.annotations.responses.ApiResponse import io.swagger.v3.oas.annotations.tags.Tag +import org.apache.celeborn.common.protocol.WorkerEventType import org.apache.celeborn.rest.v1.model._ +import org.apache.celeborn.rest.v1.model.SendWorkerEventRequest.EventTypeEnum import org.apache.celeborn.server.common.http.api.ApiRequestContext import org.apache.celeborn.server.common.http.api.v1.ApiUtils import org.apache.celeborn.service.deploy.master.Master @@ -137,7 +139,8 @@ class WorkerResource extends ApiRequestContext { throw new BadRequestException( s"None of the workers are known: ${unknownWorkers.map(_.readableAddress).mkString(", ")}") } - val (success, msg) = httpService.handleWorkerEvent(request.getEventType.toString, workers) + val (success, msg) = + httpService.handleWorkerEvent(toWorkerEventType(request.getEventType), workers) val finalMsg = if (unknownWorkers.isEmpty) { msg @@ -146,4 +149,16 @@ class WorkerResource extends ApiRequestContext { } new HandleResponse().success(success).message(finalMsg) } + + private def toWorkerEventType(enum: EventTypeEnum): WorkerEventType = { + enum match { + case EventTypeEnum.NONE => WorkerEventType.None + case EventTypeEnum.IMMEDIATELY => WorkerEventType.Immediately + case EventTypeEnum.DECOMMISSION => WorkerEventType.Decommission + case EventTypeEnum.DECOMMISSIONTHENIDLE => WorkerEventType.DecommissionThenIdle + case EventTypeEnum.GRACEFUL => WorkerEventType.Graceful + case EventTypeEnum.RECOMMISSION => WorkerEventType.Recommission + case _ => WorkerEventType.UNRECOGNIZED + } + } } diff --git a/master/src/test/scala/org/apache/celeborn/service/deploy/master/http/api/v1/ApiV1MasterResourceSuite.scala b/master/src/test/scala/org/apache/celeborn/service/deploy/master/http/api/v1/ApiV1MasterResourceSuite.scala index 35649ec75cb..5ae688d91ae 100644 --- a/master/src/test/scala/org/apache/celeborn/service/deploy/master/http/api/v1/ApiV1MasterResourceSuite.scala +++ b/master/src/test/scala/org/apache/celeborn/service/deploy/master/http/api/v1/ApiV1MasterResourceSuite.scala @@ -143,7 +143,7 @@ class ApiV1MasterResourceSuite extends ApiV1BaseResourceSuite { Entity.entity(sendWorkerEventRequest, MediaType.APPLICATION_JSON)) assert(HttpServletResponse.SC_BAD_REQUEST == response.getStatus) assert( - response.readEntity(classOf[String]).contains("eventType(None) and workers([]) are required")) + response.readEntity(classOf[String]).contains("eventType(NONE) and workers([]) are required")) sendWorkerEventRequest.workers(Collections.singletonList(worker)) response = webTarget.path("workers/events").request(MediaType.APPLICATION_JSON).post( Entity.entity(sendWorkerEventRequest, MediaType.APPLICATION_JSON)) diff --git a/openapi/openapi-client/pom.xml b/openapi/openapi-client/pom.xml index e608d3e302c..7309cb8a2ff 100644 --- a/openapi/openapi-client/pom.xml +++ b/openapi/openapi-client/pom.xml @@ -244,6 +244,7 @@ true false none + true @@ -278,6 +279,7 @@ true false none + true diff --git a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/DynamicConfig.java b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/DynamicConfig.java index c0ae71fb69f..23d30a1e210 100644 --- a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/DynamicConfig.java +++ b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/DynamicConfig.java @@ -71,7 +71,7 @@ public String toString() { @JsonCreator public static LevelEnum fromValue(String value) { for (LevelEnum b : LevelEnum.values()) { - if (b.value.equals(value)) { + if (b.value.equalsIgnoreCase(value)) { return b; } } diff --git a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/PartitionLocationData.java b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/PartitionLocationData.java index 55311f03bd3..dd2cd45776a 100644 --- a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/PartitionLocationData.java +++ b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/PartitionLocationData.java @@ -74,7 +74,7 @@ public String toString() { @JsonCreator public static ModeEnum fromValue(String value) { for (ModeEnum b : ModeEnum.values()) { - if (b.value.equals(value)) { + if (b.value.equalsIgnoreCase(value)) { return b; } } @@ -123,7 +123,7 @@ public String toString() { @JsonCreator public static StorageEnum fromValue(String value) { for (StorageEnum b : StorageEnum.values()) { - if (b.value.equals(value)) { + if (b.value.equalsIgnoreCase(value)) { return b; } } diff --git a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/SendWorkerEventRequest.java b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/SendWorkerEventRequest.java index c0934c84032..290b9ad4ee7 100644 --- a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/SendWorkerEventRequest.java +++ b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/SendWorkerEventRequest.java @@ -45,17 +45,17 @@ public class SendWorkerEventRequest { * The type of the event. */ public enum EventTypeEnum { - IMMEDIATELY("Immediately"), + IMMEDIATELY("IMMEDIATELY"), - DECOMMISSION("Decommission"), + DECOMMISSION("DECOMMISSION"), - DECOMMISSION_THEN_IDLE("DecommissionThenIdle"), + DECOMMISSIONTHENIDLE("DECOMMISSIONTHENIDLE"), - GRACEFUL("Graceful"), + GRACEFUL("GRACEFUL"), - RECOMMISSION("Recommission"), + RECOMMISSION("RECOMMISSION"), - NONE("None"); + NONE("NONE"); private String value; @@ -76,7 +76,7 @@ public String toString() { @JsonCreator public static EventTypeEnum fromValue(String value) { for (EventTypeEnum b : EventTypeEnum.values()) { - if (b.value.equals(value)) { + if (b.value.equalsIgnoreCase(value)) { return b; } } diff --git a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/WorkerExitRequest.java b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/WorkerExitRequest.java index e6bf683a738..79fb12d035a 100644 --- a/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/WorkerExitRequest.java +++ b/openapi/openapi-client/src/main/java/org/apache/celeborn/rest/v1/model/WorkerExitRequest.java @@ -40,13 +40,13 @@ public class WorkerExitRequest { * The type of the worker exit request. */ public enum TypeEnum { - DECOMMISSION("Decommission"), + DECOMMISSION("DECOMMISSION"), - GRACEFUL("Graceful"), + GRACEFUL("GRACEFUL"), - IMMEDIATELY("Immediately"), + IMMEDIATELY("IMMEDIATELY"), - NONE("None"); + NONE("NONE"); private String value; @@ -67,7 +67,7 @@ public String toString() { @JsonCreator public static TypeEnum fromValue(String value) { for (TypeEnum b : TypeEnum.values()) { - if (b.value.equals(value)) { + if (b.value.equalsIgnoreCase(value)) { return b; } } 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 c03fe11eb93..0c4948abfcf 100644 --- a/openapi/openapi-client/src/main/openapi3/master_rest_v1.yaml +++ b/openapi/openapi-client/src/main/openapi3/master_rest_v1.yaml @@ -706,12 +706,12 @@ components: type: string description: The type of the event. enum: - - Immediately - - Decommission - - DecommissionThenIdle - - Graceful - - Recommission - - None + - IMMEDIATELY + - DECOMMISSION + - DECOMMISSIONTHENIDLE + - GRACEFUL + - RECOMMISSION + - NONE workers: type: array description: The workers to send the event. diff --git a/openapi/openapi-client/src/main/openapi3/worker_rest_v1.yaml b/openapi/openapi-client/src/main/openapi3/worker_rest_v1.yaml index 3db792a54f2..29bd2865dd2 100644 --- a/openapi/openapi-client/src/main/openapi3/worker_rest_v1.yaml +++ b/openapi/openapi-client/src/main/openapi3/worker_rest_v1.yaml @@ -602,13 +602,13 @@ components: properties: type: type: string - default: None + default: NONE description: The type of the worker exit request. enum: - - Decommission - - Graceful - - Immediately - - None + - DECOMMISSION + - GRACEFUL + - IMMEDIATELY + - NONE HandleResponse: type: object diff --git a/project/CelebornBuild.scala b/project/CelebornBuild.scala index 25f904b811e..1c18aab0d29 100644 --- a/project/CelebornBuild.scala +++ b/project/CelebornBuild.scala @@ -1364,6 +1364,7 @@ object CelebornOpenApi { "supportUrlQuery" -> "false", "annotationLibrary" -> "none", "templateDir" -> s"$openApiSpecDir/templates", + "useEnumCaseInsensitive" -> "true" ) ) 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 2efcec54574..2301ea25c7c 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 @@ -27,7 +27,7 @@ import org.eclipse.jetty.servlet.FilterHolder import org.apache.celeborn.common.CelebornConf import org.apache.celeborn.common.internal.Logging import org.apache.celeborn.common.meta.WorkerInfo -import org.apache.celeborn.common.protocol.TransportModuleConstants +import org.apache.celeborn.common.protocol.{TransportModuleConstants, WorkerEventType} import org.apache.celeborn.common.util.Utils import org.apache.celeborn.server.common.http.HttpServer import org.apache.celeborn.server.common.http.api.ApiRootResource @@ -187,7 +187,9 @@ abstract class HttpService extends Service with Logging { def exit(exitType: String): String = throw new UnsupportedOperationException() - def handleWorkerEvent(workerEventType: String, workers: Seq[WorkerInfo]): HandleResponse = + def handleWorkerEvent( + workerEventType: WorkerEventType, + workers: Seq[WorkerInfo]): HandleResponse = throw new UnsupportedOperationException() def getWorkerEventInfo(): String = throw new UnsupportedOperationException() diff --git a/worker/src/test/scala/org/apache/celeborn/service/deploy/worker/http/api/v1/ApiV1OpenapiClientSuite.scala b/worker/src/test/scala/org/apache/celeborn/service/deploy/worker/http/api/v1/ApiV1OpenapiClientSuite.scala index e5368cf6dfd..1557f388a15 100644 --- a/worker/src/test/scala/org/apache/celeborn/service/deploy/worker/http/api/v1/ApiV1OpenapiClientSuite.scala +++ b/worker/src/test/scala/org/apache/celeborn/service/deploy/worker/http/api/v1/ApiV1OpenapiClientSuite.scala @@ -108,7 +108,7 @@ class ApiV1OpenapiClientSuite extends ApiV1WorkerOpenapiClientSuite { handleResponse = api.sendWorkerEvent( new SendWorkerEventRequest().addWorkersItem(workerId).eventType( - EventTypeEnum.DECOMMISSION_THEN_IDLE)) + EventTypeEnum.DECOMMISSIONTHENIDLE)) assert(handleResponse.getSuccess) assert(!api.getWorkerEvents.getWorkerEvents.isEmpty)