You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by rd...@apache.org on 2018/09/05 17:37:18 UTC
[incubator-pulsar] branch master updated: Add CLI to get function
status of a specific instance (#2518)
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 <rd...@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