diff options
author | Arnstein Ressem <aressem@verizonmedia.com> | 2020-06-02 12:51:54 +0200 |
---|---|---|
committer | Arnstein Ressem <aressem@verizonmedia.com> | 2020-06-02 12:51:54 +0200 |
commit | 4c6e95dc1fd0eb658c297be5fb747ff3b476ef15 (patch) | |
tree | a2804eb5219e31eee421cab9dd0bbe18b957de50 /node-admin | |
parent | 8a3850679c830c2b56e1b0d6f8c387dfa9b2aa62 (diff) |
Allow gdb path based on image name.
Diffstat (limited to 'node-admin')
-rw-r--r-- | node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/coredump/CoreCollector.java | 24 |
1 files changed, 19 insertions, 5 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 cdf5687d61a..b2b36e609ca 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 @@ -1,10 +1,12 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.maintenance.coredump; +import com.yahoo.config.provision.DockerImage; import com.yahoo.vespa.hosted.dockerapi.ProcessResult; import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations; import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; @@ -29,15 +31,16 @@ public class CoreCollector { private static final Pattern FROM_PATH_PATTERN = Pattern.compile("^.* from '(?<path>.*?)'"); private final DockerOperations docker; - private final Path gdb; + private final Path vespaHomeInContainer; - public CoreCollector(DockerOperations docker, Path pathToGdbInContainer) { + public CoreCollector(DockerOperations docker, Path vespaHomeInContainer) { this.docker = docker; - this.gdb = pathToGdbInContainer; + this.vespaHomeInContainer = vespaHomeInContainer; } Path readBinPathFallback(NodeAgentContext context, Path coredumpPath) { - String command = gdb + " -n -batch -core " + coredumpPath + " | grep \'^Core was generated by\'"; + String command = GDBPath(context).toString() + + " -n -batch -core " + coredumpPath + " | grep \'^Core was generated by\'"; String[] wrappedCommand = {"/bin/sh", "-c", command}; ProcessResult result = docker.executeCommandInContainerAsRoot(context, wrappedCommand); @@ -49,6 +52,17 @@ public class CoreCollector { return Paths.get(matcher.group("path").split(" ")[0]); } + Path GDBPath(NodeAgentContext context) { + DockerImage image = context.node().currentDockerImage().get(); + + if (image.tag().get().startsWith("vespa/ci")) { + return vespaHomeInContainer.resolve("bin64/gdb"); + } + else { + return Paths.get("/opt/rh/devtoolset-9/root/bin/gdb"); + } + } + Path readBinPath(NodeAgentContext context, Path coredumpPath) { String[] command = {"file", coredumpPath.toString()}; try { @@ -76,7 +90,7 @@ public class CoreCollector { List<String> readBacktrace(NodeAgentContext context, Path coredumpPath, Path binPath, boolean allThreads) { String threads = allThreads ? "thread apply all bt" : "bt"; - String[] command = {gdb.toString(), "-n", "-ex", threads, "-batch", binPath.toString(), coredumpPath.toString()}; + String[] command = {GDBPath(context).toString(), "-n", "-ex", threads, "-batch", binPath.toString(), coredumpPath.toString()}; ProcessResult result = docker.executeCommandInContainerAsRoot(context, command); if (result.getExitStatus() != 0) |