hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From els...@apache.org
Subject [hbase] branch branch-2.2 updated: HBASE-22701 Disable the DynamicClassLoader when it fails to initialize
Date Thu, 05 Sep 2019 22:53:04 GMT
This is an automated email from the ASF dual-hosted git repository.

elserj pushed a commit to branch branch-2.2
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.2 by this push:
     new ea4cee4  HBASE-22701 Disable the DynamicClassLoader when it fails to initialize
ea4cee4 is described below

commit ea4cee4bf91f5e0024f462baddfac4318ea99459
Author: Josh Elser <elserj@apache.org>
AuthorDate: Tue Jul 16 17:10:27 2019 -0400

    HBASE-22701 Disable the DynamicClassLoader when it fails to initialize
    
    Signed-off-by: Ankit Singhal <ankitsinghal59@gmail.com>
---
 .../hadoop/hbase/util/DynamicClassLoader.java      | 31 ++++++++++++++++------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DynamicClassLoader.java
b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DynamicClassLoader.java
index 28fce21..e769e7f 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DynamicClassLoader.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/DynamicClassLoader.java
@@ -69,7 +69,10 @@ public class DynamicClassLoader extends ClassLoaderBase {
   private static final String DYNAMIC_JARS_OPTIONAL_CONF_KEY = "hbase.use.dynamic.jars";
   private static final boolean DYNAMIC_JARS_OPTIONAL_DEFAULT = true;
 
-  private boolean useDynamicJars;
+  // The user-provided value for using the DynamicClassLoader
+  private final boolean userConfigUseDynamicJars;
+  // The current state of whether to use the DynamicClassLoader
+  private final boolean useDynamicJars;
 
   private File localDir;
 
@@ -91,12 +94,23 @@ public class DynamicClassLoader extends ClassLoaderBase {
       final Configuration conf, final ClassLoader parent) {
     super(parent);
 
-    useDynamicJars = conf.getBoolean(
+    // Save off the user's original configuration value for the DynamicClassLoader
+    userConfigUseDynamicJars = conf.getBoolean(
         DYNAMIC_JARS_OPTIONAL_CONF_KEY, DYNAMIC_JARS_OPTIONAL_DEFAULT);
 
-    if (useDynamicJars) {
-      initTempDir(conf);
+    boolean dynamicJarsEnabled = userConfigUseDynamicJars;
+    if (dynamicJarsEnabled) {
+      try {
+        initTempDir(conf);
+        dynamicJarsEnabled = true;
+      } catch (Exception e) {
+        LOG.error("Disabling the DynamicClassLoader as it failed to initialize its temp directory."
+            + " Check your configuration and filesystem permissions. Custom coprocessor code
may"
+            + " not be loaded as a result of this failure.", e);
+        dynamicJarsEnabled = false;
+      }
     }
+    useDynamicJars = dynamicJarsEnabled;
   }
 
   // FindBugs: Making synchronized to avoid IS2_INCONSISTENT_SYNC complaints about
@@ -132,12 +146,13 @@ public class DynamicClassLoader extends ClassLoaderBase {
     try {
       return parent.loadClass(name);
     } catch (ClassNotFoundException e) {
-      if (LOG.isDebugEnabled()) {
-        LOG.debug("Class " + name + " not found - using dynamical class loader");
-      }
-
       if (useDynamicJars) {
+        LOG.debug("Class {} not found - using dynamical class loader", name);
         return tryRefreshClass(name);
+      } else if (userConfigUseDynamicJars) {
+        // If the user tried to enable the DCL, then warn again.
+        LOG.debug("Not checking DynamicClassLoader for missing class because it is disabled."
+            + " See the log for previous errors.");
       }
       throw e;
     }


Mime
View raw message