use of org.apache.pulsar.functions.worker.request.RequestResult in project incubator-pulsar by apache.
the class FunctionApiV2ResourceTest method testUpdateFunctionInterrupted.
@Test
public void testUpdateFunctionInterrupted() throws Exception {
mockStatic(Utils.class);
doNothing().when(Utils.class);
Utils.uploadToBookeeper(any(Namespace.class), any(InputStream.class), anyString());
when(mockedManager.containsFunction(eq(tenant), eq(namespace), eq(function))).thenReturn(true);
CompletableFuture<RequestResult> requestResult = FutureUtil.failedFuture(new IOException("Function registeration interrupted"));
when(mockedManager.updateFunction(any(FunctionMetaData.class))).thenReturn(requestResult);
Response response = updateDefaultFunction();
assertEquals(Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus());
assertEquals(new ErrorData("Function registeration interrupted").reason, ((ErrorData) response.getEntity()).reason);
}
use of org.apache.pulsar.functions.worker.request.RequestResult in project incubator-pulsar by apache.
the class FunctionApiV2ResourceTest method testDeregisterFunctionInterrupted.
@Test
public void testDeregisterFunctionInterrupted() throws Exception {
when(mockedManager.containsFunction(eq(tenant), eq(namespace), eq(function))).thenReturn(true);
CompletableFuture<RequestResult> requestResult = FutureUtil.failedFuture(new IOException("Function deregisteration interrupted"));
when(mockedManager.deregisterFunction(eq(tenant), eq(namespace), eq(function))).thenReturn(requestResult);
Response response = deregisterDefaultFunction();
assertEquals(Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus());
assertEquals(new ErrorData("Function deregisteration interrupted").reason, ((ErrorData) response.getEntity()).reason);
}
use of org.apache.pulsar.functions.worker.request.RequestResult in project incubator-pulsar by apache.
the class FunctionsImpl method deregisterFunction.
@DELETE
@Path("/{tenant}/{namespace}/{functionName}")
public Response deregisterFunction(@PathParam("tenant") final String tenant, @PathParam("namespace") final String namespace, @PathParam("functionName") final String functionName) {
// validate parameters
try {
validateDeregisterRequestParams(tenant, namespace, functionName);
} catch (IllegalArgumentException e) {
log.error("Invalid deregister function request @ /{}/{}/{}", tenant, namespace, functionName, e);
return Response.status(Status.BAD_REQUEST).type(MediaType.APPLICATION_JSON).entity(new ErrorData(e.getMessage())).build();
}
FunctionMetaDataManager functionMetaDataManager = worker().getFunctionMetaDataManager();
if (!functionMetaDataManager.containsFunction(tenant, namespace, functionName)) {
log.error("Function to deregister does not exist @ /{}/{}/{}", tenant, namespace, functionName);
return Response.status(Status.NOT_FOUND).type(MediaType.APPLICATION_JSON).entity(new ErrorData(String.format("Function %s doesn't exist", functionName))).build();
}
CompletableFuture<RequestResult> completableFuture = functionMetaDataManager.deregisterFunction(tenant, namespace, functionName);
RequestResult requestResult = null;
try {
requestResult = completableFuture.get();
if (!requestResult.isSuccess()) {
return Response.status(Status.BAD_REQUEST).type(MediaType.APPLICATION_JSON).entity(new ErrorData(requestResult.getMessage())).build();
}
} catch (ExecutionException e) {
log.error("Execution Exception while deregistering function @ /{}/{}/{}", tenant, namespace, functionName, e);
return Response.serverError().type(MediaType.APPLICATION_JSON).entity(new ErrorData(e.getCause().getMessage())).build();
} catch (InterruptedException e) {
log.error("Interrupted Exception while deregistering function @ /{}/{}/{}", tenant, namespace, functionName, e);
return Response.status(Status.REQUEST_TIMEOUT).type(MediaType.APPLICATION_JSON).build();
}
return Response.status(Status.OK).entity(requestResult.toJson()).build();
}
Aggregations