From b748e78c33cf564cb4aecc6e36ede81f2f6c4ca1 Mon Sep 17 00:00:00 2001 From: Davide Grohmann Date: Fri, 30 Sep 2016 11:57:18 +0200 Subject: [PATCH] Add suppressed exceptions for debugging --- .../coreedge/stresstests/CatchUpLoad.java | 43 ++++++++++++++++--- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/stresstests/src/test/java/org/neo4j/coreedge/stresstests/CatchUpLoad.java b/stresstests/src/test/java/org/neo4j/coreedge/stresstests/CatchUpLoad.java index 206e503f62964..d709dc931d54e 100644 --- a/stresstests/src/test/java/org/neo4j/coreedge/stresstests/CatchUpLoad.java +++ b/stresstests/src/test/java/org/neo4j/coreedge/stresstests/CatchUpLoad.java @@ -75,25 +75,54 @@ protected void doWork() int newMemberId = cluster.edgeMembers().size(); final EdgeClusterMember edgeClusterMember = cluster.addEdgeMemberWithId( newMemberId ); - Supplier exception; + Throwable ex = null; + Supplier monitoredException = null; try { - exception = startAndRegisterExceptionMonitor( edgeClusterMember ); + monitoredException = startAndRegisterExceptionMonitor( edgeClusterMember ); await( () -> txIdBeforeStartingNewEdge <= txId( edgeClusterMember, true ), 3, TimeUnit.MINUTES ); } - catch ( Exception e ) + catch ( Throwable e ) { - throw new RuntimeException( e ); + ex = e; } finally { - cluster.removeEdgeMemberWithMemberId( newMemberId ); + try + { + cluster.removeEdgeMemberWithMemberId( newMemberId ); + } + catch ( Throwable e ) + { + ex = exception( ex, e ); + } + } + + if ( monitoredException != null && monitoredException.get() != null ) + { + throw new RuntimeException( exception( monitoredException.get(), ex ) ); + } + + if ( ex != null ) + { + throw new RuntimeException( ex ); + } + } + + private Throwable exception( Throwable outer, Throwable inner ) + { + if ( outer == null ) + { + assert inner != null; + return inner; } - if ( exception.get() != null ) + if ( inner != null ) { - throw new RuntimeException( exception.get() ); + outer.addSuppressed( inner ); } + + return outer; } private Supplier startAndRegisterExceptionMonitor( EdgeClusterMember edgeClusterMember )