ACCUMULO-2422 reset watch on non-delete events

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

Branch: refs/heads/1.6.0-SNAPSHOT
Commit: 7d70ef5848cf6b42752ec708e0442d4b7aa98c2f
Parents: a12bde8
Author: Eric Newton <eric.new...@gmail.com>
Authored: Fri Feb 28 12:52:21 2014 -0500
Committer: Eric Newton <eric.new...@gmail.com>
Committed: Fri Feb 28 12:52:21 2014 -0500

----------------------------------------------------------------------
 .../test/functional/BackupMasterIT.java         | 63 ++++++++++++++++++++
 1 file changed, 63 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/7d70ef58/test/src/test/java/org/apache/accumulo/test/functional/BackupMasterIT.java
----------------------------------------------------------------------
diff --git 
a/test/src/test/java/org/apache/accumulo/test/functional/BackupMasterIT.java 
b/test/src/test/java/org/apache/accumulo/test/functional/BackupMasterIT.java
new file mode 100644
index 0000000..8d530a7
--- /dev/null
+++ b/test/src/test/java/org/apache/accumulo/test/functional/BackupMasterIT.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.accumulo.test.functional;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.accumulo.fate.util.UtilWaitThread;
+import org.apache.accumulo.fate.zookeeper.ZooReaderWriter;
+import org.apache.accumulo.fate.zookeeper.ZooUtil.NodeMissingPolicy;
+import org.apache.accumulo.master.Master;
+import org.junit.Test;
+
+public class BackupMasterIT extends ConfigurableMacIT {
+
+  @Test(timeout= 10 * 1000)
+  public void test() throws Exception {
+    // wait for master
+    UtilWaitThread.sleep(1000);
+    // create a backup
+    Process backup = exec(Master.class);
+    try {
+      ZooReaderWriter writer = new ZooReaderWriter(cluster.getZooKeepers(), 
30*1000, "digest", "accumulo:DONTTELL".getBytes());
+      String root = "/accumulo/" + 
getConnector().getInstance().getInstanceID();
+      List<String> children = Collections.emptyList();
+      // wait for 2 lock entries
+      do {
+        UtilWaitThread.sleep(100);
+        children = writer.getChildren(root + "/masters/lock");
+      } while (children.size() != 2);
+      Collections.sort(children);
+      // wait for the backup master to learn to be the backup
+      UtilWaitThread.sleep(1000);
+      // generate a false zookeeper event
+      String lockPath = root + "/masters/lock/" + children.get(0);
+      byte data[] = writer.getData(lockPath, null);
+      writer.getZooKeeper().setData(lockPath, data, -1);
+      // let it propagate
+      UtilWaitThread.sleep(500);
+      // kill the master by removing its lock
+      writer.recursiveDelete(lockPath, NodeMissingPolicy.FAIL);
+      // ensure the backup becomes the master
+      getConnector().tableOperations().create(getTableNames(1)[0]);
+    } finally {
+      backup.destroy();
+    }
+  }
+
+}

Reply via email to