From f133e0161c7502f9ce513fee368671acaffe2802 Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Wed, 15 Feb 2017 03:05:01 -0800 Subject: [PATCH] HDFS-11333. Print a user friendly error message when plugins are not found. Contributed by Wei-Chiu Chuang. (cherry picked from commit 859bd159ae554174200334b5eb1d7e8dbef958ad) (cherry picked from commit a8531d5d52fb219c2adb5b6025cfc3fad264e8aa) (cherry picked from commit 4c47cb68e88505d5fdc6830a4789e78a974cb9cf) --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 ++ .../apache/hadoop/hdfs/server/datanode/DataNode.java | 10 +++++++++- .../apache/hadoop/hdfs/server/namenode/NameNode.java | 11 +++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index de05e6383d8..ba788c079de 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -70,6 +70,8 @@ Release 2.7.4 - UNRELEASED HDFS-10534. NameNode WebUI should display DataNode usage histogram. (Kai Sasaki via zhz) + HDFS-11333. Print a user friendly error message when plugins are not found. (Wei-Chiu Chuang) + OPTIMIZATIONS HDFS-10896. Move lock logging logic from FSNamesystem into FSNamesystemLock. diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java index 9ba64b4b213..12b3c9fdae0 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java @@ -769,7 +769,15 @@ public class DataNode extends ReconfigurableBase } private void startPlugins(Configuration conf) { - plugins = conf.getInstances(DFS_DATANODE_PLUGINS_KEY, ServicePlugin.class); + try { + plugins = conf.getInstances(DFS_DATANODE_PLUGINS_KEY, + ServicePlugin.class); + } catch (RuntimeException e) { + String pluginsValue = conf.get(DFS_DATANODE_PLUGINS_KEY); + LOG.error("Unable to load DataNode plugins. Specified list of plugins: " + + pluginsValue, e); + throw e; + } for (ServicePlugin p: plugins) { try { p.start(this); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java index 5bac79cf1a5..b90be7c8d15 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java @@ -684,8 +684,15 @@ public class NameNode implements NameNodeStatusMXBean { httpServer.setFSImage(getFSImage()); } rpcServer.start(); - plugins = conf.getInstances(DFS_NAMENODE_PLUGINS_KEY, - ServicePlugin.class); + try { + plugins = conf.getInstances(DFS_NAMENODE_PLUGINS_KEY, + ServicePlugin.class); + } catch (RuntimeException e) { + String pluginsValue = conf.get(DFS_NAMENODE_PLUGINS_KEY); + LOG.error("Unable to load NameNode plugins. Specified list of plugins: " + + pluginsValue, e); + throw e; + } for (ServicePlugin p: plugins) { try { p.start(this);