hu xiaodong created HADOOP-14807: ------------------------------------ Summary: should prevent the possibility of NPE about ReconfigurableBase.java Key: HADOOP-14807 URL: https://issues.apache.org/jira/browse/HADOOP-14807 Project: Hadoop Common Issue Type: Improvement Reporter: hu xiaodong Assignee: hu xiaodong Priority: Minor
1. {code:title=ReconfigurationThread.java|borderStyle=solid} protected String reconfigurePropertyImpl(String property, String newVal) throws ReconfigurationException { final DatanodeManager datanodeManager = namesystem.getBlockManager() .getDatanodeManager(); if (property.equals(DFS_HEARTBEAT_INTERVAL_KEY)) { return reconfHeartbeatInterval(datanodeManager, property, newVal); } else if (property.equals(DFS_NAMENODE_HEARTBEAT_RECHECK_INTERVAL_KEY)) { return reconfHeartbeatRecheckInterval(datanodeManager, property, newVal); } else if (property.equals(FS_PROTECTED_DIRECTORIES)) { return reconfProtectedDirectories(newVal); } else if (property.equals(HADOOP_CALLER_CONTEXT_ENABLED_KEY)) { return reconfCallerContextEnabled(newVal); } else if (property.equals(ipcClientRPCBackoffEnable)) { return reconfigureIPCBackoffEnabled(newVal); } //======================================================= //here may throw a ReconfigurationException which getCause() is null //======================================================= else { throw new ReconfigurationException(property, newVal, getConf().get( property)); } } {code} 2. {code:title=ReconfigurationThread.java|borderStyle=solid} private static class ReconfigurationThread extends Thread { private ReconfigurableBase parent; ReconfigurationThread(ReconfigurableBase base) { this.parent = base; } // See {@link ReconfigurationServlet#applyChanges} public void run() { LOG.info("Starting reconfiguration task."); final Configuration oldConf = parent.getConf(); final Configuration newConf = parent.getNewConf(); final Collection<PropertyChange> changes = parent.getChangedProperties(newConf, oldConf); Map<PropertyChange, Optional<String>> results = Maps.newHashMap(); ConfigRedactor oldRedactor = new ConfigRedactor(oldConf); ConfigRedactor newRedactor = new ConfigRedactor(newConf); for (PropertyChange change : changes) { String errorMessage = null; String oldValRedacted = oldRedactor.redact(change.prop, change.oldVal); String newValRedacted = newRedactor.redact(change.prop, change.newVal); if (!parent.isPropertyReconfigurable(change.prop)) { LOG.info(String.format( "Property %s is not configurable: old value: %s, new value: %s", change.prop, oldValRedacted, newValRedacted)); continue; } LOG.info("Change property: " + change.prop + " from \"" + ((change.oldVal == null) ? "<default>" : oldValRedacted) + "\" to \"" + ((change.newVal == null) ? "<default>" : newValRedacted) + "\"."); try { String effectiveValue = parent.reconfigurePropertyImpl(change.prop, change.newVal); if (change.newVal != null) { oldConf.set(change.prop, effectiveValue); } else { oldConf.unset(change.prop); } } catch (ReconfigurationException e) { //=============================================== // here may occurs NPE, because e.getCause() may be null. //=============================================== errorMessage = e.getCause().getMessage(); } results.put(change, Optional.fromNullable(errorMessage)); } synchronized (parent.reconfigLock) { parent.endTime = Time.now(); parent.status = Collections.unmodifiableMap(results); parent.reconfigThread = null; } } } {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: common-dev-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-dev-h...@hadoop.apache.org