Hello Mike Percy, Adar Dembo, Kudu Jenkins, I'd like you to reexamine a change. Please visit
http://gerrit.cloudera.org:8080/5620 to look at the new patch set (#34). Change subject: Add Google Breakpad support to Kudu ...................................................................... Add Google Breakpad support to Kudu Breakpad creates minidumps upon crash, which are small files that include stack-based information for each thread. These do not include heap information, so they complement, not replace, core files for debugging purposes. This patch enables Google Breakpad for the kudu-tserver and kudu-master processes. Breakpad is part of the crash-reporting infrastructure open-sourced by Google. It is also used by Mozilla Firefox and Google Chrome. When a process crashes, Breakpad writes a small dump file called a minidump to disk. Since these files are typically only a few MB in size, this allows users to share critical crash information with developers for offline analysis. For more information, see the breakpad getting started docs at http://chromium.googlesource.com/breakpad/breakpad/+/master/docs/getting_started_with_breakpad.md By default, on crash, minidump files are written to a subdirectory of the log directory for a given Kudu daemon process. This was chosen for the following reasons: 1. The minidump files are relatively small, potentially comparable in size to log files, and the log directory is a place an administrator would look in when debugging. 2. This convention is consistent with what Apache Impala (incubating) does for its minidump files. Changes in this patch: * Add breakpad to thirdparty. * Add breakpad source archive creation script (Breakpad does not do releases). * Add a "hack" to the breakpad thirdparty installation routine to forcibly add a breakpad/ prefix to the breakpad header files. This frees us from having to modify our include path when building. * Pull in (heavily modified) util/minidump.{cc,h} from Apache Impala (incubating). The modifications consist of removing use of boost::filesystem, conformance to the Kudu code style guidelines, and some significant refactoring. * Enable breakpad support for the kudu-tserver and kudu-master processes. * By default, invoke previously-installed signal handler if installed. * Handle SIGUSR1 by safely using sigwait() to create minidumps on demand. * Add #ifdefs and CMake logic for Linux. * Add test for all the deadly signals to ensure we get both a stack trace and a minidump, except for the case of SIGTERM, where we should not get a minidump (by design). * Change a few library unit tests that relied on SIGUSR1 to use another signal for their testing, such as SIGHUP or SIGUSR2. * Remove unused includes from mini_tablet_server.cc * Clean up signal handling logic when forking a subprocess. * Hide breakpad symbols from libkuduclient.so * Install failure function that simply calls abort() instead of first printing a stacktrace. Change-Id: I495695cc38b75377f20b0497093a81ed5baa887f --- M CMakeLists.txt M build-support/jenkins/build-and-test.sh A cmake_modules/FindBreakpadClient.cmake M java/kudu-client/src/test/java/org/apache/kudu/client/MiniKuduCluster.java M src/kudu/client/client_samples-test.sh M src/kudu/client/symbols.map M src/kudu/integration-tests/CMakeLists.txt M src/kudu/integration-tests/external_mini_cluster.cc M src/kudu/integration-tests/external_mini_cluster.h A src/kudu/integration-tests/minidump_generation-itest.cc M src/kudu/master/mini_master.cc M src/kudu/server/server_base.cc M src/kudu/server/server_base.h M src/kudu/tserver/mini_tablet_server.cc M src/kudu/util/CMakeLists.txt M src/kudu/util/debug-util-test.cc M src/kudu/util/env_posix.cc M src/kudu/util/logging.cc A src/kudu/util/minidump-test.cc A src/kudu/util/minidump.cc A src/kudu/util/minidump.h M src/kudu/util/subprocess-test.cc M src/kudu/util/subprocess.cc M src/kudu/util/test_main.cc M thirdparty/build-definitions.sh M thirdparty/build-thirdparty.sh M thirdparty/download-thirdparty.sh M thirdparty/preflight.py A thirdparty/scripts/make-breakpad-src-archive.sh M thirdparty/vars.sh 30 files changed, 1,034 insertions(+), 85 deletions(-) git pull ssh://gerrit.cloudera.org:29418/kudu refs/changes/20/5620/34 -- To view, visit http://gerrit.cloudera.org:8080/5620 To unsubscribe, visit http://gerrit.cloudera.org:8080/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I495695cc38b75377f20b0497093a81ed5baa887f Gerrit-PatchSet: 34 Gerrit-Project: kudu Gerrit-Branch: master Gerrit-Owner: Mike Percy <mpe...@apache.org> Gerrit-Reviewer: Adar Dembo <a...@cloudera.com> Gerrit-Reviewer: Alexey Serbin <aser...@cloudera.com> Gerrit-Reviewer: David Ribeiro Alves <dral...@apache.org> Gerrit-Reviewer: Dinesh Bhat <din...@cloudera.com> Gerrit-Reviewer: Kudu Jenkins Gerrit-Reviewer: Lars Volker <l...@cloudera.com> Gerrit-Reviewer: Mike Percy <mpe...@apache.org> Gerrit-Reviewer: Tidy Bot Gerrit-Reviewer: Todd Lipcon <t...@apache.org>