You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by el...@apache.org on 2015/05/28 04:03:54 UTC

[2/6] accumulo git commit: ACCUMULO-3828 Further stabilization and debug for Proxy ITs

ACCUMULO-3828 Further stabilization and debug for Proxy ITs


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

Branch: refs/heads/master
Commit: bd759af0efbe7302afcc81ab755cd5e443183137
Parents: 7bd6634
Author: Josh Elser <el...@apache.org>
Authored: Wed May 27 18:25:48 2015 -0400
Committer: Josh Elser <el...@apache.org>
Committed: Wed May 27 20:22:59 2015 -0400

----------------------------------------------------------------------
 .../apache/accumulo/proxy/TestProxyClient.java  |  7 +++
 .../apache/accumulo/tserver/tablet/Tablet.java  |  1 +
 .../apache/accumulo/proxy/SimpleProxyBase.java  | 58 +++++++++++++++++---
 3 files changed, 58 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/bd759af0/proxy/src/main/java/org/apache/accumulo/proxy/TestProxyClient.java
----------------------------------------------------------------------
diff --git a/proxy/src/main/java/org/apache/accumulo/proxy/TestProxyClient.java b/proxy/src/main/java/org/apache/accumulo/proxy/TestProxyClient.java
index 99ebb38..fb23484 100644
--- a/proxy/src/main/java/org/apache/accumulo/proxy/TestProxyClient.java
+++ b/proxy/src/main/java/org/apache/accumulo/proxy/TestProxyClient.java
@@ -59,6 +59,13 @@ public class TestProxyClient {
     transport.open();
   }
 
+  public synchronized void close() {
+    if (null != transport) {
+      transport.close();
+      transport = null;
+    }
+  }
+
   public AccumuloProxy.Client proxy() {
     return proxy;
   }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/bd759af0/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
----------------------------------------------------------------------
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
index 1f4625b..a75b35d 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
@@ -533,6 +533,7 @@ public class Tablet implements TabletCommitter {
     tableConfiguration.addObserver(configObserver = new ConfigurationObserver() {
 
       private void reloadConstraints() {
+        log.debug("Reloading constraints for extent: " + extent);
         constraintChecker.set(new ConstraintChecker(tableConfiguration));
       }
 

http://git-wip-us.apache.org/repos/asf/accumulo/blob/bd759af0/test/src/test/java/org/apache/accumulo/proxy/SimpleProxyBase.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/proxy/SimpleProxyBase.java b/test/src/test/java/org/apache/accumulo/proxy/SimpleProxyBase.java
index 1e071df..8895e9e 100644
--- a/test/src/test/java/org/apache/accumulo/proxy/SimpleProxyBase.java
+++ b/test/src/test/java/org/apache/accumulo/proxy/SimpleProxyBase.java
@@ -130,7 +130,9 @@ public abstract class SimpleProxyBase extends SharedMiniClusterIT {
   private static final long ZOOKEEPER_PROPAGATION_TIME = 10 * 1000;
   private static TServer proxyServer;
   private static int proxyPort;
-  private static org.apache.accumulo.proxy.thrift.AccumuloProxy.Client client;
+
+  private TestProxyClient proxyClient;
+  private org.apache.accumulo.proxy.thrift.AccumuloProxy.Client client;
 
   private static Map<String,String> properties = new HashMap<>();
   private static ByteBuffer creds = null;
@@ -168,8 +170,6 @@ public abstract class SimpleProxyBase extends SharedMiniClusterIT {
     proxyServer = Proxy.createProxyServer(HostAndPort.fromParts("localhost", proxyPort), factory, props).server;
     while (!proxyServer.isServing())
       UtilWaitThread.sleep(100);
-    client = new TestProxyClient("localhost", proxyPort, factory).proxy();
-    creds = client.login("root", properties);
   }
 
   @AfterClass
@@ -185,6 +185,11 @@ public abstract class SimpleProxyBase extends SharedMiniClusterIT {
 
   @Before
   public void setup() throws Exception {
+    // Create a new client for each test
+    proxyClient = new TestProxyClient("localhost", proxyPort, factory);
+    client = proxyClient.proxy();
+    creds = client.login("root", properties);
+
     // Create 'user'
     client.createLocalUser(creds, "user", s2bb(SharedMiniClusterIT.getRootPassword()));
     // Log in as 'user'
@@ -208,6 +213,11 @@ public abstract class SimpleProxyBase extends SharedMiniClusterIT {
         log.warn("Failed to delete test table", e);
       }
     }
+
+    // Close the transport after the test
+    if (null != proxyClient) {
+      proxyClient.close();
+    }
   }
 
   /*
@@ -1119,6 +1129,7 @@ public abstract class SimpleProxyBase extends SharedMiniClusterIT {
     while (!constraints.containsKey(NumericValueConstraint.class.getName())) {
       log.info("Constraints don't contain NumericValueConstraint");
       Thread.sleep(2000);
+      constraints = client.listConstraints(creds, table);
     }
 
     boolean success = false;
@@ -1152,6 +1163,7 @@ public abstract class SimpleProxyBase extends SharedMiniClusterIT {
     while (constraints.containsKey(NumericValueConstraint.class.getName())) {
       log.info("Constraints still contains NumericValueConstraint");
       Thread.sleep(2000);
+      constraints = client.listConstraints(creds, table);
     }
 
     assertScan(new String[][] {}, table);
@@ -1191,44 +1203,73 @@ public abstract class SimpleProxyBase extends SharedMiniClusterIT {
 
   @Test
   public void testTableConstraints() throws Exception {
+    log.debug("Setting NumericValueConstraint on " + table);
 
     // constraints
     client.addConstraint(creds, table, NumericValueConstraint.class.getName());
 
     // zookeeper propagation time
-    UtilWaitThread.sleep(ZOOKEEPER_PROPAGATION_TIME);
+    Thread.sleep(ZOOKEEPER_PROPAGATION_TIME);
+
+    log.debug("Attempting to verify client-side that constraints are observed");
+
+    Map<String,Integer> constraints = client.listConstraints(creds, table);
+    while (!constraints.containsKey(NumericValueConstraint.class.getName())) {
+      log.debug("Constraints don't contain NumericValueConstraint");
+      Thread.sleep(2000);
+      constraints = client.listConstraints(creds, table);
+    }
 
     assertEquals(2, client.listConstraints(creds, table).size());
+    log.debug("Verified client-side that constraints exist");
 
     // Write data that satisfies the constraint
     client.updateAndFlush(creds, table, mutation("row1", "cf", "cq", "123"));
 
+    log.debug("Successfully wrote data that satisfies the constraint");
+    log.debug("Trying to write data that the constraint should reject");
+
     // Expect failure on data that fails the constraint
     while (true) {
       try {
         client.updateAndFlush(creds, table, mutation("row1", "cf", "cq", "x"));
-        UtilWaitThread.sleep(1000);
+        log.debug("Expected mutation to be rejected, but was not. Waiting and retrying");
+        Thread.sleep(5000);
       } catch (MutationsRejectedException ex) {
         break;
       }
     }
 
+    log.debug("Saw expected failure on data which fails the constraint");
+
+    log.debug("Removing constraint from table");
     client.removeConstraint(creds, table, 2);
 
     UtilWaitThread.sleep(ZOOKEEPER_PROPAGATION_TIME);
 
+    constraints = client.listConstraints(creds, table);
+    while (constraints.containsKey(NumericValueConstraint.class.getName())) {
+      log.debug("Constraints contains NumericValueConstraint");
+      Thread.sleep(2000);
+      constraints = client.listConstraints(creds, table);
+    }
+
     assertEquals(1, client.listConstraints(creds, table).size());
+    log.debug("Verified client-side that the constraint was removed");
 
+    log.debug("Attempting to write mutation that should succeed after constraints was removed");
     // Make sure we can write the data after we removed the constraint
     while (true) {
       try {
         client.updateAndFlush(creds, table, mutation("row1", "cf", "cq", "x"));
         break;
       } catch (MutationsRejectedException ex) {
-        UtilWaitThread.sleep(1000);
+        log.debug("Expected mutation accepted, but was not. Waiting and retrying");
+        Thread.sleep(5000);
       }
     }
 
+    log.debug("Verifying that record can be read from the table");
     assertScan(new String[][] {{"row1", "cf", "cq", "x"}}, table);
   }
 
@@ -1534,6 +1575,7 @@ public abstract class SimpleProxyBase extends SharedMiniClusterIT {
 
   @Test
   public void testConditionalWriter() throws Exception {
+    log.debug("Adding constraint {} to {}", table, NumericValueConstraint.class.getName());
     client.addConstraint(creds, table, NumericValueConstraint.class.getName());
     UtilWaitThread.sleep(ZOOKEEPER_PROPAGATION_TIME);
 
@@ -1659,7 +1701,7 @@ public abstract class SimpleProxyBase extends SharedMiniClusterIT {
         {"00347", "data", "count", "1"}, {"00347", "data", "img", "1234567890"}}, table);
 
     ConditionalStatus status = null;
-    for (int i = 0; i < 20; i++) {
+    for (int i = 0; i < 30; i++) {
       // test a mutation that violated a constraint
       updates.clear();
       updates.put(s2bb("00347"),
@@ -1671,7 +1713,7 @@ public abstract class SimpleProxyBase extends SharedMiniClusterIT {
       status = results.get(s2bb("00347"));
       if (ConditionalStatus.VIOLATED != status) {
         log.info("ConditionalUpdate was not rejected by server due to table constraint. Sleeping and retrying");
-        Thread.sleep(3000);
+        Thread.sleep(5000);
         continue;
       }