From 1a9ddb66946897de2d6bb8319fb6fa8c48550f4c Mon Sep 17 00:00:00 2001 From: Peter Somogyi Date: Wed, 23 Jun 2021 13:24:08 +0200 Subject: [PATCH] Revert "Remove the reflection and call Configuration.getPassword() directly. (#3408)" This reverts commit 9a324bd4d07e4e00ac559f245315993155619989. --- .../hadoop/hbase/HBaseConfiguration.java | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java index 596c52b0093..0bc8a1400f1 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java @@ -200,14 +200,35 @@ public class HBaseConfiguration extends Configuration { */ public static String getPassword(Configuration conf, String alias, String defPass) throws IOException { - String passwd; - char[] p = conf.getPassword(alias); - if (p != null) { - LOG.debug("Config option {} was found through the Configuration getPassword method.", alias); - passwd = new String(p); - } else { - LOG.debug("Config option {} was not found. Using provided default value", alias); - passwd = defPass; + String passwd = null; + try { + Method m = Configuration.class.getMethod("getPassword", String.class); + char[] p = (char[]) m.invoke(conf, alias); + if (p != null) { + LOG.debug(String.format("Config option \"%s\" was found through" + + " the Configuration getPassword method.", alias)); + passwd = new String(p); + } else { + LOG.debug(String.format( + "Config option \"%s\" was not found. Using provided default value", + alias)); + passwd = defPass; + } + } catch (NoSuchMethodException e) { + // this is a version of Hadoop where the credential + //provider API doesn't exist yet + LOG.debug(String.format( + "Credential.getPassword method is not available." + + " Falling back to configuration.")); + passwd = conf.get(alias, defPass); + } catch (SecurityException e) { + throw new IOException(e.getMessage(), e); + } catch (IllegalAccessException e) { + throw new IOException(e.getMessage(), e); + } catch (IllegalArgumentException e) { + throw new IOException(e.getMessage(), e); + } catch (InvocationTargetException e) { + throw new IOException(e.getMessage(), e); } return passwd; }