From 1577f57d4c8bc9a0ef200a9e308e1c0f2c21c18f Mon Sep 17 00:00:00 2001 From: fuchaohong <1783129294@qq.com> Date: Sat, 20 Jul 2024 16:13:33 +0800 Subject: [PATCH] HADOOP-19228. ShellCommandFencer#setConfAsEnvVars should also replace '-' with '_'. (#6936). Contributed by fuchaohong. Signed-off-by: He Xiaoqiao --- .../java/org/apache/hadoop/ha/HAServiceTarget.java | 2 +- .../java/org/apache/hadoop/ha/ShellCommandFencer.java | 10 +++++----- .../org/apache/hadoop/ha/TestShellCommandFencer.java | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/HAServiceTarget.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/HAServiceTarget.java index 288a9dcbe0..701862a0f0 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/HAServiceTarget.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/HAServiceTarget.java @@ -183,7 +183,7 @@ public final Map getFencingParameters() { * expose to fencing implementations/scripts. Fencing methods are free * to use this map as they see fit -- notably, the shell script * implementation takes each entry, prepends 'target_', substitutes - * '_' for '.', and adds it to the environment of the script. + * '_' for '.' and '-', and adds it to the environment of the script. * * Subclass implementations should be sure to delegate to the superclass * implementation as well as adding their own keys. diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/ShellCommandFencer.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/ShellCommandFencer.java index 1ffcc3009e..059c87c0d3 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/ShellCommandFencer.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/ShellCommandFencer.java @@ -39,8 +39,8 @@ * (cmd.exe on Windows) and may not include any closing parentheses.

* * The shell command will be run with an environment set up to contain - * all of the current Hadoop configuration variables, with the '_' character - * replacing any '.' characters in the configuration keys.

+ * all of the current Hadoop configuration variables, with the '_' character + * replacing any '.' or '-' characters in the configuration keys.

* * If the shell command returns an exit code of 0, the fencing is * determined to be successful. If it returns any other exit code, the @@ -202,11 +202,11 @@ private static String tryGetPid(Process p) { /** * Set the environment of the subprocess to be the Configuration, - * with '.'s replaced by '_'s. + * with '.'s and '-'s replaced by '_'s. */ private void setConfAsEnvVars(Map env) { for (Map.Entry pair : getConf()) { - env.put(pair.getKey().replace('.', '_'), pair.getValue()); + env.put(pair.getKey().replaceAll("[.-]", "_"), pair.getValue()); } } @@ -237,7 +237,7 @@ private void addTargetInfoAsEnvVars(HAServiceTarget target, for (Map.Entry e : target.getFencingParameters().entrySet()) { String key = prefix + e.getKey(); - key = key.replace('.', '_'); + key = key.replaceAll("[.-]", "_"); environment.put(key, e.getValue()); } } diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestShellCommandFencer.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestShellCommandFencer.java index 88afb35a8d..3eb6f42e46 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestShellCommandFencer.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestShellCommandFencer.java @@ -63,7 +63,7 @@ public void resetLogSpy() { private static ShellCommandFencer createFencer() { Configuration conf = new Configuration(); - conf.set("in.fencing.tests", "yessir"); + conf.set("in.fencing-tests", "yessir"); ShellCommandFencer fencer = new ShellCommandFencer(); fencer.setConf(conf); return fencer;