diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/FunctionsBase.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/FunctionsBase.java
index e1318ba4ab3c6..b53c1b129a5c7 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/FunctionsBase.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/FunctionsBase.java
@@ -57,10 +57,10 @@ public Response registerFunction(final @PathParam("tenant") String tenant,
final @PathParam("functionName") String functionName,
final @FormDataParam("data") InputStream uploadedInputStream,
final @FormDataParam("data") FormDataContentDisposition fileDetail,
- final @FormDataParam("functionConfig") String functionConfigJson) {
+ final @FormDataParam("functionDetails") String functionDetailsJson) {
return functions.registerFunction(
- tenant, namespace, functionName, uploadedInputStream, fileDetail, functionConfigJson);
+ tenant, namespace, functionName, uploadedInputStream, fileDetail, functionDetailsJson);
}
@@ -72,10 +72,10 @@ public Response updateFunction(final @PathParam("tenant") String tenant,
final @PathParam("functionName") String functionName,
final @FormDataParam("data") InputStream uploadedInputStream,
final @FormDataParam("data") FormDataContentDisposition fileDetail,
- final @FormDataParam("functionConfig") String functionConfigJson) {
+ final @FormDataParam("functionDetails") String functionDetailsJson) {
return functions.updateFunction(
- tenant, namespace, functionName, uploadedInputStream, fileDetail, functionConfigJson);
+ tenant, namespace, functionName, uploadedInputStream, fileDetail, functionDetailsJson);
}
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 3808a488d8135..4a3dbe5d7b70f 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
@@ -21,7 +21,7 @@
import org.apache.pulsar.client.admin.PulsarAdminException.NotAuthorizedException;
import org.apache.pulsar.client.admin.PulsarAdminException.NotFoundException;
import org.apache.pulsar.client.admin.PulsarAdminException.PreconditionFailedException;
-import org.apache.pulsar.functions.shaded.proto.Function.FunctionConfig;
+import org.apache.pulsar.functions.shaded.proto.Function.FunctionDetails;
import org.apache.pulsar.functions.shaded.proto.InstanceCommunication.FunctionStatusList;
import java.util.List;
@@ -73,24 +73,24 @@ public interface Functions {
* @throws PulsarAdminException
* Unexpected error
*/
- FunctionConfig getFunction(String tenant, String namespace, String function) throws PulsarAdminException;
+ FunctionDetails getFunction(String tenant, String namespace, String function) throws PulsarAdminException;
/**
* Create a new function.
*
- * @param functionConfig
+ * @param functionDetails
* the function configuration object
*
* @throws PulsarAdminException
* Unexpected error
*/
- void createFunction(FunctionConfig functionConfig, String fileName) throws PulsarAdminException;
+ void createFunction(FunctionDetails functionDetails, String fileName) throws PulsarAdminException;
/**
* Update the configuration for a function.
*
*
- * @param functionConfig
+ * @param functionDetails
* the function configuration object
*
* @throws NotAuthorizedException
@@ -100,7 +100,7 @@ public interface Functions {
* @throws PulsarAdminException
* Unexpected error
*/
- void updateFunction(FunctionConfig functionConfig, String fileName) throws PulsarAdminException;
+ void updateFunction(FunctionDetails functionDetails, String fileName) throws PulsarAdminException;
/**
* Delete an existing function
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 175e4f31c73bf..eb793cce39679 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
@@ -23,7 +23,7 @@
import org.apache.pulsar.client.admin.PulsarAdminException;
import org.apache.pulsar.client.api.Authentication;
import org.apache.pulsar.common.policies.data.*;
-import org.apache.pulsar.functions.shaded.proto.Function.FunctionConfig;
+import org.apache.pulsar.functions.shaded.proto.Function.FunctionDetails;
import org.apache.pulsar.functions.shaded.proto.InstanceCommunication.FunctionStatusList;
import org.glassfish.jersey.media.multipart.FormDataBodyPart;
import org.glassfish.jersey.media.multipart.FormDataMultiPart;
@@ -68,16 +68,16 @@ public List getFunctions(String tenant, String namespace) throws PulsarA
}
@Override
- public FunctionConfig getFunction(String tenant, String namespace, String function) throws PulsarAdminException {
+ public FunctionDetails getFunction(String tenant, String namespace, String function) throws PulsarAdminException {
try {
Response response = request(functions.path(tenant).path(namespace).path(function)).get();
if (!response.getStatusInfo().equals(Response.Status.OK)) {
throw new ClientErrorException(response);
}
String jsonResponse = response.readEntity(String.class);
- FunctionConfig.Builder functionConfigBuilder = FunctionConfig.newBuilder();
- mergeJson(jsonResponse, functionConfigBuilder);
- return functionConfigBuilder.build();
+ FunctionDetails.Builder functionDetailsBuilder = FunctionDetails.newBuilder();
+ mergeJson(jsonResponse, functionDetailsBuilder);
+ return functionDetailsBuilder.build();
} catch (Exception e) {
throw getApiException(e);
}
@@ -101,16 +101,16 @@ public FunctionStatusList getFunctionStatus(
}
@Override
- public void createFunction(FunctionConfig functionConfig, String fileName) throws PulsarAdminException {
+ public void createFunction(FunctionDetails functionDetails, String fileName) throws PulsarAdminException {
try {
final FormDataMultiPart mp = new FormDataMultiPart();
mp.bodyPart(new FileDataBodyPart("data", new File(fileName), MediaType.APPLICATION_OCTET_STREAM_TYPE));
- mp.bodyPart(new FormDataBodyPart("functionConfig",
- printJson(functionConfig),
+ mp.bodyPart(new FormDataBodyPart("functionDetails",
+ printJson(functionDetails),
MediaType.APPLICATION_JSON_TYPE));
- request(functions.path(functionConfig.getTenant()).path(functionConfig.getNamespace()).path(functionConfig.getName()))
+ request(functions.path(functionDetails.getTenant()).path(functionDetails.getNamespace()).path(functionDetails.getName()))
.post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA), ErrorData.class);
} catch (Exception e) {
throw getApiException(e);
@@ -128,16 +128,16 @@ public void deleteFunction(String cluster, String namespace, String function) th
}
@Override
- public void updateFunction(FunctionConfig functionConfig, String fileName) throws PulsarAdminException {
+ public void updateFunction(FunctionDetails functionDetails, String fileName) throws PulsarAdminException {
try {
final FormDataMultiPart mp = new FormDataMultiPart();
if (fileName != null) {
mp.bodyPart(new FileDataBodyPart("data", new File(fileName), MediaType.APPLICATION_OCTET_STREAM_TYPE));
}
- mp.bodyPart(new FormDataBodyPart("functionConfig",
- printJson(functionConfig),
+ mp.bodyPart(new FormDataBodyPart("functionDetails",
+ printJson(functionDetails),
MediaType.APPLICATION_JSON_TYPE));
- request(functions.path(functionConfig.getTenant()).path(functionConfig.getNamespace()).path(functionConfig.getName()))
+ request(functions.path(functionDetails.getTenant()).path(functionDetails.getNamespace()).path(functionDetails.getName()))
.put(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA), ErrorData.class);
} catch (Exception e) {
throw getApiException(e);
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 5f745d15a8c7e..83220d027053a 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
@@ -53,7 +53,7 @@
import org.apache.pulsar.functions.api.Context;
import org.apache.pulsar.functions.api.Function;
import org.apache.pulsar.functions.api.utils.DefaultSerDe;
-import org.apache.pulsar.functions.shaded.proto.Function.FunctionConfig;
+import org.apache.pulsar.functions.shaded.proto.Function.FunctionDetails;
import org.apache.pulsar.functions.shaded.io.netty.buffer.ByteBuf;
import org.apache.pulsar.functions.shaded.io.netty.buffer.ByteBufUtil;
import org.apache.pulsar.functions.utils.Reflections;
@@ -188,7 +188,7 @@ public void testCreateFunction() throws Exception {
assertEquals(inputTopicName, creater.getInputs());
assertEquals(outputTopicName, creater.getOutput());
- verify(functions, times(1)).createFunction(any(FunctionConfig.class), anyString());
+ verify(functions, times(1)).createFunction(any(FunctionDetails.class), anyString());
}
@@ -209,7 +209,7 @@ public void testCreateWithoutTenant() throws Exception {
CreateFunction creater = cmd.getCreater();
assertEquals("tenant", creater.getFunctionConfig().getTenant());
- verify(functions, times(1)).createFunction(any(FunctionConfig.class), anyString());
+ verify(functions, times(1)).createFunction(any(FunctionDetails.class), anyString());
}
@Test
@@ -229,7 +229,7 @@ public void testCreateWithoutNamespace() throws Exception {
CreateFunction creater = cmd.getCreater();
assertEquals("tenant", creater.getFunctionConfig().getTenant());
assertEquals("namespace", creater.getFunctionConfig().getNamespace());
- verify(functions, times(1)).createFunction(any(FunctionConfig.class), anyString());
+ verify(functions, times(1)).createFunction(any(FunctionDetails.class), anyString());
}
@Test
@@ -254,7 +254,7 @@ public void testCreateUsingFullyQualifiedFunctionName() throws Exception {
assertEquals(tenant, creater.getFunctionConfig().getTenant());
assertEquals(namespace, creater.getFunctionConfig().getNamespace());
assertEquals(functionName, creater.getFunctionConfig().getName());
- verify(functions, times(1)).createFunction(any(FunctionConfig.class), anyString());
+ verify(functions, times(1)).createFunction(any(FunctionDetails.class), anyString());
}
@Test
@@ -273,7 +273,7 @@ public void testCreateWithoutFunctionName() throws Exception {
CreateFunction creater = cmd.getCreater();
assertEquals("CmdFunctionsTest$DummyFunction", creater.getFunctionConfig().getName());
- verify(functions, times(1)).createFunction(any(FunctionConfig.class), anyString());
+ verify(functions, times(1)).createFunction(any(FunctionDetails.class), anyString());
}
@Test
@@ -290,7 +290,7 @@ public void testCreateWithoutOutputTopic() throws Exception {
CreateFunction creater = cmd.getCreater();
assertEquals(inputTopicName + "-" + "CmdFunctionsTest$DummyFunction" + "-output", creater.getFunctionConfig().getOutput());
- verify(functions, times(1)).createFunction(any(FunctionConfig.class), anyString());
+ verify(functions, times(1)).createFunction(any(FunctionDetails.class), anyString());
}
@Test
@@ -359,7 +359,7 @@ public void testUpdateFunction() throws Exception {
assertEquals(inputTopicName, updater.getInputs());
assertEquals(outputTopicName, updater.getOutput());
- verify(functions, times(1)).updateFunction(any(FunctionConfig.class), anyString());
+ verify(functions, times(1)).updateFunction(any(FunctionDetails.class), anyString());
}
@Test
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 66b8630b5eeef..71ba928cb7371 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
@@ -32,6 +32,8 @@
import java.util.Map;
import java.util.UUID;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import org.apache.bookkeeper.api.StorageClient;
import org.apache.bookkeeper.api.kv.Table;
import org.apache.bookkeeper.api.kv.result.KeyValue;
@@ -43,6 +45,7 @@
import org.apache.pulsar.client.api.PulsarClientException;
import org.apache.pulsar.common.naming.TopicName;
import org.apache.pulsar.functions.api.Function;
+import org.apache.pulsar.functions.utils.FunctionConfig;
import org.apache.pulsar.functions.api.SerDe;
import org.apache.pulsar.functions.api.utils.DefaultSerDe;
import org.apache.pulsar.functions.instance.InstanceConfig;
@@ -51,8 +54,7 @@
import org.apache.pulsar.functions.shaded.io.netty.buffer.ByteBuf;
import org.apache.pulsar.functions.shaded.io.netty.buffer.ByteBufUtil;
import org.apache.pulsar.functions.shaded.io.netty.buffer.Unpooled;
-import org.apache.pulsar.functions.shaded.proto.Function.FunctionConfig;
-import org.apache.pulsar.functions.utils.FunctionConfigUtils;
+import org.apache.pulsar.functions.shaded.proto.Function.FunctionDetails;
import org.apache.pulsar.functions.utils.Reflections;
import org.apache.pulsar.functions.utils.Utils;
@@ -162,7 +164,7 @@ void processArguments() throws Exception {
* Commands that require a function config
*/
@Getter
- abstract class FunctionConfigCommand extends BaseCommand {
+ abstract class FunctionDetailsCommand extends BaseCommand {
@Parameter(names = "--fqfn", description = "The Fully Qualified Function Name (FQFN) for the function")
protected String fqfn;
@Parameter(names = "--tenant", description = "The function's tenant")
@@ -211,103 +213,100 @@ abstract class FunctionConfigCommand extends BaseCommand {
void processArguments() throws Exception {
super.processArguments();
- FunctionConfig.Builder functionConfigBuilder;
-
// Initialize config builder either from a supplied YAML config file or from scratch
if (null != fnConfigFile) {
- functionConfigBuilder = loadConfig(new File(fnConfigFile));
+ functionConfig = loadConfig(new File(fnConfigFile));
} else {
- functionConfigBuilder = FunctionConfig.newBuilder();
+ functionConfig = new FunctionConfig();
}
if (null != fqfn) {
- parseFullyQualifiedFunctionName(fqfn, functionConfigBuilder);
+ parseFullyQualifiedFunctionName(fqfn, functionConfig);
} else {
if (null != tenant) {
- functionConfigBuilder.setTenant(tenant);
+ functionConfig.setTenant(tenant);
}
if (null != namespace) {
- functionConfigBuilder.setNamespace(namespace);
+ functionConfig.setNamespace(namespace);
}
if (null != functionName) {
- functionConfigBuilder.setName(functionName);
+ functionConfig.setName(functionName);
}
}
if (null != inputs) {
- Arrays.asList(inputs.split(",")).forEach(functionConfigBuilder::addInputs);
+ Arrays.asList(inputs.split(",")).forEach(functionConfig.getInputs()::add);
}
if (null != customSerdeInputString) {
Type type = new TypeToken