Skip to content

Commit 8cfcff6

Browse files
authored
Omit portions of stack trace that are just junit in test summary (#3499)
I ran two tests that had exceptions deep in lucene code, with suppressions and causes, and this omission reduced the 768 lines / 76,114 bytes to 183 lines / 16,946 bytes. GitHub has a limit of 1024k for the summary, so this should help keep us below the limit, and make it easier for developers to diagnose why a test failed. There are probably some other situations that it won't catch, and maybe the formatting could be a little cleaner, but I think this gets the job done, and don't feel like it's worth spending a bunch of dedicated time on it right now. Here is a sample after it is cleaned up: <details> <summary> ❌ FDBLuceneIndexFailureTest > basicGroupedPartitionedTest(boolean) > [2] true</summary> (23ms) ``` java.lang.RuntimeException at com.apple.foundationdb.record.lucene.directory.FDBDirectoryWrapper.<init>(FDBDirectoryWrapper.java:93) at com.apple.foundationdb.record.lucene.directory.MockedFDBDirectoryWrapper.<init>(MockedFDBDirectoryWrapper.java:38) at com.apple.foundationdb.record.lucene.directory.MockedFDBDirectoryManager.createNewDirectoryWrapper(MockedFDBDirectoryManager.java:41) at com.apple.foundationdb.record.lucene.directory.FDBDirectoryManager.lambda$getDirectoryWrapper$12(FDBDirectoryManager.java:306) at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) at com.apple.foundationdb.record.lucene.directory.FDBDirectoryManager.getDirectoryWrapper(FDBDirectoryManager.java:306) at com.apple.foundationdb.record.lucene.directory.FDBDirectoryManager.getDirectoryWrapper(FDBDirectoryManager.java:301) at com.apple.foundationdb.record.lucene.directory.FDBDirectoryManager.getIndexWriter(FDBDirectoryManager.java:370) at com.apple.foundationdb.record.lucene.LuceneIndexMaintainer.writeDocument(LuceneIndexMaintainer.java:256) at com.apple.foundationdb.record.lucene.LuceneIndexMaintainer.lambda$update$8(LuceneIndexMaintainer.java:489) at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:642) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) at java.base/java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:610) at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1085) at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478) at com.apple.foundationdb.async.TaskNotifyingExecutor$Notifier.run(TaskNotifyingExecutor.java:77) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) Suppressed: java.util.concurrent.ExecutionException: java.lang.RuntimeException at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395) at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2005) at com.apple.foundationdb.record.provider.foundationdb.FDBDatabase.asyncToSync(FDBDatabase.java:1121) at com.apple.foundationdb.record.provider.foundationdb.FDBRecordContext.asyncToSync(FDBRecordContext.java:1182) at com.apple.foundationdb.record.provider.foundationdb.FDBRecordStoreBase.saveRecord(FDBRecordStoreBase.java:617) at com.apple.foundationdb.record.provider.foundationdb.FDBRecordStoreBase.saveRecord(FDBRecordStoreBase.java:599) at com.apple.foundationdb.record.provider.foundationdb.FDBRecordStoreBase.saveRecord(FDBRecordStoreBase.java:583) at com.apple.foundationdb.record.provider.foundationdb.FDBRecordStoreBase.saveRecord(FDBRecordStoreBase.java:559) at com.apple.foundationdb.record.lucene.FDBLuceneIndexFailureTest.basicGroupedPartitionedTest(FDBLuceneIndexFailureTest.java:107) ... junit stack ... Caused by: java.lang.RuntimeException at com.apple.foundationdb.record.lucene.directory.FDBDirectoryWrapper.<init>(FDBDirectoryWrapper.java:93) at com.apple.foundationdb.record.lucene.directory.MockedFDBDirectoryWrapper.<init>(MockedFDBDirectoryWrapper.java:38) at com.apple.foundationdb.record.lucene.directory.MockedFDBDirectoryManager.createNewDirectoryWrapper(MockedFDBDirectoryManager.java:41) at com.apple.foundationdb.record.lucene.directory.FDBDirectoryManager.lambda$getDirectoryWrapper$12(FDBDirectoryManager.java:306) at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) at com.apple.foundationdb.record.lucene.directory.FDBDirectoryManager.getDirectoryWrapper(FDBDirectoryManager.java:306) at com.apple.foundationdb.record.lucene.directory.FDBDirectoryManager.getDirectoryWrapper(FDBDirectoryManager.java:301) at com.apple.foundationdb.record.lucene.directory.FDBDirectoryManager.getIndexWriter(FDBDirectoryManager.java:370) at com.apple.foundationdb.record.lucene.LuceneIndexMaintainer.writeDocument(LuceneIndexMaintainer.java:256) at com.apple.foundationdb.record.lucene.LuceneIndexMaintainer.lambda$update$8(LuceneIndexMaintainer.java:489) at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:642) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) at java.base/java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:610) at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1085) at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478) at com.apple.foundationdb.async.TaskNotifyingExecutor$Notifier.run(TaskNotifyingExecutor.java:77) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) Suppressed: java.util.concurrent.ExecutionException: java.lang.RuntimeException at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395) at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2005) at com.apple.foundationdb.record.provider.foundationdb.FDBDatabase.asyncToSync(FDBDatabase.java:1121) at com.apple.foundationdb.record.provider.foundationdb.FDBRecordContext.asyncToSync(FDBRecordContext.java:1182) at com.apple.foundationdb.record.provider.foundationdb.FDBRecordStoreBase.saveRecord(FDBRecordStoreBase.java:617) at com.apple.foundationdb.record.provider.foundationdb.FDBRecordStoreBase.saveRecord(FDBRecordStoreBase.java:599) at com.apple.foundationdb.record.provider.foundationdb.FDBRecordStoreBase.saveRecord(FDBRecordStoreBase.java:583) at com.apple.foundationdb.record.provider.foundationdb.FDBRecordStoreBase.saveRecord(FDBRecordStoreBase.java:559) at com.apple.foundationdb.record.lucene.FDBLuceneIndexFailureTest.basicGroupedPartitionedTest(FDBLuceneIndexFailureTest.java:107) ... junit stack ... Caused by: [CIRCULAR REFERENCE: java.lang.RuntimeException] ``` </details>
1 parent dd51ee2 commit 8cfcff6

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

gradle/testing.gradle

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import java.util.regex.Matcher
2+
import java.util.regex.Pattern
23

34
/*
45
* testing.gradle
@@ -210,6 +211,19 @@ def configureTestTask = { propertyPrefix, task ->
210211
}
211212
}
212213

214+
ext.skippedStackTraceEntries = Pattern.compile(/(?s)/ +
215+
/(?<indent>\s+)at java\.base\/jdk\.internal\.reflect\.NativeMethodAccessorImpl\.invoke0\(Native Method\)/ +
216+
/\s+at java\.base\/jdk\.internal\.reflect\.NativeMethodAccessorImpl\.invoke\(NativeMethodAccessorImpl\.java:\d+\)/ +
217+
/\s+at java\.base\/jdk\.internal\.reflect\.DelegatingMethodAccessorImpl\.invoke\(DelegatingMethodAccessorImpl\.java:\d+\)/ +
218+
/\s+at java\.base\/java\.lang\.reflect\.Method\.invoke\(Method\.java:\d+\)/ +
219+
/\s+at org\.junit\.platform\.commons\.util\.ReflectionUtils\.invokeMethod\(ReflectionUtils\.java:\d+\).*?/ +
220+
/(?=\s+Suppressed:|\s+Caused by:|$)/)
221+
222+
223+
def betterException(String exception) {
224+
return skippedStackTraceEntries.matcher(exception).replaceAll("\n\${indent}... junit stack ...")
225+
}
226+
213227
tasks.withType(Test) { theTask ->
214228
configureTestTask('allTest', theTask)
215229
configureTestTask(theTask.name, theTask)
@@ -247,7 +261,7 @@ tasks.withType(Test) { theTask ->
247261
"<details>\n" +
248262
"<summary> ❌ ${getFullDisplayName(descriptor)}</summary>\n" +
249263
"(${duration}ms)\n\n" + // blank line is required for ``` to work
250-
"```\n${result.getException().asString()}\n```\n" +
264+
"```\n${betterException(result.getException().asString())}\n```\n" +
251265
"</details>\n")
252266
}
253267
}

0 commit comments

Comments
 (0)