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

laszlog pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git


The following commit(s) were added to refs/heads/master by this push:
     new 78b9b09a1 IMPALA-13076 Add pstack and jstack to Impala Redhat docker 
images
78b9b09a1 is described below

commit 78b9b09a16632e1404b3af59ef4932ea19b3d0de
Author: Andrew Sherman <[email protected]>
AuthorDate: Fri Apr 19 17:03:12 2024 -0700

    IMPALA-13076 Add pstack and jstack to Impala Redhat docker images
    
    When the Impala docker images are deployed in production environments,
    it can be hard to add debugging tools at runtime. Two of the most
    useful diagnostic tools are jstack and pstack, which can be used to
    print Java and native stack traces. Install these tools into Redhat
    images which are the most commonly used in production.
    
    To install pstack we install gdb
    To install jstack we install a development jdk on top of the headless
    jdk.
    
    Extend the install_os_packages.sh script to add an argument to
    --install-debug-tools to set the level of diagnostic tools to install.
    The possible arguments are:
      none - install no extra tools
      basic - install pstack and jstack
      full - install more debugging tools.
    
    In a Centos 8.5 build, the size of a impalad_coord_exec image increased
    from 1.74GB to 1.85GB, as reported by ‘docker image list’.
    
    What other tools might be added?
    - Installing perf is tricky as in a container perf requires an
      installation specific to the underlying linux kernel image, which is
      hard to predict at build time.
    - Installing pprof is hard as installation seems to require compiling
      from sources. Clearly there are many options and we cannot install
      everything.
    
    TESTING
    
    Built release and debug docker images, and used jstack and pstack in a
    running container to print Impala's stacks.
    
    Change-Id: I25e6827b86564a9c0fc25678e4a194ee8e0be0e9
    Reviewed-on: http://gerrit.cloudera.org:8080/21433
    Tested-by: Impala Public Jenkins <[email protected]>
    Reviewed-by: Joe McDonnell <[email protected]>
---
 docker/CMakeLists.txt                 | 14 ++++++------
 docker/impala_base/Dockerfile         |  4 ++--
 docker/impala_profile_tool/Dockerfile |  4 ++--
 docker/install_os_packages.sh         | 40 +++++++++++++++++++++++++++++------
 4 files changed, 44 insertions(+), 18 deletions(-)

diff --git a/docker/CMakeLists.txt b/docker/CMakeLists.txt
index 90fa34cc4..508e11199 100644
--- a/docker/CMakeLists.txt
+++ b/docker/CMakeLists.txt
@@ -101,13 +101,13 @@ if (NOT ${DISTRO_BASE_IMAGE} STREQUAL "UNSUPPORTED")
       VERBATIM
     )
   endfunction()
-  add_base_image(release "" "")
-  add_base_image(release_java11 "" "--java 11")
-  add_base_image(release_java17 "" "--java 17")
-  # Debug images include debug tools
-  add_base_image(debug "--debug-build" "--install-debug-tools")
-  add_base_image(debug_java11 "--debug-build" "--install-debug-tools --java 
11")
-  add_base_image(debug_java17 "--debug-build" "--install-debug-tools --java 
17")
+  add_base_image(release "" "--install-debug-tools basic")
+  add_base_image(release_java11 "" "--install-debug-tools basic --java 11")
+  add_base_image(release_java17 "" "--install-debug-tools basic --java 17")
+  # Debug images include full debug tools
+  add_base_image(debug "--debug-build" "--install-debug-tools full")
+  add_base_image(debug_java11 "--debug-build" "--install-debug-tools full 
--java 11")
+  add_base_image(debug_java17 "--debug-build" "--install-debug-tools full 
--java 17")
 
   # Target to build all docker images. Dependencies are added for each docker 
image
   # instantiated below.
diff --git a/docker/impala_base/Dockerfile b/docker/impala_base/Dockerfile
index 7b1b5963c..2d84d2514 100644
--- a/docker/impala_base/Dockerfile
+++ b/docker/impala_base/Dockerfile
@@ -19,8 +19,8 @@
 ARG BASE_IMAGE=REPLACED_WITH_BASE_IMAGE
 FROM ${BASE_IMAGE}
 
-# If set to "--install-debug-tools", then extra utilities will be installed.
-ARG INSTALL_OS_PACKAGES_ARGS=""
+# The level of debugging tools to install is set by the argument to  
"--install-debug-tools".
+ARG INSTALL_OS_PACKAGES_ARGS="--install-debug-tools none"
 
 # Install minimal dependencies required for Impala services to run.
 ADD helper/install_os_packages.sh /root
diff --git a/docker/impala_profile_tool/Dockerfile 
b/docker/impala_profile_tool/Dockerfile
index d6f21c194..78fcae827 100644
--- a/docker/impala_profile_tool/Dockerfile
+++ b/docker/impala_profile_tool/Dockerfile
@@ -19,8 +19,8 @@
 ARG BASE_IMAGE=REPLACED_WITH_BASE_IMAGE
 FROM ${BASE_IMAGE}
 
-# If set to "--install-debug-tools", then extra utilities will be installed
-ARG INSTALL_OS_PACKAGES_ARGS="--install-debug-tools"
+# If set to "--install-debug-tools full", then extra utilities will be 
installed.
+ARG INSTALL_OS_PACKAGES_ARGS="--install-debug-tools full"
 
 # Install dependencies required for Impala utility binaries to run, plus
 # some useful utilities.
diff --git a/docker/install_os_packages.sh b/docker/install_os_packages.sh
index 8fbeef793..c8c419aba 100755
--- a/docker/install_os_packages.sh
+++ b/docker/install_os_packages.sh
@@ -23,7 +23,9 @@
 
 set -euo pipefail
 
-INSTALL_DEBUG_TOOLS=false
+# Default level of extra debugging tools, controlled by the 
--install-debug-tools flag.
+INSTALL_DEBUG_TOOLS=none
+
 JAVA_VERSION=8
 DRY_RUN=false
 PKG_LIST=""
@@ -31,7 +33,8 @@ NON_PKG_NAMES=(apt-get yum install update)
 
 function print_usage {
     echo "install_os_packages.sh - Helper script to install OS dependencies"
-    echo "[--install-debug-tools] : Also install debug tools like curl, 
iproute, etc"
+    echo "[--install-debug-tools <none|basic|full>] : set the level of debug 
tools"\
+         "to install"
     echo "[--java <version>] : Use specified Java version rather than the 
default Java 8."
     echo "[--dry-run] : Print the list of packages to install."
 }
@@ -61,7 +64,8 @@ while [ -n "$*" ]
 do
   case "$1" in
     --install-debug-tools)
-      INSTALL_DEBUG_TOOLS=true
+      INSTALL_DEBUG_TOOLS="${2-}"
+      shift;
       ;;
     --java)
       JAVA_VERSION="${2-}"
@@ -82,6 +86,18 @@ echo "INSTALL_DEBUG_TOOLS=${INSTALL_DEBUG_TOOLS}"
 echo "JAVA_VERSION=${JAVA_VERSION}"
 echo "DRY_RUN=${DRY_RUN}"
 
+case "$INSTALL_DEBUG_TOOLS" in
+  none | basic | full)
+    # These are valid.
+    ;;
+  "" | *)
+    # The argument to --install-debug-tools is either missing, or is not a 
recognized
+    # value.
+    print_usage
+    exit 1
+    ;;
+esac
+
 # This can get more detailed if there are specific steps
 # for specific versions, but at the moment the distribution
 # is all we need.
@@ -124,8 +140,11 @@ if [[ $DISTRIBUTION == Ubuntu ]]; then
       libsasl2-modules-gssapi-mit \
       openjdk-${JAVA_VERSION}-jre-headless \
       tzdata
-  if $INSTALL_DEBUG_TOOLS ; then
-    echo "Installing extra debug tools"
+
+  # On Ubuntu there are no extra tools installed for $INSTALL_DEBUG_TOOLS == 
basic
+
+  if [[ $INSTALL_DEBUG_TOOLS == full ]]; then
+    echo "Installing full debug tools"
     wrap apt-get install -y \
         curl \
         dnsutils \
@@ -159,8 +178,15 @@ elif [[ $DISTRIBUTION == Redhat ]]; then
           langpacks-en
   fi
 
-  if $INSTALL_DEBUG_TOOLS ; then
-    echo "Installing extra debug tools"
+  if [[ $INSTALL_DEBUG_TOOLS == basic || $INSTALL_DEBUG_TOOLS == full ]]; then
+    echo "Installing basic debug tools"
+    wrap yum install -y --disableplugin=subscription-manager \
+        java-${JAVA_VERSION}-openjdk-devel \
+        gdb
+  fi
+
+  if [[ $INSTALL_DEBUG_TOOLS == full ]]; then
+    echo "Installing full debug tools"
     wrap yum install -y --disableplugin=subscription-manager \
         bind-utils \
         curl \

Reply via email to