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 <[email protected]>
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);
}