You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by uj...@apache.org on 2013/11/19 00:41:20 UTC

[09/11] git commit: ACCUMULO-1833 Account for race condition in test where mutations are flushed immediately.

ACCUMULO-1833 Account for race condition in test where mutations are flushed immediately.


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

Branch: refs/heads/master
Commit: 404e955ece6b85bd77e3afc5c641b8eb823d547b
Parents: 60dd8bd
Author: Josh Elser <el...@apache.org>
Authored: Mon Nov 18 17:42:18 2013 -0500
Committer: Josh Elser <el...@apache.org>
Committed: Mon Nov 18 17:44:32 2013 -0500

----------------------------------------------------------------------
 .../test/MultiTableBatchWriterTest.java         | 50 ++++++++++++++++----
 1 file changed, 40 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/404e955e/test/src/test/java/org/apache/accumulo/test/MultiTableBatchWriterTest.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/MultiTableBatchWriterTest.java b/test/src/test/java/org/apache/accumulo/test/MultiTableBatchWriterTest.java
index c5290e4..9ee1e6e 100644
--- a/test/src/test/java/org/apache/accumulo/test/MultiTableBatchWriterTest.java
+++ b/test/src/test/java/org/apache/accumulo/test/MultiTableBatchWriterTest.java
@@ -340,7 +340,8 @@ public class MultiTableBatchWriterTest {
 
     TCredentials creds = CredentialHelper.create("root", password, instance.getInstanceID());
     MultiTableBatchWriter mtbw = new MultiTableBatchWriterImpl(instance, creds, config, 60, TimeUnit.SECONDS);
-
+    boolean mutationsRejected = false;
+    
     try {
       final String table1 = "testTableDelete_table1", table2 = "testTableDelete_table2";
 
@@ -364,19 +365,27 @@ public class MultiTableBatchWriterTest {
       m2.put("col1", "", "val1");
       m2.put("col2", "", "val2");
 
-      bw1.addMutation(m2);
-      bw2.addMutation(m2);
+      try {
+        bw1.addMutation(m2);
+        bw2.addMutation(m2);
+      } catch (MutationsRejectedException e) {
+        // Pass - Mutations might flush immediately
+        mutationsRejected = true;
+      }
 
     } finally {
       if (null != mtbw) {
         try {
+          // Mutations might have flushed before the table offline occurred
           mtbw.close();
-          Assert.fail("Should not be able to close batch writers");
         } catch (MutationsRejectedException e) {
           // Pass
+          mutationsRejected = true;
         }
       }
     }
+    
+    Assert.assertTrue("Expected mutations to be rejected.", mutationsRejected);
   }
 
   @Test
@@ -389,6 +398,7 @@ public class MultiTableBatchWriterTest {
 
     TCredentials creds = CredentialHelper.create("root", password, instance.getInstanceID());
     MultiTableBatchWriter mtbw = new MultiTableBatchWriterImpl(instance, creds, config, 60, TimeUnit.SECONDS);
+    boolean mutationsRejected = false;
 
     try {
       final String table1 = "testOfflineTable_table1", table2 = "testOfflineTable_table2";
@@ -413,19 +423,26 @@ public class MultiTableBatchWriterTest {
       m2.put("col1", "", "val1");
       m2.put("col2", "", "val2");
 
-      bw1.addMutation(m2);
-      bw2.addMutation(m2);
+      try {
+        bw1.addMutation(m2);
+        bw2.addMutation(m2);
+      } catch (MutationsRejectedException e) {
+        // Pass -- Mutations might flush immediately and fail because of offline table
+        mutationsRejected = true;
+      }
     } finally {
       if (null != mtbw) {
         try {
+          // Mutations might have flushed before the table offline occurred
           mtbw.close();
-          Assert.fail("Should not be able to close batch writers");
         } catch (MutationsRejectedException e) {
           // Pass
+          mutationsRejected = true;
         }
       }
-
     }
+    
+    Assert.assertTrue("Expected mutations to be rejected.", mutationsRejected);
   }
 
   @Test
@@ -438,6 +455,7 @@ public class MultiTableBatchWriterTest {
     
     TCredentials creds = CredentialHelper.create("root", password, instance.getInstanceID());
     MultiTableBatchWriter mtbw = new MultiTableBatchWriterImpl(instance, creds, config, 60, TimeUnit.SECONDS);
+    boolean mutationsRejected = false;
 
     try {
       final String table1 = "testOfflineTableWithCache_table1", table2 = "testOfflineTableWithCache_table2";
@@ -461,6 +479,7 @@ public class MultiTableBatchWriterTest {
         bw1 = mtbw.getBatchWriter(table1);
       } catch (TableOfflineException e) {
         // pass
+        mutationsRejected = true;
       }
 
       tops.offline(table2);
@@ -469,17 +488,21 @@ public class MultiTableBatchWriterTest {
         bw2 = mtbw.getBatchWriter(table2);
       } catch (TableOfflineException e) {
         // pass
+        mutationsRejected = true;
       }
     } finally {
       if (null != mtbw) {
         try {
+          // Mutations might have flushed before the table offline occurred
           mtbw.close();
-          Assert.fail("Expecting close on MTBW to fail due to offline tables");
         } catch (MutationsRejectedException e) {
           // Pass
+          mutationsRejected = true;
         }
       }
     }
+
+    Assert.assertTrue("Expected mutations to be rejected.", mutationsRejected);
   }
 
   @Test
@@ -492,6 +515,7 @@ public class MultiTableBatchWriterTest {
 
     TCredentials creds = CredentialHelper.create("root", password, instance.getInstanceID());
     MultiTableBatchWriter mtbw = new MultiTableBatchWriterImpl(instance, creds, config, 0, TimeUnit.SECONDS);
+    boolean mutationsRejected = false;
 
     try {
       final String table1 = "testOfflineTableWithoutCache_table1", table2 = "testOfflineTableWithoutCache_table2";
@@ -509,6 +533,7 @@ public class MultiTableBatchWriterTest {
       bw1.addMutation(m1);
       bw2.addMutation(m1);
 
+      // Mutations might or might not flush before tables goes offline
       tops.offline(table1);
       tops.offline(table2);
 
@@ -517,6 +542,7 @@ public class MultiTableBatchWriterTest {
         Assert.fail(table1 + " should be offline");
       } catch (TableOfflineException e) {
         // pass
+        mutationsRejected = true;
       }
 
       try {
@@ -524,16 +550,20 @@ public class MultiTableBatchWriterTest {
         Assert.fail(table1 + " should be offline");
       } catch (TableOfflineException e) {
         // pass
+        mutationsRejected = true;
       }
     } finally {
       if (null != mtbw) {
         try {
+          // Mutations might have flushed before the table offline occurred
           mtbw.close();
-          Assert.fail("Expecting close on MTBW to fail due to offline tables");
         } catch (MutationsRejectedException e) {
           // Pass
+          mutationsRejected = true;
         }
       }
     }
+
+    Assert.assertTrue("Expected mutations to be rejected.", mutationsRejected);
   }
 }