diff options
author | Harald Musum <musum@yahoo-inc.com> | 2017-04-26 16:42:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-26 16:42:52 +0200 |
commit | 20f7237fe3eb3aa98e4b051184ba964ff35c97fc (patch) | |
tree | bc14ff5bc2b4cbc80908977d12df1efe99970d54 /node-maintainer/src/main/java/com | |
parent | e645c567e32a94abde0c7493172ff1c274d1bbc2 (diff) | |
parent | 1738bf330cc0ebbd789cf39a38d5dce45734f271 (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.java | 39 |
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"); |