use of org.apache.pulsar.functions.worker.FunctionMetaDataManager in project incubator-pulsar by apache.
the class FunctionsImpl method registerFunction.
@POST
@Path("/{tenant}/{namespace}/{functionName}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response registerFunction(@PathParam("tenant") final String tenant, @PathParam("namespace") final String namespace, @PathParam("functionName") final String functionName, @FormDataParam("data") final InputStream uploadedInputStream, @FormDataParam("data") final FormDataContentDisposition fileDetail, @FormDataParam("functionConfig") final String functionConfigJson) {
FunctionConfig functionConfig;
// validate parameters
try {
functionConfig = validateUpdateRequestParams(tenant, namespace, functionName, uploadedInputStream, fileDetail, functionConfigJson);
} catch (IllegalArgumentException e) {
log.error("Invalid register 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 {}/{}/{} already exists", tenant, namespace, functionName);
return Response.status(Status.BAD_REQUEST).type(MediaType.APPLICATION_JSON).entity(new ErrorData(String.format("Function %s already exists", functionName))).build();
}
// function state
FunctionMetaData.Builder functionMetaDataBuilder = FunctionMetaData.newBuilder().setFunctionConfig(functionConfig).setCreateTime(System.currentTimeMillis()).setVersion(0);
PackageLocationMetaData.Builder packageLocationMetaDataBuilder = PackageLocationMetaData.newBuilder().setPackagePath(String.format("%s/%s/%s/%s", tenant, namespace, functionName, Utils.getUniquePackageName(fileDetail.getFileName())));
functionMetaDataBuilder.setPackageLocation(packageLocationMetaDataBuilder);
return updateRequest(functionMetaDataBuilder.build(), uploadedInputStream);
}
use of org.apache.pulsar.functions.worker.FunctionMetaDataManager 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();
}
use of org.apache.pulsar.functions.worker.FunctionMetaDataManager in project incubator-pulsar by apache.
the class FunctionsImpl method listFunctions.
@GET
@Path("/{tenant}/{namespace}")
public Response listFunctions(@PathParam("tenant") final String tenant, @PathParam("namespace") final String namespace) {
// validate parameters
try {
validateListFunctionRequestParams(tenant, namespace);
} catch (IllegalArgumentException e) {
log.error("Invalid listFunctions request @ /{}/{}", tenant, namespace, e);
return Response.status(Status.BAD_REQUEST).type(MediaType.APPLICATION_JSON).entity(new ErrorData(e.getMessage())).build();
}
FunctionMetaDataManager functionMetaDataManager = worker().getFunctionMetaDataManager();
Collection<String> functionStateList = functionMetaDataManager.listFunctions(tenant, namespace);
return Response.status(Status.OK).entity(new Gson().toJson(functionStateList.toArray())).build();
}
use of org.apache.pulsar.functions.worker.FunctionMetaDataManager in project incubator-pulsar by apache.
the class FunctionsImpl method getFunctionStatus.
@GET
@Path("/{tenant}/{namespace}/{functionName}/status")
public Response getFunctionStatus(@PathParam("tenant") final String tenant, @PathParam("namespace") final String namespace, @PathParam("functionName") final String functionName) throws IOException {
// validate parameters
try {
validateGetFunctionRequestParams(tenant, namespace, functionName);
} catch (IllegalArgumentException e) {
log.error("Invalid getFunctionStatus 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 in getFunctionStatus 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();
}
FunctionRuntimeManager functionRuntimeManager = worker().getFunctionRuntimeManager();
InstanceCommunication.FunctionStatusList functionStatusList = null;
try {
functionStatusList = functionRuntimeManager.getAllFunctionStatus(tenant, namespace, functionName);
} catch (Exception e) {
log.error("Got Exception Getting Status", e);
FunctionStatus.Builder functionStatusBuilder = FunctionStatus.newBuilder();
functionStatusBuilder.setRunning(false);
String functionConfigJson = org.apache.pulsar.functions.utils.Utils.printJson(functionStatusBuilder.build());
return Response.status(Status.OK).entity(functionConfigJson).build();
}
String jsonResponse = org.apache.pulsar.functions.utils.Utils.printJson(functionStatusList);
return Response.status(Status.OK).entity(jsonResponse).build();
}
Aggregations