From 254724e7603df189fea07b20eeff5a3620b5d841 Mon Sep 17 00:00:00 2001 From: zentol Date: Fri, 11 May 2018 22:09:21 +0200 Subject: [PATCH] [FLINK-9357][tests][yarn] Add margins to exception excerpts This closes #6009. --- .../org/apache/flink/yarn/YarnTestBase.java | 54 +++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YarnTestBase.java b/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YarnTestBase.java index c4e498e07172b..bfb8c3de6f794 100644 --- a/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YarnTestBase.java +++ b/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YarnTestBase.java @@ -336,7 +336,7 @@ public boolean accept(File dir, String name) { // scan each file for prohibited strings. File f = new File(dir.getAbsolutePath() + "/" + name); try { - Scanner scanner = new Scanner(f); + BufferingScanner scanner = new BufferingScanner(new Scanner(f), 10); while (scanner.hasNextLine()) { final String lineFromFile = scanner.nextLine(); for (String aProhibited : prohibited) { @@ -358,15 +358,26 @@ public boolean accept(File dir, String name) { StringBuilder logExcerpt = new StringBuilder(); logExcerpt.append(System.lineSeparator()); + + // include some previous lines in case of irregular formatting + for (String previousLine : scanner.getPreviousLines()) { + logExcerpt.append(previousLine); + logExcerpt.append(System.lineSeparator()); + } + logExcerpt.append(lineFromFile); logExcerpt.append(System.lineSeparator()); // extract potential stack trace from log while (scanner.hasNextLine()) { String line = scanner.nextLine(); - if (!line.isEmpty() && (Character.isWhitespace(line.charAt(0)) || line.startsWith("Caused by"))) { - logExcerpt.append(line); - logExcerpt.append(System.lineSeparator()); - } else { + logExcerpt.append(line); + logExcerpt.append(System.lineSeparator()); + if (line.isEmpty() || (!Character.isWhitespace(line.charAt(0)) && !line.startsWith("Caused by"))) { + // the cause has been printed, now add a few more lines in case of irregular formatting + for (int x = 0; x < 10 && scanner.hasNextLine(); x++) { + logExcerpt.append(scanner.nextLine()); + logExcerpt.append(System.lineSeparator()); + } break; } } @@ -868,4 +879,37 @@ public static void teardown() throws Exception { public static boolean isOnTravis() { return System.getenv("TRAVIS") != null && System.getenv("TRAVIS").equals("true"); } + + /** + * Wrapper around a {@link Scanner} that buffers the last N lines read. + */ + private static class BufferingScanner { + + private final Scanner scanner; + private final int numLinesBuffered; + private final List bufferedLines; + + BufferingScanner(Scanner scanner, int numLinesBuffered) { + this.scanner = scanner; + this.numLinesBuffered = numLinesBuffered; + this.bufferedLines = new ArrayList<>(numLinesBuffered); + } + + public boolean hasNextLine() { + return scanner.hasNextLine(); + } + + public String nextLine() { + if (bufferedLines.size() == numLinesBuffered) { + bufferedLines.remove(0); + } + String line = scanner.nextLine(); + bufferedLines.add(line); + return line; + } + + public List getPreviousLines() { + return new ArrayList<>(bufferedLines); + } + } }