diff options
author | Valerij Fredriksen <valerijf@yahooinc.com> | 2022-09-01 20:58:32 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@yahooinc.com> | 2022-09-01 20:58:32 +0200 |
commit | 34f234d09fb8d3575e53dc8442f29a73c48aea56 (patch) | |
tree | 178031d1133079934113df72815e543c06fae136 /node-admin/src | |
parent | b716755b5b274f0f3454a9f5c0f6e33986ff6564 (diff) |
Remove unnecessary indirection
Diffstat (limited to 'node-admin/src')
2 files changed, 22 insertions, 16 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java index 0933f22dee3..b5a47e0b3be 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java @@ -26,7 +26,7 @@ public class CoreCollector { private static final Logger logger = Logger.getLogger(CoreCollector.class.getName()); private static final Pattern JAVA_HEAP_DUMP_PATTERN = Pattern.compile("java_pid.*\\.hprof$"); - private static final Pattern CORE_GENERATOR_PATH_PATTERN = Pattern.compile("^Core was generated by `(?<path>.*?)'.$"); + private static final Pattern CORE_GENERATOR_PATH_PATTERN = Pattern.compile("(?m)^Core was generated by `(?<path>.*?)'\\."); private static final Pattern EXECFN_PATH_PATTERN = Pattern.compile("^.* execfn: '(?<path>.*?)'"); private static final Pattern FROM_PATH_PATTERN = Pattern.compile("^.* from '(?<path>.*?)'"); static final String GDB_PATH_RHEL8 = "/opt/rh/gcc-toolset-11/root/bin/gdb"; @@ -40,19 +40,14 @@ public class CoreCollector { this.container = container; } - String getGdbPath(NodeAgentContext context) { - return GDB_PATH_RHEL8; - } - String readBinPathFallback(NodeAgentContext context, ContainerPath coredumpPath) { - String command = getGdbPath(context) + " -n -batch -core " + coredumpPath.pathInContainer() + " | grep \'^Core was generated by\'"; - String[] wrappedCommand = {"/bin/sh", "-c", command}; - CommandResult result = container.executeCommandInContainer(context, context.users().root(), wrappedCommand); + String[] command = {GDB_PATH_RHEL8, "-n", "-batch", "-core", coredumpPath.pathInContainer()}; + CommandResult result = container.executeCommandInContainer(context, context.users().root(), command); Matcher matcher = CORE_GENERATOR_PATH_PATTERN.matcher(result.getOutput()); if (! matcher.find()) { throw ConvergenceException.ofError(String.format("Failed to extract binary path from GDB, result: %s, command: %s", - asString(result), Arrays.toString(wrappedCommand))); + asString(result), Arrays.toString(command))); } return matcher.group("path").split(" ")[0]; } @@ -84,7 +79,7 @@ public class CoreCollector { List<String> readBacktrace(NodeAgentContext context, ContainerPath coredumpPath, String binPath, boolean allThreads) { String threads = allThreads ? "thread apply all bt" : "bt"; - String[] command = {getGdbPath(context), "-n", "-ex", "set print frame-arguments none", + String[] command = {GDB_PATH_RHEL8, "-n", "-ex", "set print frame-arguments none", "-ex", threads, "-batch", binPath, coredumpPath.pathInContainer()}; CommandResult result = container.executeCommandInContainer(context, context.users().root(), command); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java index c0bf6ebbeb3..ea73fd4af6f 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollectorTest.java @@ -62,8 +62,20 @@ public class CoreCollectorTest { assertEquals(TEST_BIN_PATH, coreCollector.readBinPath(context, TEST_CORE_PATH)); String fallbackResponse = "/response/from/fallback"; - mockExec(new String[]{"/bin/sh", "-c", GDB_PATH_RHEL8 + " -n -batch -core /tmp/core.1234 | grep '^Core was generated by'"}, - "Core was generated by `/response/from/fallback'."); + mockExec(new String[]{GDB_PATH_RHEL8, "-n", "-batch", "-core", "/tmp/core.1234"}, + """ + GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1 + Type “apropos word” to search for commands related to “word”… + Reading symbols from abc…(no debugging symbols found)…done. + [New LWP 23678] + Core was generated by `/response/from/fallback'. \s + Program terminated with signal SIGSEGV, Segmentation fault. \s + #0 0x0000000000400541 in main () + #0 0x0000000000400541 in main () + (gdb) bt + #0 0x0000000000400541 in main () + (gdb) + """); mockExec(cmd, "/tmp/core.1234: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style"); assertEquals(fallbackResponse, coreCollector.readBinPath(context, TEST_CORE_PATH)); @@ -74,8 +86,7 @@ public class CoreCollectorTest { @Test void extractsBinaryPathUsingGdbTest() { - final String[] cmd = new String[]{"/bin/sh", "-c", - GDB_PATH_RHEL8 + " -n -batch -core /tmp/core.1234 | grep '^Core was generated by'"}; + String[] cmd = new String[]{GDB_PATH_RHEL8, "-n", "-batch", "-core", "/tmp/core.1234"}; mockExec(cmd, "Core was generated by `/usr/bin/program-from-gdb --identity foo/search/cluster.content_'."); assertEquals("/usr/bin/program-from-gdb", coreCollector.readBinPathFallback(context, TEST_CORE_PATH)); @@ -86,7 +97,7 @@ public class CoreCollectorTest { fail("Expected not to be able to get bin path"); } catch (RuntimeException e) { assertEquals("Failed to extract binary path from GDB, result: exit status 1, output 'Error 123', command: " + - "[/bin/sh, -c, /opt/rh/gcc-toolset-11/root/bin/gdb -n -batch -core /tmp/core.1234 | grep '^Core was generated by']", e.getMessage()); + "[/opt/rh/gcc-toolset-11/root/bin/gdb, -n, -batch, -core, /tmp/core.1234]", e.getMessage()); } } @@ -157,7 +168,7 @@ public class CoreCollectorTest { mockExec(new String[]{"file", TEST_CORE_PATH.pathInContainer()}, "dump.core.5954: ELF 64-bit LSB core file x86-64, version 1 (SYSV), too many program header sections (33172)"); - mockExec(new String[]{"/bin/sh", "-c", GDB_PATH_RHEL8 + " -n -batch -core /tmp/core.1234 | grep '^Core was generated by'"}, + mockExec(new String[]{GDB_PATH_RHEL8, "-n", "-batch", "-core", "/tmp/core.1234"}, "Core was generated by `" + JDK_PATH + " -Dconfig.id=default/container.11 -XX:+Pre'."); String jstack = "jstack11"; |