[CELEBORN-1477][FOLLOWUP] /api/v1/workers/events should support None eventType to align /sendWorkerEvent

### What changes were proposed in this pull request?

`/api/v1/workers/events` should support `None` `eventType` to align `/sendWorkerEvent`.

### Why are the changes needed?

Legal event types of `/sendWorkerEvent` are `None`, `Immediately`, `Decommission`, `DecommissionThenIdle`, `Graceful`, `Recommission`. But `/api/v1/workers/events` does not support `eventType` with `None` type.

### Does this PR introduce _any_ user-facing change?

No.

### How was this patch tested?

`ApiV1MasterResourceSuite#worker resource`

Closes #2732 from SteNicholas/CELEBORN-1477.

Authored-by: SteNicholas <programgeek@163.com>
Signed-off-by: Shuang <lvshuang.xjs@alibaba-inc.com>
This commit is contained in:
SteNicholas 2024-09-14 11:14:23 +08:00 committed by Shuang
parent 1053129ea4
commit baef31abb8
4 changed files with 15 additions and 7 deletions

View File

@ -127,7 +127,7 @@ class WorkerResource extends ApiRequestContext {
@Path("/events")
def sendWorkerEvents(request: SendWorkerEventRequest): HandleResponse =
ensureMasterIsLeader(master) {
if (request.getEventType == SendWorkerEventRequest.EventTypeEnum.NONE || request.getWorkers.isEmpty) {
if (request.getEventType == null || request.getWorkers.isEmpty) {
throw new BadRequestException(
s"eventType(${request.getEventType}) and workers(${request.getWorkers}) are required")
}

View File

@ -133,12 +133,21 @@ class ApiV1MasterResourceSuite extends ApiV1BaseResourceSuite {
assert(response.readEntity(classOf[WorkerEventsResponse]).getWorkerEvents.isEmpty)
val sendWorkerEventRequest = new SendWorkerEventRequest()
.eventType(SendWorkerEventRequest.EventTypeEnum.DECOMMISSION)
.workers(Collections.singletonList(worker))
response = webTarget.path("workers/events").request(MediaType.APPLICATION_JSON).post(
Entity.entity(sendWorkerEventRequest, MediaType.APPLICATION_JSON))
assert(HttpServletResponse.SC_BAD_REQUEST == response.getStatus)
assert(response.readEntity(classOf[String]).contains(
"None of the workers are known"))
assert(
response.readEntity(classOf[String]).contains("eventType(null) and workers([]) are required"))
sendWorkerEventRequest.eventType(SendWorkerEventRequest.EventTypeEnum.NONE)
response = webTarget.path("workers/events").request(MediaType.APPLICATION_JSON).post(
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"))
sendWorkerEventRequest.workers(Collections.singletonList(worker))
response = webTarget.path("workers/events").request(MediaType.APPLICATION_JSON).post(
Entity.entity(sendWorkerEventRequest, MediaType.APPLICATION_JSON))
assert(HttpServletResponse.SC_BAD_REQUEST == response.getStatus)
assert(response.readEntity(classOf[String]).contains("None of the workers are known"))
}
}

View File

@ -85,7 +85,7 @@ public class SendWorkerEventRequest {
}
public static final String JSON_PROPERTY_EVENT_TYPE = "eventType";
private EventTypeEnum eventType = EventTypeEnum.NONE;
private EventTypeEnum eventType;
public static final String JSON_PROPERTY_WORKERS = "workers";
private List<WorkerId> workers = new ArrayList<>();

View File

@ -704,7 +704,6 @@ components:
properties:
eventType:
type: string
default: None
description: The type of the event.
enum:
- Immediately