This is an automated email from the ASF dual-hosted git repository.

kturner pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/fluo.git


The following commit(s) were added to refs/heads/master by this push:
     new 1ced4d7  Fixes #1011 prevent multiple calls to SyncCommitObserver 
(#1013)
1ced4d7 is described below

commit 1ced4d7f3582908dc16be094656e752c1d45488f
Author: Abhijit Ranalkar <abhijitranal...@gmail.com>
AuthorDate: Tue Feb 13 01:47:19 2018 +0530

    Fixes #1011 prevent multiple calls to SyncCommitObserver (#1013)
---
 .../org/apache/fluo/core/async/SyncCommitObserver.java    | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git 
a/modules/core/src/main/java/org/apache/fluo/core/async/SyncCommitObserver.java 
b/modules/core/src/main/java/org/apache/fluo/core/async/SyncCommitObserver.java
index 314859e..c2b21dc 100644
--- 
a/modules/core/src/main/java/org/apache/fluo/core/async/SyncCommitObserver.java
+++ 
b/modules/core/src/main/java/org/apache/fluo/core/async/SyncCommitObserver.java
@@ -16,7 +16,9 @@
 package org.apache.fluo.core.async;
 
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
 
+import com.google.common.base.Preconditions;
 import org.apache.fluo.api.exceptions.CommitException;
 import org.apache.fluo.api.exceptions.FluoException;
 import org.apache.fluo.core.exceptions.AlreadyAcknowledgedException;
@@ -28,33 +30,44 @@ public class SyncCommitObserver implements 
AsyncCommitObserver {
   private volatile boolean aacked = false;
   private volatile Exception error = null;
   private volatile String commitFailMsg = "";
+  private AtomicBoolean isMethodCalled = new AtomicBoolean(false);
+  private static final String METHOD_CALLED_VALIDATION_CHECK_MESSAGE =
+      "One of the methods committed,failed,alreadyAcknowledged,commitFailed"
+          + " was already called";
 
   @Override
   public void committed() {
+    Preconditions.checkState(isMethodCalled.compareAndSet(false, true),
+        METHOD_CALLED_VALIDATION_CHECK_MESSAGE);
     committed = Boolean.TRUE;
     cdl.countDown();
   }
 
   @Override
   public void failed(Throwable t) {
+    Preconditions.checkState(isMethodCalled.compareAndSet(false, true),
+        METHOD_CALLED_VALIDATION_CHECK_MESSAGE);
     error = (Exception) t;
     cdl.countDown();
   }
 
   @Override
   public void alreadyAcknowledged() {
+    Preconditions.checkState(isMethodCalled.compareAndSet(false, true),
+        METHOD_CALLED_VALIDATION_CHECK_MESSAGE);
     aacked = true;
     cdl.countDown();
   }
 
   @Override
   public void commitFailed(String msg) {
+    Preconditions.checkState(isMethodCalled.compareAndSet(false, true),
+        METHOD_CALLED_VALIDATION_CHECK_MESSAGE);
     committed = false;
     commitFailMsg = msg;
     cdl.countDown();
   }
 
-
   public void waitForCommit() {
     try {
       cdl.await();

-- 
To stop receiving notification emails like this one, please contact
ktur...@apache.org.

Reply via email to