Repository: hadoop
Updated Branches:
  refs/heads/HDFS-7240 8475d6bb5 -> bb3c07fa3


HDFS-13395. Ozone: Plugins support in HDSL Datanode Service. Contributed by 
Nanda Kumar.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/bb3c07fa
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/bb3c07fa
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/bb3c07fa

Branch: refs/heads/HDFS-7240
Commit: bb3c07fa3e4f5b5c38c251e882a357eddab0957f
Parents: 8475d6b
Author: Xiaoyu Yao <x...@apache.org>
Authored: Tue Apr 10 11:28:52 2018 -0700
Committer: Xiaoyu Yao <x...@apache.org>
Committed: Tue Apr 10 11:28:52 2018 -0700

----------------------------------------------------------------------
 .../src/main/compose/cblock/docker-config       |   3 +-
 .../src/main/compose/ozone/docker-config        |   3 +-
 .../apache/hadoop/ozone/OzoneConfigKeys.java    |   3 +
 .../common/src/main/resources/ozone-default.xml |   8 ++
 .../hadoop/ozone/HddsDatanodeService.java       | 118 ++++++++++++++-----
 .../statemachine/DatanodeStateMachine.java      |  10 ++
 .../hadoop/hdfs/server/datanode/DataNode.java   |   5 -
 .../server/datanode/DataNodeServicePlugin.java  |  48 --------
 .../src/test/compose/docker-config              |   3 +-
 .../hadoop/ozone/MiniOzoneClassicCluster.java   |   4 +-
 .../hadoop/ozone/MiniOzoneTestHelper.java       |   5 +
 .../hadoop/ozone/web/ObjectStoreRestPlugin.java | 108 -----------------
 .../ozone/web/OzoneHddsDatanodeService.java     |  84 +++++++++++++
 13 files changed, 208 insertions(+), 194 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-dist/src/main/compose/cblock/docker-config
----------------------------------------------------------------------
diff --git a/hadoop-dist/src/main/compose/cblock/docker-config 
b/hadoop-dist/src/main/compose/cblock/docker-config
index 4690de0..f69bef0 100644
--- a/hadoop-dist/src/main/compose/cblock/docker-config
+++ b/hadoop-dist/src/main/compose/cblock/docker-config
@@ -27,7 +27,8 @@ OZONE-SITE.XML_ozone.scm.client.address=scm
 OZONE-SITE.XML_dfs.cblock.jscsi.cblock.server.address=cblock
 OZONE-SITE.XML_dfs.cblock.scm.ipaddress=scm
 OZONE-SITE.XML_dfs.cblock.service.leveldb.path=/tmp
-HDFS-SITE.XML_dfs.datanode.plugins=org.apache.hadoop.ozone.web.ObjectStoreRestPlugin,org.apache.hadoop.ozone.HddsDatanodeService
+OZONE-SITE.XML_hdds.datanode.plugins=org.apache.hadoop.ozone.web.OzoneHddsDatanodeService
+HDFS-SITE.XML_dfs.datanode.plugins=org.apache.hadoop.ozone.HddsDatanodeService
 HDFS-SITE.XML_dfs.namenode.rpc-address=namenode:9000
 HDFS-SITE.XML_dfs.namenode.name.dir=/data/namenode
 HDFS-SITE.XML_rpc.metrics.quantile.enable=true

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-dist/src/main/compose/ozone/docker-config
----------------------------------------------------------------------
diff --git a/hadoop-dist/src/main/compose/ozone/docker-config 
b/hadoop-dist/src/main/compose/ozone/docker-config
index 8e5efa9..c693db0 100644
--- a/hadoop-dist/src/main/compose/ozone/docker-config
+++ b/hadoop-dist/src/main/compose/ozone/docker-config
@@ -23,11 +23,12 @@ OZONE-SITE.XML_ozone.scm.block.client.address=scm
 OZONE-SITE.XML_ozone.metadata.dirs=/data/metadata
 OZONE-SITE.XML_ozone.handler.type=distributed
 OZONE-SITE.XML_ozone.scm.client.address=scm
+OZONE-SITE.XML_hdds.datanode.plugins=org.apache.hadoop.ozone.web.OzoneHddsDatanodeService
 HDFS-SITE.XML_dfs.namenode.rpc-address=namenode:9000
 HDFS-SITE.XML_dfs.namenode.name.dir=/data/namenode
 HDFS-SITE.XML_rpc.metrics.quantile.enable=true
 HDFS-SITE.XML_rpc.metrics.percentiles.intervals=60,300
-HDFS-SITE.XML_dfs.datanode.plugins=org.apache.hadoop.ozone.web.ObjectStoreRestPlugin,org.apache.hadoop.ozone.HddsDatanodeService
+HDFS-SITE.XML_dfs.datanode.plugins=org.apache.hadoop.ozone.HddsDatanodeService
 LOG4J.PROPERTIES_log4j.rootLogger=INFO, stdout
 LOG4J.PROPERTIES_log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 LOG4J.PROPERTIES_log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
index ef96f379..72531a2 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java
@@ -230,6 +230,9 @@ public final class OzoneConfigKeys {
   public static final String OZONE_SCM_WEB_AUTHENTICATION_KERBEROS_PRINCIPAL =
       "ozone.web.authentication.kerberos.principal";
 
+  public static final String HDDS_DATANODE_PLUGINS_KEY =
+      "hdds.datanode.plugins";
+
   /**
    * There is no need to instantiate this class.
    */

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-hdds/common/src/main/resources/ozone-default.xml
----------------------------------------------------------------------
diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml 
b/hadoop-hdds/common/src/main/resources/ozone-default.xml
index 8018d29..78525a6 100644
--- a/hadoop-hdds/common/src/main/resources/ozone-default.xml
+++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml
@@ -1027,5 +1027,13 @@
     </description>
   </property>
 
+  <property>
+    <name>hdds.datanode.plugins</name>
+    <value>org.apache.hadoop.ozone.web.OzoneHddsDatanodeService</value>
+    <description>
+      Comma-separated list of HDDS datanode plug-ins to be activated when
+      HDDS service starts as part of datanode.
+    </description>
+  </property>
 
 </configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/HddsDatanodeService.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/HddsDatanodeService.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/HddsDatanodeService.java
index 7213e7e..1c30f2e 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/HddsDatanodeService.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/HddsDatanodeService.java
@@ -17,65 +17,71 @@
  */
 package org.apache.hadoop.ozone;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
-import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.conf.Configurable;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hdds.scm.ScmConfigKeys;
 import org.apache.hadoop.hdfs.server.datanode.DataNode;
-import org.apache.hadoop.hdfs.server.datanode.DataNodeServicePlugin;
 import org.apache.hadoop.hdds.HddsUtils;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.protocol.DatanodeDetails;
 import org.apache.hadoop.ozone.container.common.helpers.ContainerUtils;
 import org.apache.hadoop.ozone.container.common.statemachine
     .DatanodeStateMachine;
+import org.apache.hadoop.util.ServicePlugin;
+import org.apache.hadoop.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.IOException;
 import java.net.InetAddress;
+import java.util.List;
 import java.util.UUID;
 
+import static 
org.apache.hadoop.ozone.OzoneConfigKeys.HDDS_DATANODE_PLUGINS_KEY;
+import static org.apache.hadoop.util.ExitUtil.terminate;
+
 /**
  * Datanode service plugin to start the HDDS container services.
  */
-public class HddsDatanodeService implements DataNodeServicePlugin {
+public class HddsDatanodeService implements ServicePlugin {
 
   private static final Logger LOG = LoggerFactory.getLogger(
       HddsDatanodeService.class);
 
-  private final boolean isOzoneEnabled;
 
   private Configuration conf;
   private DatanodeDetails datanodeDetails;
   private DatanodeStateMachine datanodeStateMachine;
-
-  public HddsDatanodeService() {
-    try {
-      OzoneConfiguration.activate();
-      this.conf = new OzoneConfiguration();
-      this.isOzoneEnabled = HddsUtils.isHddsEnabled(conf);
-      if (isOzoneEnabled) {
-        this.datanodeDetails = getDatanodeDetails(conf);
-        String hostname = DataNode.getHostName(conf);
-        String ip = InetAddress.getByName(hostname).getHostAddress();
-        this.datanodeDetails.setHostName(hostname);
-        this.datanodeDetails.setIpAddress(ip);
-      }
-    } catch (IOException e) {
-      throw new RuntimeException("Can't start the HDDS datanode plugin", e);
-    }
-  }
+  private List<ServicePlugin> plugins;
 
   @Override
   public void start(Object service) {
-    if (isOzoneEnabled) {
+    OzoneConfiguration.activate();
+    if (service instanceof Configurable) {
+      conf = new OzoneConfiguration(((Configurable) service).getConf());
+    } else {
+      conf = new OzoneConfiguration();
+    }
+    if (HddsUtils.isHddsEnabled(conf)) {
       try {
-        DataNode dataNode = (DataNode) service;
-        datanodeDetails.setInfoPort(dataNode.getInfoPort());
-        datanodeDetails.setInfoSecurePort(dataNode.getInfoSecurePort());
+        String hostname = DataNode.getHostName(conf);
+        String ip = InetAddress.getByName(hostname).getHostAddress();
+        datanodeDetails = initializeDatanodeDetails();
+        datanodeDetails.setHostName(hostname);
+        datanodeDetails.setIpAddress(ip);
+
+        //Below block should be removed as part of HDFS-13324
+        if (service != null) {
+          DataNode dataNode = (DataNode) service;
+          datanodeDetails.setInfoPort(dataNode.getInfoPort());
+          datanodeDetails.setInfoSecurePort(dataNode.getInfoSecurePort());
+        }
         datanodeStateMachine = new DatanodeStateMachine(datanodeDetails, conf);
+        startPlugins();
+        // Starting HDDS Daemons
         datanodeStateMachine.startDaemon();
       } catch (IOException e) {
         throw new RuntimeException("Can't start the HDDS datanode plugin", e);
@@ -84,11 +90,11 @@ public class HddsDatanodeService implements 
DataNodeServicePlugin {
   }
 
   /**
-   * Returns ContainerNodeIDProto or null in case of Error.
+   * Returns DatanodeDetails or null in case of Error.
    *
-   * @return ContainerNodeIDProto
+   * @return DatanodeDetails
    */
-  private static DatanodeDetails getDatanodeDetails(Configuration conf)
+  private DatanodeDetails initializeDatanodeDetails()
       throws IOException {
     String idFilePath = HddsUtils.getDatanodeIdFilePath(conf);
     if (idFilePath == null || idFilePath.isEmpty()) {
@@ -111,24 +117,62 @@ public class HddsDatanodeService implements 
DataNodeServicePlugin {
       return DatanodeDetails.newBuilder().setUuid(datanodeUuid).build();
     }
   }
+  private void startPlugins() {
+    try {
+      plugins = conf.getInstances(HDDS_DATANODE_PLUGINS_KEY,
+          ServicePlugin.class);
+    } catch (RuntimeException e) {
+      String pluginsValue = conf.get(HDDS_DATANODE_PLUGINS_KEY);
+      LOG.error("Unable to load HDDS DataNode plugins. " +
+          "Specified list of plugins: {}",
+          pluginsValue, e);
+      throw e;
+    }
+    for (ServicePlugin plugin : plugins) {
+      try {
+        plugin.start(this);
+        LOG.info("Started plug-in {}", plugin);
+      } catch (Throwable t) {
+        LOG.warn("ServicePlugin {} could not be started", plugin, t);
+      }
+    }
+  }
 
+  public Configuration getConf() {
+    return conf;
+  }
   /**
    *
    * Return DatanodeDetails if set, return null otherwise.
    *
    * @return DatanodeDetails
    */
+  @VisibleForTesting
   public DatanodeDetails getDatanodeDetails() {
     return datanodeDetails;
   }
 
-  @InterfaceAudience.Private
+  @VisibleForTesting
   public DatanodeStateMachine getDatanodeStateMachine() {
     return datanodeStateMachine;
   }
 
+  public void join() throws InterruptedException {
+    datanodeStateMachine.join();
+  }
+
   @Override
   public void stop() {
+    if (plugins != null) {
+      for (ServicePlugin plugin : plugins) {
+        try {
+          plugin.stop();
+          LOG.info("Stopped plug-in {}", plugin);
+        } catch (Throwable t) {
+          LOG.warn("ServicePlugin {} could not be stopped", plugin, t);
+        }
+      }
+    }
     if (datanodeStateMachine != null) {
       datanodeStateMachine.stopDaemon();
     }
@@ -137,4 +181,20 @@ public class HddsDatanodeService implements 
DataNodeServicePlugin {
   @Override
   public void close() throws IOException {
   }
+
+  public static HddsDatanodeService createHddsDatanodeService(String args[]) {
+    StringUtils.startupShutdownMessage(HddsDatanodeService.class, args, LOG);
+    return new HddsDatanodeService();
+  }
+
+  public static void main(String args[]) {
+    try {
+      HddsDatanodeService hddsDatanodeService = 
createHddsDatanodeService(args);
+      hddsDatanodeService.start(null);
+      hddsDatanodeService.join();
+    } catch (Throwable e) {
+      LOG.error("Exception in while starting HddsDatanodeService.", e);
+      terminate(1, e);
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
index 8e9482f..ef1ba59 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
@@ -297,6 +297,16 @@ public class DatanodeStateMachine implements Closeable {
   }
 
   /**
+   * Waits for DatanodeStateMachine to exit.
+   *
+   * @throws InterruptedException
+   */
+  public void join() throws InterruptedException {
+    stateMachineThread.join();
+    cmdProcessThread.join();
+  }
+
+  /**
    * Stop the daemon thread of the datanode state machine.
    */
   public synchronized void stopDaemon() {

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNode.java
----------------------------------------------------------------------
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 e04673e..c8b36f0 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
@@ -1553,11 +1553,6 @@ public class DataNode extends ReconfigurableBase
         streamingAddr.getAddress().getHostAddress(), hostName, 
         storage.getDatanodeUuid(), getXferPort(), getInfoPort(),
             infoSecurePort, getIpcPort());
-    for (ServicePlugin plugin : plugins) {
-      if (plugin instanceof DataNodeServicePlugin) {
-        ((DataNodeServicePlugin) plugin).onDatanodeIdCreation(dnId);
-      }
-    }
     return new DatanodeRegistration(dnId, storageInfo, 
         new ExportedBlockKeys(), VersionInfo.getVersion());
   }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNodeServicePlugin.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNodeServicePlugin.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNodeServicePlugin.java
deleted file mode 100644
index 08aae8b..0000000
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataNodeServicePlugin.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hadoop.hdfs.server.datanode;
-
-import org.apache.hadoop.hdfs.protocol.DatanodeID;
-import org.apache.hadoop.hdfs.server.protocol.DatanodeRegistration;
-import org.apache.hadoop.util.ServicePlugin;
-
-/**
- * Datanode specific service plugin with additional hooks.
- */
-public interface DataNodeServicePlugin extends ServicePlugin{
-
-  /**
-   * Extension point to modify the datanode id.
-   *
-   * @param dataNodeId
-   */
-  default void onDatanodeIdCreation(DatanodeID dataNodeId) {
-    //NOOP
-  }
-
-  /**
-   * Extension point to modify the datanode id.
-   *
-   * @param dataNodeId
-   */
-  default void onDatanodeSuccessfulNamenodeRegisration(
-      DatanodeRegistration dataNodeId) {
-    //NOOP
-  }
-}

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-ozone/acceptance-test/src/test/compose/docker-config
----------------------------------------------------------------------
diff --git a/hadoop-ozone/acceptance-test/src/test/compose/docker-config 
b/hadoop-ozone/acceptance-test/src/test/compose/docker-config
index 8e5efa9..c693db0 100644
--- a/hadoop-ozone/acceptance-test/src/test/compose/docker-config
+++ b/hadoop-ozone/acceptance-test/src/test/compose/docker-config
@@ -23,11 +23,12 @@ OZONE-SITE.XML_ozone.scm.block.client.address=scm
 OZONE-SITE.XML_ozone.metadata.dirs=/data/metadata
 OZONE-SITE.XML_ozone.handler.type=distributed
 OZONE-SITE.XML_ozone.scm.client.address=scm
+OZONE-SITE.XML_hdds.datanode.plugins=org.apache.hadoop.ozone.web.OzoneHddsDatanodeService
 HDFS-SITE.XML_dfs.namenode.rpc-address=namenode:9000
 HDFS-SITE.XML_dfs.namenode.name.dir=/data/namenode
 HDFS-SITE.XML_rpc.metrics.quantile.enable=true
 HDFS-SITE.XML_rpc.metrics.percentiles.intervals=60,300
-HDFS-SITE.XML_dfs.datanode.plugins=org.apache.hadoop.ozone.web.ObjectStoreRestPlugin,org.apache.hadoop.ozone.HddsDatanodeService
+HDFS-SITE.XML_dfs.datanode.plugins=org.apache.hadoop.ozone.HddsDatanodeService
 LOG4J.PROPERTIES_log4j.rootLogger=INFO, stdout
 LOG4J.PROPERTIES_log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 LOG4J.PROPERTIES_log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneClassicCluster.java
----------------------------------------------------------------------
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneClassicCluster.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneClassicCluster.java
index 9335c7c..6a79cd9 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneClassicCluster.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneClassicCluster.java
@@ -77,6 +77,7 @@ import static org.apache.hadoop.ozone.OzoneConfigKeys
 
 import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeState
     .HEALTHY;
+import static 
org.apache.hadoop.ozone.OzoneConfigKeys.HDDS_DATANODE_PLUGINS_KEY;
 import static org.junit.Assert.assertFalse;
 
 /**
@@ -501,8 +502,9 @@ public final class MiniOzoneClassicCluster extends 
MiniDFSCluster
       conf.set(KSMConfigKeys.OZONE_KSM_HTTP_ADDRESS_KEY, "127.0.0.1:0");
       conf.set(ScmConfigKeys.HDDS_REST_HTTP_ADDRESS_KEY, "127.0.0.1:0");
       conf.set(DFS_DATANODE_PLUGINS_KEY,
-          "org.apache.hadoop.ozone.web.ObjectStoreRestPlugin," +
           "org.apache.hadoop.ozone.HddsDatanodeService");
+      conf.set(HDDS_DATANODE_PLUGINS_KEY,
+          "org.apache.hadoop.ozone.web.OzoneHddsDatanodeService");
 
       // Configure KSM and SCM handlers
       conf.setInt(ScmConfigKeys.OZONE_SCM_HANDLER_COUNT_KEY, numOfScmHandlers);

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneTestHelper.java
----------------------------------------------------------------------
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneTestHelper.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneTestHelper.java
index 2ab427c..fc6380a 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneTestHelper.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/MiniOzoneTestHelper.java
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.ozone;
 
+import org.apache.hadoop.hdds.protocol.DatanodeDetails;
 import org.apache.hadoop.hdfs.server.datanode.DataNode;
 import org.apache.hadoop.ozone.container.common.interfaces.ContainerManager;
 import org.apache.hadoop.ozone.container.common.statemachine
@@ -32,6 +33,10 @@ public class MiniOzoneTestHelper {
   private MiniOzoneTestHelper() {
   }
 
+  public static DatanodeDetails getDatanodeDetails(DataNode dataNode) {
+    return findHddsPlugin(dataNode).getDatanodeDetails();
+  }
+
   public static OzoneContainer getOzoneContainer(DataNode dataNode) {
     return findHddsPlugin(dataNode).getDatanodeStateMachine()
         .getContainer();

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/ObjectStoreRestPlugin.java
----------------------------------------------------------------------
diff --git 
a/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/ObjectStoreRestPlugin.java
 
b/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/ObjectStoreRestPlugin.java
deleted file mode 100644
index 2128b80..0000000
--- 
a/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/ObjectStoreRestPlugin.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership.  The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations 
under
- * the License.
- */
-
-package org.apache.hadoop.ozone.web;
-
-import java.io.IOException;
-import java.nio.channels.ServerSocketChannel;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hdfs.server.datanode.DataNode;
-import org.apache.hadoop.hdfs.server.datanode.DataNodeServicePlugin;
-import org.apache.hadoop.hdfs.server.datanode.ObjectStoreHandler;
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.hdds.protocol.DatanodeDetails;
-import org.apache.hadoop.ozone.HddsDatanodeService;
-import org.apache.hadoop.ozone.web.netty.ObjectStoreRestHttpServer;
-import org.apache.hadoop.ozone.web.utils.OzoneUtils;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.hadoop.util.ServicePlugin;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * DataNode service plugin implementation to start ObjectStore rest server.
- */
-public class ObjectStoreRestPlugin implements DataNodeServicePlugin {
-
-  private static final Logger LOG =
-      LoggerFactory.getLogger(ObjectStoreRestPlugin.class);
-
-  private final boolean isOzoneEnabled;
-
-  private Configuration conf;
-  private ObjectStoreHandler handler;
-  private ObjectStoreRestHttpServer objectStoreRestHttpServer;
-
-  public ObjectStoreRestPlugin() {
-      OzoneConfiguration.activate();
-      this.conf = new OzoneConfiguration();
-      this.isOzoneEnabled = OzoneUtils.isOzoneEnabled(conf);
-  }
-
-  @Override
-  public void start(Object service) {
-    DataNode dataNode = (DataNode) service;
-    if (isOzoneEnabled) {
-      try {
-        handler = new ObjectStoreHandler(dataNode.getConf());
-        ServerSocketChannel httpServerChannel =
-            dataNode.getSecureResources() != null ?
-                dataNode.getSecureResources().getHttpServerChannel() :
-                null;
-
-        objectStoreRestHttpServer =
-            new ObjectStoreRestHttpServer(dataNode.getConf(), 
httpServerChannel,
-                handler);
-
-        objectStoreRestHttpServer.start();
-        getDatanodeDetails(dataNode).setOzoneRestPort(
-            objectStoreRestHttpServer.getHttpAddress().getPort());
-      } catch (IOException e) {
-        throw new RuntimeException("Can't start the Object Store Rest server",
-            e);
-      }
-    }
-  }
-
-  public static DatanodeDetails getDatanodeDetails(DataNode dataNode) {
-    for (ServicePlugin plugin : dataNode.getPlugins()) {
-      if (plugin instanceof HddsDatanodeService) {
-        return ((HddsDatanodeService) plugin).getDatanodeDetails();
-      }
-    }
-    throw new RuntimeException("Not able to find HddsDatanodeService in the" +
-        " list of plugins loaded by DataNode.");
-  }
-
-  @Override
-  public void stop() {
-    try {
-      handler.close();
-    } catch (Exception e) {
-      throw new RuntimeException("Can't stop the Object Store Rest server", e);
-    }
-  }
-
-  @Override
-  public void close() throws IOException {
-    IOUtils.closeQuietly(objectStoreRestHttpServer);
-    IOUtils.closeQuietly(handler);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/hadoop/blob/bb3c07fa/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/OzoneHddsDatanodeService.java
----------------------------------------------------------------------
diff --git 
a/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/OzoneHddsDatanodeService.java
 
b/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/OzoneHddsDatanodeService.java
new file mode 100644
index 0000000..2283ba6
--- /dev/null
+++ 
b/hadoop-ozone/objectstore-service/src/main/java/org/apache/hadoop/ozone/web/OzoneHddsDatanodeService.java
@@ -0,0 +1,84 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership.  The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations 
under
+ * the License.
+ */
+
+package org.apache.hadoop.ozone.web;
+
+import java.io.IOException;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hdfs.server.datanode.ObjectStoreHandler;
+import org.apache.hadoop.ozone.HddsDatanodeService;
+import org.apache.hadoop.ozone.web.netty.ObjectStoreRestHttpServer;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.hadoop.util.ServicePlugin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * DataNode service plugin implementation to start ObjectStore rest server.
+ */
+public class OzoneHddsDatanodeService implements ServicePlugin {
+
+  private static final Logger LOG =
+      LoggerFactory.getLogger(OzoneHddsDatanodeService.class);
+
+  private Configuration conf;
+  private ObjectStoreHandler handler;
+  private ObjectStoreRestHttpServer objectStoreRestHttpServer;
+
+  @Override
+  public void start(Object service) {
+    if (service instanceof HddsDatanodeService) {
+      try {
+        HddsDatanodeService hddsDatanodeService = (HddsDatanodeService) 
service;
+        conf = hddsDatanodeService.getConf();
+        handler = new ObjectStoreHandler(conf);
+        objectStoreRestHttpServer = new ObjectStoreRestHttpServer(
+            conf, null, handler);
+        objectStoreRestHttpServer.start();
+        hddsDatanodeService.getDatanodeDetails().setOzoneRestPort(
+            objectStoreRestHttpServer.getHttpAddress().getPort());
+
+      } catch (IOException e) {
+        throw new RuntimeException("Can't start the Object Store Rest server",
+            e);
+      }
+    } else {
+      LOG.error("Not starting {}, as the plugin is not invoked through {}",
+          OzoneHddsDatanodeService.class.getSimpleName(),
+          HddsDatanodeService.class.getSimpleName());
+    }
+  }
+
+
+  @Override
+  public void stop() {
+    try {
+      handler.close();
+    } catch (Exception e) {
+      throw new RuntimeException("Can't stop the Object Store Rest server", e);
+    }
+  }
+
+  @Override
+  public void close() {
+    IOUtils.closeQuietly(objectStoreRestHttpServer);
+    IOUtils.closeQuietly(handler);
+  }
+
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to