This is an automated email from the ASF dual-hosted git repository. rdhabalia pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-pulsar.git
The following commit(s) were added to refs/heads/master by this push: new 10ce8ec Add CLI to get function status of a specific instance (#2518) 10ce8ec is described below commit 10ce8ec603c64581f086497cd8192538ba6cdd12 Author: Rajan Dhabalia <rdhaba...@apache.org> AuthorDate: Wed Sep 5 10:37:14 2018 -0700 Add CLI to get function status of a specific instance (#2518) * Add CLI to get function status of a specific instance * fix condition and test --- .../org/apache/pulsar/client/admin/Functions.java | 20 +++++++++++++++++++- .../pulsar/client/admin/internal/FunctionsImpl.java | 20 ++++++++++++++++++++ .../apache/pulsar/admin/cli/CmdFunctionsTest.java | 16 ++++++++++++++++ .../org/apache/pulsar/admin/cli/CmdFunctions.java | 9 ++++++++- site2/docs/reference-pulsar-admin.md | 2 +- 5 files changed, 64 insertions(+), 3 deletions(-) diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/Functions.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/Functions.java index 96e9cbc..9a18460 100644 --- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/Functions.java +++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/Functions.java @@ -26,6 +26,7 @@ import org.apache.pulsar.client.admin.PulsarAdminException.NotFoundException; import org.apache.pulsar.client.admin.PulsarAdminException.PreconditionFailedException; import org.apache.pulsar.common.io.ConnectorDefinition; import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.InstanceCommunication.FunctionStatus; import org.apache.pulsar.functions.proto.InstanceCommunication.FunctionStatusList; import org.apache.pulsar.functions.proto.InstanceCommunication.Metrics; import org.apache.pulsar.functions.worker.WorkerInfo; @@ -181,7 +182,24 @@ public interface Functions { * Unexpected error */ FunctionStatusList getFunctionStatus(String tenant, String namespace, String function) throws PulsarAdminException; - + + /** + * Gets the current status of a function instance. + * + * @param tenant + * Tenant name + * @param namespace + * Namespace name + * @param function + * Function name + * @param id + * Function instance-id + * @return + * @throws PulsarAdminException + */ + FunctionStatus getFunctionStatus(String tenant, String namespace, String function, int id) + throws PulsarAdminException; + /** * Restart function instance * diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/FunctionsImpl.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/FunctionsImpl.java index 4552eba..7dc7050 100644 --- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/FunctionsImpl.java +++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/FunctionsImpl.java @@ -46,6 +46,7 @@ import org.apache.pulsar.client.api.Authentication; import org.apache.pulsar.common.io.ConnectorDefinition; import org.apache.pulsar.common.policies.data.ErrorData; import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.InstanceCommunication.FunctionStatus; import org.apache.pulsar.functions.proto.InstanceCommunication.FunctionStatusList; import org.apache.pulsar.functions.worker.WorkerInfo; import org.glassfish.jersey.media.multipart.FormDataBodyPart; @@ -110,6 +111,25 @@ public class FunctionsImpl extends BaseResource implements Functions { } @Override + public FunctionStatus getFunctionStatus(String tenant, String namespace, String function, int id) + throws PulsarAdminException { + try { + Response response = request( + functions.path(tenant).path(namespace).path(function).path(Integer.toString(id)).path("status")) + .get(); + if (!response.getStatusInfo().equals(Response.Status.OK)) { + throw new ClientErrorException(response); + } + String jsonResponse = response.readEntity(String.class); + FunctionStatus.Builder functionStatusBuilder = FunctionStatus.newBuilder(); + mergeJson(jsonResponse, functionStatusBuilder); + return functionStatusBuilder.build(); + } catch (Exception e) { + throw getApiException(e); + } + } + + @Override public void createFunction(FunctionDetails functionDetails, String fileName) throws PulsarAdminException { try { final FormDataMultiPart mp = new FormDataMultiPart(); diff --git a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/CmdFunctionsTest.java b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/CmdFunctionsTest.java index fe0a3f4..de5a9e0 100644 --- a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/CmdFunctionsTest.java +++ b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/CmdFunctionsTest.java @@ -30,6 +30,7 @@ import org.apache.bookkeeper.common.concurrent.FutureUtils; import org.apache.pulsar.admin.cli.CmdFunctions.CreateFunction; import org.apache.pulsar.admin.cli.CmdFunctions.DeleteFunction; import org.apache.pulsar.admin.cli.CmdFunctions.GetFunction; +import org.apache.pulsar.admin.cli.CmdFunctions.GetFunctionStatus; import org.apache.pulsar.admin.cli.CmdFunctions.ListFunctions; import org.apache.pulsar.admin.cli.CmdFunctions.RestartFunction; import org.apache.pulsar.admin.cli.CmdFunctions.StopFunction; @@ -305,6 +306,21 @@ public class CmdFunctionsTest { } @Test + public void testGetFunctionStatus() throws Exception { + String fnName = TEST_NAME + "-function"; + String tenant = "sample"; + String namespace = "ns1"; + int instanceId = 0; + cmd.run(new String[] { "getstatus", "--tenant", tenant, "--namespace", namespace, "--name", fnName, + "--instance-id", Integer.toString(instanceId)}); + + GetFunctionStatus status = cmd.getStatuser(); + assertEquals(fnName, status.getFunctionName()); + + verify(functions, times(1)).getFunctionStatus(tenant, namespace, fnName, instanceId); + } + + @Test public void testCreateFunctionWithFileUrl() throws Exception { String fnName = TEST_NAME + "-function"; String inputTopicName = TEST_NAME + "-input-topic"; diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdFunctions.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdFunctions.java index 7f2f521..99ef4dd 100644 --- a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdFunctions.java +++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdFunctions.java @@ -872,9 +872,16 @@ public class CmdFunctions extends CmdBase { @Parameters(commandDescription = "Check the current status of a Pulsar Function") class GetFunctionStatus extends FunctionCommand { + + @Parameter(names = "--instance-id", description = "The function instanceId (Get-status of all instances if instance-id is not provided") + protected String instanceId; + @Override void runCmd() throws Exception { - String json = Utils.printJson(admin.functions().getFunctionStatus(tenant, namespace, functionName)); + String json = Utils.printJson( + isBlank(instanceId) ? admin.functions().getFunctionStatus(tenant, namespace, functionName) + : admin.functions().getFunctionStatus(tenant, namespace, functionName, + Integer.parseInt(instanceId))); Gson gson = new GsonBuilder().setPrettyPrinting().create(); System.out.println(gson.toJson(new JsonParser().parse(json))); } diff --git a/site2/docs/reference-pulsar-admin.md b/site2/docs/reference-pulsar-admin.md index 03e1472..5b1fb41 100644 --- a/site2/docs/reference-pulsar-admin.md +++ b/site2/docs/reference-pulsar-admin.md @@ -501,7 +501,7 @@ Options |`--name`|The name of the function|| |`--namespace`|The namespace of the function|| |`--tenant`|The tenant of the function|| - +|`--instance-id`|The function instanceId; get status of all instances if instance-id is not provided|| ### `list` List all Pulsar Functions for a specific tenant and namespace