From be31c2873a687e73ed769d696f179d7354568b6c Mon Sep 17 00:00:00 2001 From: Martin Furmanski Date: Thu, 10 Mar 2016 17:22:32 +0100 Subject: [PATCH] Allow specifying a polling interval for the predicate await. --- .../java/org/neo4j/function/Predicates.java | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/community/common/src/main/java/org/neo4j/function/Predicates.java b/community/common/src/main/java/org/neo4j/function/Predicates.java index 4c3d30dda67fa..207654fe21cfa 100644 --- a/community/common/src/main/java/org/neo4j/function/Predicates.java +++ b/community/common/src/main/java/org/neo4j/function/Predicates.java @@ -135,26 +135,42 @@ public boolean test( T item ) }; } - public static void await( Supplier supplier, Predicate predicate, long timeout, TimeUnit unit ) + public static void await( Supplier supplier, Predicate predicate, long timeout, TimeUnit timeoutUnit, + long pollInterval, TimeUnit pollUnit ) throws TimeoutException, InterruptedException { - await( Suppliers.compose( supplier, predicate ), timeout, unit ); + await( Suppliers.compose( supplier, predicate ), timeout, timeoutUnit, pollInterval, pollUnit ); + } + + public static void await( Supplier supplier, Predicate predicate, long timeout, TimeUnit timeoutUnit ) + throws TimeoutException, InterruptedException + { + await( Suppliers.compose( supplier, predicate ), timeout, timeoutUnit ); } public static void await( Supplier condition, long timeout, TimeUnit unit ) throws TimeoutException, InterruptedException { - long deadline = System.currentTimeMillis() + unit.toMillis( timeout ); + int defaultPollInterval = 20; + await( condition, timeout, unit, defaultPollInterval, TimeUnit.MILLISECONDS ); + } + + public static void await( Supplier condition, long timeout, TimeUnit timeoutUnit, long pollInterval, TimeUnit pollUnit ) + throws TimeoutException, InterruptedException + { + long deadlineMillis = System.currentTimeMillis() + timeoutUnit.toMillis( timeout ); + long pollIntervalMillis = pollUnit.toMillis( pollInterval ); + do { if ( condition.get() ) { return; } - Thread.sleep( 20 ); + Thread.sleep( pollIntervalMillis ); } - while ( System.currentTimeMillis() < deadline ); - throw new TimeoutException( "Waited for " + timeout + " " + unit + ", but " + condition + " was not accepted." ); + while ( System.currentTimeMillis() < deadlineMillis ); + throw new TimeoutException( "Waited for " + timeout + " " + timeoutUnit + ", but " + condition + " was not accepted." ); } public static void awaitForever( BooleanSupplier condition, long checkInterval, TimeUnit unit ) throws InterruptedException