This is an automated email from the ASF dual-hosted git repository.

dineshc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 3ab76ce  HDDS-2371. Print Ozone version during startup instead of 
Hadoop version (#869)
3ab76ce is described below

commit 3ab76ce59d529aa4f468a72eb7aec187cb01a0bd
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Tue Jun 2 05:38:15 2020 +0200

    HDDS-2371. Print Ozone version during startup instead of Hadoop version 
(#869)
---
 .../java/org/apache/hadoop/hdds/StringUtils.java   | 77 +++++++++++++++++-
 .../org/apache/hadoop/hdds/utils/SignalLogger.java | 93 ++++++++++++++++++++++
 .../apache/hadoop/ozone/HddsDatanodeService.java   |  9 ++-
 .../scm/server/StorageContainerManagerStarter.java |  7 +-
 .../org/apache/hadoop/ozone/csi/CsiServer.java     |  7 +-
 .../hadoop/ozone/om/OzoneManagerStarter.java       |  9 ++-
 .../org/apache/hadoop/ozone/recon/ReconServer.java |  7 ++
 .../java/org/apache/hadoop/ozone/s3/Gateway.java   |  7 ++
 8 files changed, 201 insertions(+), 15 deletions(-)

diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/StringUtils.java 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/StringUtils.java
index a696a0b..d5d847a 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/StringUtils.java
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/StringUtils.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -19,6 +19,15 @@ package org.apache.hadoop.hdds;
 
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.apache.commons.lang3.SystemUtils;
+import org.apache.hadoop.hdds.utils.SignalLogger;
+import org.apache.hadoop.hdds.utils.VersionInfo;
+import org.apache.hadoop.net.NetUtils;
+import org.apache.hadoop.util.ShutdownHookManager;
+import org.slf4j.Logger;
 
 /**
  * Simple utility class to collection string conversion methods.
@@ -33,6 +42,11 @@ public final class StringUtils {
   private static final String UTF8_CSN = StandardCharsets.UTF_8.name();
 
   /**
+   * Priority of the StringUtils shutdown hook.
+   */
+  private static final int SHUTDOWN_HOOK_PRIORITY = 0;
+
+  /**
    * Decode a specific range of bytes of the given byte array to a string
    * using UTF8.
    *
@@ -73,4 +87,65 @@ public final class StringUtils {
     }
   }
 
+  /**
+   * Return a message for logging.
+   * @param prefix prefix keyword for the message
+   * @param msg content of the message
+   * @return a message for logging
+   */
+  public static String toStartupShutdownString(String prefix, String... msg) {
+    StringBuilder b = new StringBuilder(prefix);
+    
b.append("\n/************************************************************");
+    for (String s : msg) {
+      b.append("\n").append(prefix).append(s);
+    }
+    
b.append("\n************************************************************/");
+    return b.toString();
+  }
+
+  public static void startupShutdownMessage(VersionInfo versionInfo,
+      Class<?> clazz, String[] args, Logger log) {
+    final String hostname = NetUtils.getHostname();
+    final String className = clazz.getSimpleName();
+    if (log.isInfoEnabled()) {
+      log.info(createStartupShutdownMessage(versionInfo, className, hostname,
+          args));
+    }
+
+    if (SystemUtils.IS_OS_UNIX) {
+      try {
+        SignalLogger.INSTANCE.register(log);
+      } catch (Throwable t) {
+        log.warn("failed to register any UNIX signal loggers: ", t);
+      }
+    }
+    ShutdownHookManager.get().addShutdownHook(
+        () -> log.info(toStartupShutdownString("SHUTDOWN_MSG: ",
+            "Shutting down " + className + " at " + hostname)),
+        SHUTDOWN_HOOK_PRIORITY);
+
+  }
+
+  /**
+   * Generate the text for the startup/shutdown message of processes.
+   * @param className short name of the class
+   * @param hostname hostname
+   * @param args Command arguments
+   * @return a string to log.
+   */
+  public static String createStartupShutdownMessage(VersionInfo versionInfo,
+      String className, String hostname, String[] args) {
+    return toStartupShutdownString("STARTUP_MSG: ",
+        "Starting " + className,
+        "  host = " + hostname,
+        "  args = " + (args != null ? Arrays.asList(args) : new ArrayList<>()),
+        "  version = " + versionInfo.getVersion(),
+        "  classpath = " + System.getProperty("java.class.path"),
+        "  build = " + versionInfo.getUrl() + "/"
+            + versionInfo.getRevision()
+            + " ; compiled by '" + versionInfo.getUser()
+            + "' on " + versionInfo.getDate(),
+        "  java = " + System.getProperty("java.version"));
+  }
+
 }
diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/utils/SignalLogger.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/utils/SignalLogger.java
new file mode 100644
index 0000000..5782f80
--- /dev/null
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/utils/SignalLogger.java
@@ -0,0 +1,93 @@
+/*
+ * 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.hdds.utils;
+
+import org.apache.hadoop.hdds.annotation.InterfaceAudience;
+import org.apache.hadoop.hdds.annotation.InterfaceStability;
+import org.slf4j.Logger;
+
+/**
+ * This class logs a message whenever we're about to exit on a UNIX signal.
+ * This is helpful for determining the root cause of a process' exit.
+ * For example, if the process exited because the system administrator 
+ * ran a standard "kill," you would see 'EXITING ON SIGNAL SIGTERM' in the log.
+ */
[email protected]
[email protected]
+public enum SignalLogger {
+
+  INSTANCE;
+
+  private static final String[] SIGNALS = new String[] {"TERM", "HUP", "INT"};
+
+  private boolean registered = false;
+
+  /**
+   * Our signal handler.
+   */
+  private static class Handler implements sun.misc.SignalHandler {
+    private final Logger log;
+    private final sun.misc.SignalHandler prevHandler;
+
+    Handler(String name, Logger log) {
+      this.log = log;
+      prevHandler = sun.misc.Signal.handle(new sun.misc.Signal(name), this);
+    }
+
+    /**
+     * Handle an incoming signal.
+     *
+     * @param signal The incoming signal
+     */
+    @Override
+    public void handle(sun.misc.Signal signal) {
+      log.error("RECEIVED SIGNAL {}: SIG{}",
+          signal.getNumber(), signal.getName());
+      prevHandler.handle(signal);
+    }
+  }
+
+  /**
+   * Register some signal handlers.
+   *
+   * @param log The logger to use in the signal handlers.
+   */
+  public void register(final Logger log) {
+    if (registered) {
+      throw new IllegalStateException("Can't re-install the signal handlers.");
+    }
+    registered = true;
+    StringBuilder bld = new StringBuilder();
+    bld.append("registered UNIX signal handlers for [");
+    String separator = "";
+    for (String signalName : SIGNALS) {
+      try {
+        new Handler(signalName, log);
+        bld.append(separator).append(signalName);
+        separator = ", ";
+      } catch (Exception e) {
+        log.debug("", e);
+      }
+    }
+    bld.append("]");
+    if (log.isInfoEnabled()) {
+      log.info(bld.toString());
+    }
+  }
+}
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 e811a88..80c056e 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
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -31,6 +31,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.hadoop.conf.Configurable;
 import org.apache.hadoop.hdds.DFSConfigKeysLegacy;
 import org.apache.hadoop.hdds.HddsUtils;
+import org.apache.hadoop.hdds.StringUtils;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.conf.ConfigurationSource;
@@ -46,6 +47,7 @@ import 
org.apache.hadoop.hdds.security.x509.certificate.client.DNCertificateClie
 import 
org.apache.hadoop.hdds.security.x509.certificates.utils.CertificateSignRequest;
 import org.apache.hadoop.hdds.server.http.RatisDropwizardExports;
 import org.apache.hadoop.hdds.tracing.TracingUtil;
+import org.apache.hadoop.hdds.utils.HddsVersionInfo;
 import org.apache.hadoop.ozone.container.common.helpers.ContainerUtils;
 import 
org.apache.hadoop.ozone.container.common.statemachine.DatanodeStateMachine;
 import org.apache.hadoop.ozone.container.common.utils.HddsVolumeUtil;
@@ -55,7 +57,6 @@ import org.apache.hadoop.security.SecurityUtil;
 import org.apache.hadoop.security.UserGroupInformation;
 import 
org.apache.hadoop.security.authentication.client.AuthenticationException;
 import org.apache.hadoop.util.ServicePlugin;
-import org.apache.hadoop.util.StringUtils;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
@@ -148,8 +149,8 @@ public class HddsDatanodeService extends GenericCli 
implements ServicePlugin {
   @Override
   public Void call() throws Exception {
     if (printBanner) {
-      StringUtils
-          .startupShutdownMessage(HddsDatanodeService.class, args, LOG);
+      StringUtils.startupShutdownMessage(HddsVersionInfo.HDDS_VERSION_INFO,
+          HddsDatanodeService.class, args, LOG);
     }
     start(createOzoneConfiguration());
     join();
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManagerStarter.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManagerStarter.java
index a1f6a40..afa3732 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManagerStarter.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManagerStarter.java
@@ -21,12 +21,13 @@
  */
 package org.apache.hadoop.hdds.scm.server;
 
+import org.apache.hadoop.hdds.StringUtils;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.tracing.TracingUtil;
+import org.apache.hadoop.hdds.utils.HddsVersionInfo;
 import org.apache.hadoop.ozone.common.StorageInfo;
-import org.apache.hadoop.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import picocli.CommandLine;
@@ -128,8 +129,8 @@ public class StorageContainerManagerStarter extends 
GenericCli {
 
     String[] originalArgs = getCmd().getParseResult().originalArgs()
         .toArray(new String[0]);
-    StringUtils.startupShutdownMessage(StorageContainerManager.class,
-        originalArgs, LOG);
+    StringUtils.startupShutdownMessage(HddsVersionInfo.HDDS_VERSION_INFO,
+        StorageContainerManager.class, originalArgs, LOG);
   }
 
   /**
diff --git 
a/hadoop-ozone/csi/src/main/java/org/apache/hadoop/ozone/csi/CsiServer.java 
b/hadoop-ozone/csi/src/main/java/org/apache/hadoop/ozone/csi/CsiServer.java
index 3cd012e..88ab8d3 100644
--- a/hadoop-ozone/csi/src/main/java/org/apache/hadoop/ozone/csi/CsiServer.java
+++ b/hadoop-ozone/csi/src/main/java/org/apache/hadoop/ozone/csi/CsiServer.java
@@ -19,6 +19,7 @@ package org.apache.hadoop.ozone.csi;
 
 import java.util.concurrent.Callable;
 
+import org.apache.hadoop.hdds.StringUtils;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.conf.Config;
@@ -27,7 +28,7 @@ import org.apache.hadoop.hdds.conf.ConfigTag;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.ozone.client.OzoneClient;
 import org.apache.hadoop.ozone.client.OzoneClientFactory;
-import org.apache.hadoop.util.StringUtils;
+import org.apache.hadoop.ozone.util.OzoneVersionInfo;
 
 import io.grpc.Server;
 import io.grpc.netty.NettyServerBuilder;
@@ -84,8 +85,8 @@ public class CsiServer extends GenericCli implements 
Callable<Void> {
   }
 
   public static void main(String[] args) {
-
-    StringUtils.startupShutdownMessage(CsiServer.class, args, LOG);
+    StringUtils.startupShutdownMessage(OzoneVersionInfo.OZONE_VERSION_INFO,
+        CsiServer.class, args, LOG);
     new CsiServer().run(args);
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerStarter.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerStarter.java
index e553c43..6dc4aea 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerStarter.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerStarter.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -17,12 +17,13 @@
 
 package org.apache.hadoop.ozone.om;
 
+import org.apache.hadoop.hdds.StringUtils;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.tracing.TracingUtil;
+import org.apache.hadoop.ozone.util.OzoneVersionInfo;
 import 
org.apache.hadoop.security.authentication.client.AuthenticationException;
-import org.apache.hadoop.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import picocli.CommandLine;
@@ -107,8 +108,8 @@ public class OzoneManagerStarter extends GenericCli {
 
     String[] originalArgs = getCmd().getParseResult().originalArgs()
         .toArray(new String[0]);
-    StringUtils.startupShutdownMessage(OzoneManager.class,
-        originalArgs, LOG);
+    StringUtils.startupShutdownMessage(OzoneVersionInfo.OZONE_VERSION_INFO,
+        OzoneManager.class, originalArgs, LOG);
   }
 
   /**
diff --git 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
index ee4d5a6..c2b1c5f 100644
--- 
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
+++ 
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/ReconServer.java
@@ -22,6 +22,7 @@ import static 
org.apache.hadoop.hdds.recon.ReconConfig.ConfigStrings.OZONE_RECON
 import static 
org.apache.hadoop.hdds.recon.ReconConfig.ConfigStrings.OZONE_RECON_KERBEROS_PRINCIPAL_KEY;
 
 import org.apache.hadoop.hdds.HddsUtils;
+import org.apache.hadoop.hdds.StringUtils;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.recon.ReconConfig;
@@ -31,6 +32,7 @@ import org.apache.hadoop.ozone.OzoneSecurityUtil;
 import org.apache.hadoop.ozone.recon.spi.ContainerDBServiceProvider;
 import org.apache.hadoop.ozone.recon.spi.OzoneManagerServiceProvider;
 import org.apache.hadoop.ozone.recon.spi.StorageContainerServiceProvider;
+import org.apache.hadoop.ozone.util.OzoneVersionInfo;
 import org.apache.hadoop.security.SecurityUtil;
 import org.apache.hadoop.security.UserGroupInformation;
 import 
org.apache.hadoop.security.authentication.client.AuthenticationException;
@@ -67,6 +69,11 @@ public class ReconServer extends GenericCli {
 
   @Override
   public Void call() throws Exception {
+    String[] originalArgs = getCmd().getParseResult().originalArgs()
+        .toArray(new String[0]);
+    StringUtils.startupShutdownMessage(OzoneVersionInfo.OZONE_VERSION_INFO,
+        ReconServer.class, originalArgs, LOG);
+
     configuration = createOzoneConfiguration();
     ConfigurationProvider.setConfiguration(configuration);
 
diff --git 
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/Gateway.java 
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/Gateway.java
index 05208bc..459a7a4 100644
--- 
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/Gateway.java
+++ 
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/Gateway.java
@@ -19,10 +19,12 @@ package org.apache.hadoop.ozone.s3;
 
 import java.io.IOException;
 
+import org.apache.hadoop.hdds.StringUtils;
 import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.tracing.TracingUtil;
+import org.apache.hadoop.ozone.util.OzoneVersionInfo;
 
 import org.apache.hadoop.security.UserGroupInformation;
 import org.slf4j.Logger;
@@ -58,6 +60,11 @@ public class Gateway extends GenericCli {
   }
 
   public void start() throws IOException {
+    String[] originalArgs = getCmd().getParseResult().originalArgs()
+        .toArray(new String[0]);
+    StringUtils.startupShutdownMessage(OzoneVersionInfo.OZONE_VERSION_INFO,
+        Gateway.class, originalArgs, LOG);
+
     LOG.info("Starting Ozone S3 gateway");
     httpServer.start();
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to