You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by si...@apache.org on 2020/03/26 07:02:55 UTC
[pulsar] branch master updated: [Issue 6170][functions] add custom
property option to functions (#6348)
This is an automated email from the ASF dual-hosted git repository.
sijie 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 00463ad [Issue 6170][functions] add custom property option to functions (#6348)
00463ad is described below
commit 00463adfd5c59958479b9b3a8e26140ab07fd8c1
Author: Neng Lu <nl...@streamnative.io>
AuthorDate: Thu Mar 26 00:02:45 2020 -0700
[Issue 6170][functions] add custom property option to functions (#6348)
Fixes #6170
### Motivation
Allow users set custom system properties while submitting functions. This can be used to pass credentials via system property.
### Modifications
- pulsar-admin client tool to accept multiple `--custom-property` options while creating the function
- function's java runtime to append these provided properties.
---
.../org/apache/pulsar/functions/instance/ContextImpl.java | 14 +++++++++++++-
.../apache/pulsar/functions/instance/JavaInstanceMain.java | 2 +-
.../pulsar/functions/runtime/process/ProcessRuntime.java | 3 +++
.../apache/pulsar/functions/utils/FunctionConfigUtils.java | 2 ++
4 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/ContextImpl.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/ContextImpl.java
index e75f5fd..8d489a2 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/ContextImpl.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/ContextImpl.java
@@ -235,8 +235,20 @@ class ContextImpl implements Context, SinkContext, SourceContext {
@Override
public Optional<Object> getUserConfigValue(String key) {
+ Object value = userConfigs.getOrDefault(key, null);
- return Optional.ofNullable(userConfigs.getOrDefault(key, null));
+ if (value instanceof String && ((String) value).startsWith("$")) {
+ // any string starts with '$' is considered as system env symbol and will be
+ // replaced with the actual env value
+ try {
+ String actualValue = System.getenv(((String) value).substring(1));
+ return Optional.ofNullable(actualValue);
+ } catch (SecurityException ex) {
+ throw new RuntimeException("Access to environment variable " + value + " is not allowed.", ex);
+ }
+ } else {
+ return Optional.ofNullable(value);
+ }
}
@Override
diff --git a/pulsar-functions/runtime-all/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceMain.java b/pulsar-functions/runtime-all/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceMain.java
index 592990e..bd64bf7 100644
--- a/pulsar-functions/runtime-all/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceMain.java
+++ b/pulsar-functions/runtime-all/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceMain.java
@@ -63,7 +63,7 @@ public class JavaInstanceMain {
// Get classpath for function instance
String functionInstanceClasspath = System.getProperty(FUNCTIONS_INSTANCE_CLASSPATH);
if (functionInstanceClasspath == null) {
- throw new IllegalArgumentException("Propery " + FUNCTIONS_INSTANCE_CLASSPATH + " is not set!");
+ throw new IllegalArgumentException("Property " + FUNCTIONS_INSTANCE_CLASSPATH + " is not set!");
}
List<File> files = new LinkedList<>();
diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/ProcessRuntime.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/ProcessRuntime.java
index adc477f..91e2e08 100644
--- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/ProcessRuntime.java
+++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/ProcessRuntime.java
@@ -50,6 +50,9 @@ import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
/**
* A function container implemented using java thread.
diff --git a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionConfigUtils.java b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionConfigUtils.java
index 00b31ab..c2e63ff 100644
--- a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionConfigUtils.java
+++ b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionConfigUtils.java
@@ -35,6 +35,8 @@ import java.io.File;
import java.lang.reflect.Type;
import java.net.MalformedURLException;
import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import static org.apache.commons.lang.StringUtils.isNotBlank;
import static org.apache.commons.lang.StringUtils.isNotEmpty;