You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by ch...@apache.org on 2018/05/17 06:08:32 UTC

[02/13] flink git commit: [FLINK-9357][tests][yarn] Add margins to exception excerpts

[FLINK-9357][tests][yarn] Add margins to exception excerpts

This closes #6009.


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/254724e7
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/254724e7
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/254724e7

Branch: refs/heads/master
Commit: 254724e7603df189fea07b20eeff5a3620b5d841
Parents: cddb65a
Author: zentol <ch...@apache.org>
Authored: Fri May 11 22:09:21 2018 +0200
Committer: zentol <ch...@apache.org>
Committed: Wed May 16 20:21:58 2018 +0200

----------------------------------------------------------------------
 .../org/apache/flink/yarn/YarnTestBase.java     | 54 ++++++++++++++++++--
 1 file changed, 49 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/254724e7/flink-yarn-tests/src/test/java/org/apache/flink/yarn/YarnTestBase.java
----------------------------------------------------------------------
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 c4e498e..bfb8c3d 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 abstract class YarnTestBase extends TestLogger {
 			// 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 abstract class YarnTestBase extends TestLogger {
 								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 abstract class YarnTestBase extends TestLogger {
 	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<String> 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<String> getPreviousLines() {
+			return new ArrayList<>(bufferedLines);
+		}
+	}
 }