You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2022/05/03 15:30:56 UTC
[tika] branch main updated: TIKA-3748 -- allow expansion of system properties into forked process system properties.
This is an automated email from the ASF dual-hosted git repository.
tallison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git
The following commit(s) were added to refs/heads/main by this push:
new 33aa848cf TIKA-3748 -- allow expansion of system properties into forked process system properties.
33aa848cf is described below
commit 33aa848cfbe1f725c1a92be6d9d9067698478d5a
Author: tallison <ta...@apache.org>
AuthorDate: Tue May 3 11:30:41 2022 -0400
TIKA-3748 -- allow expansion of system properties into forked process system properties.
---
CHANGES.txt | 5 +++
.../apache/tika/server/core/TikaServerConfig.java | 39 +++++++++++++++++++++-
.../tika/server/core/TikaServerWatchDog.java | 2 --
.../tika/server/core/TikaServerConfigTest.java | 20 +++++++++++
4 files changed, 63 insertions(+), 3 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 1fbbd8ed0..e815c5557 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,8 @@
+Release 2.4.1 - ???
+
+ * Users can expand system properties from the forking
+ process into forked tika-server processes (TIKA-3748).
+
Release 2.4.0 - 04/23/2022
* NOTE: To save on resources, we no longer include the
diff --git a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerConfig.java b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerConfig.java
index f0afbc6aa..4a00ba0ba 100644
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerConfig.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerConfig.java
@@ -31,6 +31,8 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.cli.CommandLine;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
@@ -44,6 +46,10 @@ import org.apache.tika.utils.XMLReaderUtils;
public class TikaServerConfig extends ConfigBase {
+ private static final Logger LOG = LoggerFactory.getLogger(TikaServerConfig.class);
+
+ private static Pattern SYS_PROPS = Pattern.compile("\\$\\{sys:([-_0-9A-Za-z]+)\\}");
+
public static final int DEFAULT_PORT = 9998;
public static final String DEFAULT_HOST = "localhost";
public static final Set<String> LOG_LEVELS = new HashSet<>(Arrays.asList("debug", "info"));
@@ -394,9 +400,10 @@ public class TikaServerConfig extends ConfigBase {
}
public void setForkedJvmArgs(List<String> forkedJvmArgs) {
- this.forkedJvmArgs = new ArrayList<>(forkedJvmArgs);
+ this.forkedJvmArgs = new ArrayList<>(interpolateSysProps(forkedJvmArgs));
}
+
public String getTempFilePrefix() {
return tempFilePrefix;
}
@@ -615,4 +622,34 @@ public class TikaServerConfig extends ConfigBase {
public Set<String> getSupportedEmitters() {
return supportedEmitters;
}
+
+ protected static List<String> interpolateSysProps(List<String> forkedJvmArgs) {
+ List<String> ret = new ArrayList<>();
+ for (String arg : forkedJvmArgs) {
+ if (arg.startsWith("-D")) {
+ String interpolated = interpolate(arg);
+ ret.add(interpolated);
+ } else {
+ ret.add(arg);
+ }
+ }
+ return ret;
+ }
+
+ private static String interpolate(String arg) {
+ StringBuffer sb = new StringBuffer();
+ Matcher m = SYS_PROPS.matcher(arg);
+ while (m.find()) {
+ String prop = System.getProperty(m.group(1));
+ LOG.debug("interpolating {} -> {}", m.group(1), prop);
+ if (prop == null) {
+ LOG.warn("no system property set for {}, falling back to {}", m.group(1), arg);
+ return arg;
+ }
+ m.appendReplacement(sb, prop);
+ }
+ m.appendTail(sb);
+ return sb.toString();
+ }
+
}
diff --git a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerWatchDog.java b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerWatchDog.java
index 650a7e2c0..91eaec464 100644
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerWatchDog.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerWatchDog.java
@@ -398,8 +398,6 @@ public class TikaServerWatchDog implements Callable<WatchDogResult> {
argList.add(Integer.toString(numRestarts));
LOG.debug("forked process commandline: " + argList.toString());
builder.command(argList);
- //copy forking processes' env variables
- builder.environment().putAll(System.getenv());
//now overwrite with the specific server id
//this is mostly for log4j 2.x so that different processes
//can log to different log files via {env:tika.server.id}
diff --git a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerConfigTest.java b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerConfigTest.java
index 57ae3281e..916c092e8 100644
--- a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerConfigTest.java
+++ b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerConfigTest.java
@@ -21,7 +21,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import org.apache.commons.cli.CommandLine;
@@ -114,4 +116,22 @@ public class TikaServerConfigTest {
System.out.println(tlsConfig);
}
+ @Test
+ public void testInterpolation() throws Exception {
+ List<String> input = new ArrayList<>();
+ System.setProperty("logpath", "qwertyuiop");
+ try {
+ input.add("-Dlogpath=\"${sys:logpath}\"");
+ input.add("-Dlogpath=no-interpolation");
+ input.add("-Xlogpath=\"${sys:logpath}\"");
+
+ List<String> output = TikaServerConfig.interpolateSysProps(input);
+ assertEquals("-Dlogpath=\"qwertyuiop\"", output.get(0));
+ assertEquals("-Dlogpath=no-interpolation", output.get(1));
+ assertEquals("-Xlogpath=\"${sys:logpath}\"", output.get(2));
+
+ } finally {
+ System.clearProperty("logpath");
+ }
+ }
}