 -  T register(final String name, final String description, final T sink) {
 -    LOG.debug(name +", "+ description);
 -    if (allSinks.containsKey(name)) {
--      LOG.warn("Sink "+ name +" already exists!");
+-      if(sinks.get(name) == null) {
+-        registerSink(name, description, sink);
+-      } else {
+-        LOG.warn("Sink "+ name +" already exists!");
+-      }
 -      return sink;
 -    }
 -    allSinks.put(name, sink);

-   */
-  public abstract <T> T register(String name, String desc, T source);
-
-  /**
    * Unregister a metrics source
    * @param name of the source. This is the name you use to call register()
    */
@@ -77,18 +65,19 @@
    */
   @InterfaceAudience.Private
   public abstract MetricsSource getSource(String name);
+

   /**
-   * Register a metrics sink

   /**
    * Register a callback interface for JMX events
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
index a6edf08e5a7..5b87be1ec67 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
@@ -269,31 +269,6 @@ void registerSource(String name, String desc, MetricsSource source) {
     LOG.debug("Registered source "+ name);
   }

