summaryrefslogtreecommitdiffstats
path: root/node-maintainer/src/main/java/com
diff options
context:
space:
mode:
authorHarald Musum <musum@yahoo-inc.com>2017-04-26 16:42:52 +0200
committerGitHub <noreply@github.com>2017-04-26 16:42:52 +0200
commit20f7237fe3eb3aa98e4b051184ba964ff35c97fc (patch)
treebc14ff5bc2b4cbc80908977d12df1efe99970d54 /node-maintainer/src/main/java/com
parente645c567e32a94abde0c7493172ff1c274d1bbc2 (diff)
parent1738bf330cc0ebbd789cf39a38d5dce45734f271 (diff)
Merge pull request #2297 from yahoo/freva/fix-coredump-reporting
Always check if metadata.json exists, if not - create it.
Diffstat (limited to 'node-maintainer/src/main/java/com')
-rw-r--r--node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandler.java39
1 files changed, 21 insertions, 18 deletions
diff --git a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandler.java b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandler.java
index cfef8da6732..c14667fb89c 100644
--- a/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandler.java
+++ b/node-maintainer/src/main/java/com/yahoo/vespa/hosted/node/maintainer/CoredumpHandler.java
@@ -82,12 +82,7 @@ public class CoredumpHandler {
.filter(path -> path.toFile().isFile() && ! path.getFileName().toString().startsWith("."))
.forEach(coredumpPath -> {
try {
- coredumpPath.toFile().setReadable(true, false);
- coredumpPath = startProcessing(coredumpPath, processingCoredumpsPath);
-
- Path metadataPath = coredumpPath.getParent().resolve(METADATA_FILE_NAME);
- Map<String, Object> metadata = collectMetadata(coredumpPath, nodeAttributes);
- writeMetadata(metadataPath, metadata);
+ startProcessing(coredumpPath, processingCoredumpsPath);
} catch (Throwable e) {
logger.log(Level.WARNING, "Failed to process coredump " + coredumpPath, e);
}
@@ -103,7 +98,8 @@ public class CoredumpHandler {
.filter(path -> path.toFile().isDirectory())
.forEach(coredumpDirectory -> {
try {
- report(coredumpDirectory);
+ String metadata = collectMetadata(coredumpDirectory, nodeAttributes);
+ report(coredumpDirectory, metadata);
finishProcessing(coredumpDirectory);
} catch (Throwable e) {
logger.log(Level.WARNING, "Failed to report coredump " + coredumpDirectory, e);
@@ -112,28 +108,35 @@ public class CoredumpHandler {
}
Path startProcessing(Path coredumpPath, Path processingCoredumpsPath) throws IOException {
+ // Make coredump readable
+ coredumpPath.toFile().setReadable(true, false);
+
+ // Create new directory for this coredump and move it into it
Path folder = processingCoredumpsPath.resolve(UUID.randomUUID().toString());
folder.toFile().mkdirs();
return Files.move(coredumpPath, folder.resolve(coredumpPath.getFileName()));
}
- private Map<String, Object> collectMetadata(Path coredumpPath, Map<String, Object> nodeAttributes) {
- Map<String, Object> metadata = coreCollector.collect(coredumpPath, yinstStatePath);
- metadata.putAll(nodeAttributes);
+ String collectMetadata(Path coredumpPath, Map<String, Object> nodeAttributes) throws IOException {
+ Path metadataPath = coredumpPath.resolve(METADATA_FILE_NAME);
+ if (!Files.exists(metadataPath)) {
+ Map<String, Object> metadata = coreCollector.collect(coredumpPath, yinstStatePath);
+ metadata.putAll(nodeAttributes);
- Map<String, Object> fields = new HashMap<>();
- fields.put("fields", metadata);
- return fields;
- }
+ Map<String, Object> fields = new HashMap<>();
+ fields.put("fields", metadata);
- private void writeMetadata(Path metadataPath, Map<String, Object> metadata) throws IOException {
- Files.write(metadataPath, objectMapper.writeValueAsString(metadata).getBytes());
+ String metadataFields = objectMapper.writeValueAsString(fields);
+ Files.write(metadataPath, metadataFields.getBytes());
+ return metadataFields;
+ } else {
+ return new String(Files.readAllBytes(metadataPath));
+ }
}
- void report(Path coredumpDirectory) throws IOException {
+ void report(Path coredumpDirectory, String metadata) throws IOException {
// Use core dump UUID as document ID
String documentId = coredumpDirectory.getFileName().toString();
- String metadata = new String(Files.readAllBytes(coredumpDirectory.resolve(METADATA_FILE_NAME)));
HttpPost post = new HttpPost(FEED_ENDPOINT + "/" + documentId);
post.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");