You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by ni...@apache.org on 2022/06/16 09:56:14 UTC
[pulsar] branch master updated: [improve][admin] Add option function-type to admin CLI for Functions (#16075)
This is an automated email from the ASF dual-hosted git repository.
nicoloboschi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new eb2a8703d40 [improve][admin] Add option function-type to admin CLI for Functions (#16075)
eb2a8703d40 is described below
commit eb2a8703d403f932f2e340bb777fcfb09ea6e1da
Author: Christophe Bornet <cb...@hotmail.com>
AuthorDate: Thu Jun 16 11:56:03 2022 +0200
[improve][admin] Add option function-type to admin CLI for Functions (#16075)
This option can be used as an alternative to the --jar option to create a built-in Function.
This is the equivalent of the --sink-type/--source-type options of connectors for Functions
---
.../org/apache/pulsar/common/functions/FunctionConfig.java | 1 +
.../java/org/apache/pulsar/admin/cli/CmdFunctionsTest.java | 12 ++++--------
.../main/java/org/apache/pulsar/admin/cli/CmdFunctions.java | 12 ++++++++++++
3 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/functions/FunctionConfig.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/functions/FunctionConfig.java
index 0fe539f491e..527c954110d 100644
--- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/functions/FunctionConfig.java
+++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/functions/FunctionConfig.java
@@ -114,6 +114,7 @@ public class FunctionConfig {
private String jar;
private String py;
private String go;
+ private String functionType;
// Whether the subscriptions the functions created/used should be deleted when the functions is deleted
private Boolean cleanupSubscription;
// This is an arbitrary string that can be interpreted by the function runtime
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 faa94ebef5a..e98894e9c65 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
@@ -78,13 +78,11 @@ public class CmdFunctionsTest {
private static final String PACKAGE_GO_URL = "function://sample/ns1/godummyexamples@1";
private static final String PACKAGE_PY_URL = "function://sample/ns1/pydummyexamples@1";
private static final String PACKAGE_INVALID_URL = "functionsample.jar";
- private static final String BUILTIN_NAR = "builtin://dummyexamples";
+ private static final String BUILTIN_NAR = "dummyexamples";
private PulsarAdmin admin;
private Functions functions;
private CmdFunctions cmd;
- private CmdSinks cmdSinks;
- private CmdSources cmdSources;
public static class DummyFunction implements Function<String, String> {
@@ -105,9 +103,6 @@ public class CmdFunctionsTest {
when(admin.functions()).thenReturn(functions);
when(admin.getServiceUrl()).thenReturn("http://localhost:1234");
this.cmd = new CmdFunctions(() -> admin);
- this.cmdSinks = new CmdSinks(() -> admin);
- this.cmdSources = new CmdSources(() -> admin);
-
}
// @Test
@@ -299,6 +294,7 @@ public class CmdFunctionsTest {
assertEquals(FN_NAME, creater.getFunctionName());
assertEquals(INPUT_TOPIC_NAME, creater.getInputs());
assertEquals(OUTPUT_TOPIC_NAME, creater.getOutput());
+
verify(functions, times(1)).createFunctionWithUrl(any(FunctionConfig.class), anyString());
}
@@ -433,16 +429,16 @@ public class CmdFunctionsTest {
"--name", FN_NAME,
"--inputs", INPUT_TOPIC_NAME,
"--output", OUTPUT_TOPIC_NAME,
- "--jar", BUILTIN_NAR,
+ "--function-type", BUILTIN_NAR,
"--tenant", "sample",
"--namespace", "ns1",
});
-
CreateFunction creater = cmd.getCreater();
assertEquals(FN_NAME, creater.getFunctionName());
assertEquals(INPUT_TOPIC_NAME, creater.getInputs());
assertEquals(OUTPUT_TOPIC_NAME, creater.getOutput());
+ assertEquals("builtin://" + BUILTIN_NAR, creater.getFunctionConfig().getJar());
verify(functions, times(1)).createFunction(any(FunctionConfig.class), anyString());
}
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 61bf9c438d4..f7da5bf7174 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
@@ -198,6 +198,8 @@ public class CmdFunctions extends CmdBase {
protected String deprecatedClassName;
@Parameter(names = "--classname", description = "The class name of a Pulsar Function")
protected String className;
+ @Parameter(names = { "-t", "--function-type" }, description = "The built-in Pulsar Function type")
+ protected String functionType;
@Parameter(names = "--jar", description = "Path to the JAR file for the function "
+ "(if the function is written in Java). It also supports URL path [http/https/file "
+ "(file protocol assumes that file already exists on worker host)/function "
@@ -617,10 +619,20 @@ public class CmdFunctions extends CmdBase {
functionConfig.setDeadLetterTopic(deadLetterTopic);
}
+ if (jarFile != null && functionType != null) {
+ throw new ParameterException("Cannot specify both jar and function-type");
+ }
+
if (null != jarFile) {
functionConfig.setJar(jarFile);
}
+ if (functionType != null) {
+ functionConfig.setJar("builtin://" + functionType);
+ } else if (functionConfig.getFunctionType() != null) {
+ functionConfig.setJar("builtin://" + functionConfig.getFunctionType());
+ }
+
if (null != pyFile) {
functionConfig.setPy(pyFile);
}