Repository: asterixdb
Updated Branches:
  refs/heads/master 34f42f746 -> 9410ddd1b


[NO ISSUE][OTH] Fix Timeout Calculation

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- Fix elapsed time calculation in InvokeUtil.
- Fix elapsed time in replication timeout.
.
Change-Id: If080d3b3fcdcdc9f7d820698a80211e946d3c4d5
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2615
Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Reviewed-by: Michael Blow <mb...@apache.org>
Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu>


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

Branch: refs/heads/master
Commit: d1c696bb688b6b88379b4b247e721b9db9c1bb0b
Parents: ba53220
Author: Murtadha Hubail <mhub...@apache.org>
Authored: Wed Apr 25 17:37:39 2018 +0300
Committer: Murtadha Hubail <mhub...@apache.org>
Committed: Wed Apr 25 10:59:42 2018 -0700

----------------------------------------------------------------------
 .../asterix/replication/messaging/MarkComponentValidTask.java | 4 ++--
 .../src/main/java/org/apache/hyracks/api/util/InvokeUtil.java | 7 +++----
 2 files changed, 5 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d1c696bb/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/MarkComponentValidTask.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/MarkComponentValidTask.java
 
b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/MarkComponentValidTask.java
index b581321..57474ef 100644
--- 
a/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/MarkComponentValidTask.java
+++ 
b/asterixdb/asterix-replication/src/main/java/org/apache/asterix/replication/messaging/MarkComponentValidTask.java
@@ -29,11 +29,11 @@ import java.util.concurrent.TimeoutException;
 
 import org.apache.asterix.common.api.INcApplicationContext;
 import org.apache.asterix.common.exceptions.ReplicationException;
-import org.apache.asterix.replication.api.IReplicationWorker;
 import org.apache.asterix.common.storage.IIndexCheckpointManager;
 import org.apache.asterix.common.storage.IIndexCheckpointManagerProvider;
 import org.apache.asterix.common.storage.ResourceReference;
 import org.apache.asterix.replication.api.IReplicaTask;
+import org.apache.asterix.replication.api.IReplicationWorker;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import 
org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMIndexFileManager;
 
@@ -71,13 +71,13 @@ public class MarkComponentValidTask implements IReplicaTask 
{
         final IIndexCheckpointManagerProvider checkpointManagerProvider = 
appCtx.getIndexCheckpointManagerProvider();
         final IIndexCheckpointManager indexCheckpointManager = 
checkpointManagerProvider.get(indexRef);
         long replicationTimeOut = 
TimeUnit.SECONDS.toMillis(appCtx.getReplicationProperties().getReplicationTimeOut());
-        final long startTime = System.nanoTime();
         synchronized (indexCheckpointManager) {
             // wait until the lsn mapping is flushed to disk
             while (!indexCheckpointManager.isFlushed(masterLsn)) {
                 if (replicationTimeOut <= 0) {
                     throw new ReplicationException(new 
TimeoutException("Couldn't receive flush lsn from master"));
                 }
+                final long startTime = System.nanoTime();
                 indexCheckpointManager.wait(replicationTimeOut);
                 replicationTimeOut -= 
TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime);
             }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/d1c696bb/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
----------------------------------------------------------------------
diff --git 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
index fb2bdeb..b2dd680 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/InvokeUtil.java
@@ -242,14 +242,13 @@ public class InvokeUtil {
      */
     public static void runWithTimeout(ThrowingAction action, BooleanSupplier 
stopCondition, long timeout, TimeUnit unit)
             throws Exception {
-        long remainingTime = unit.toNanos(timeout);
+        final long waitTime = unit.toNanos(timeout);
         final long startTime = System.nanoTime();
         while (!stopCondition.getAsBoolean()) {
-            if (remainingTime <= 0) {
+            action.run();
+            if (System.nanoTime() - startTime >= waitTime) {
                 throw new TimeoutException("Stop condition was not met after " 
+ unit.toSeconds(timeout) + " seconds.");
             }
-            action.run();
-            remainingTime -= System.nanoTime() - startTime;
         }
     }
 }

Reply via email to