You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by si...@apache.org on 2016/03/08 07:16:07 UTC

bookkeeper git commit: read only bookie runs replicator and does not release the under replicated lock after failing

Repository: bookkeeper
Updated Branches:
  refs/heads/master bfa74f736 -> fe52b500c


read only bookie runs replicator and does not release the under replicated lock after failing

… only bookie

Author: Siddharth Boobna <sb...@yahoo-inc.com>

Reviewers: Sijie Guo <si...@apache.org>

Closes #17 from sboobna/BOOKKEEPER-900


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

Branch: refs/heads/master
Commit: fe52b500cfec1c93725fa967ad2d5e0e7350580c
Parents: bfa74f7
Author: Siddharth Boobna <sb...@yahoo-inc.com>
Authored: Mon Mar 7 22:16:03 2016 -0800
Committer: Sijie Guo <si...@apache.org>
Committed: Mon Mar 7 22:16:03 2016 -0800

----------------------------------------------------------------------
 .../replication/ReplicationWorker.java          |  1 +
 .../replication/TestReplicationWorker.java      | 26 ++++++++++++--------
 2 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/fe52b500/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java
----------------------------------------------------------------------
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java
index 4239b6a..1a10667 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java
@@ -252,6 +252,7 @@ public class ReplicationWorker implements Runnable {
                 LOG.warn("BKLedgerRecoveryException "
                         + "while replicating the fragment", e);
                 if (admin.getReadOnlyBookies().contains(targetBookie)) {
+                    underreplicationManager.releaseUnderreplicatedLedger(ledgerIdToReplicate);
                     throw new BKException.BKWriteOnReadOnlyBookieException();
                 }
             }

http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/fe52b500/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java
----------------------------------------------------------------------
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java
index 9591ef8..8aebae4 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java
@@ -19,6 +19,17 @@
  */
 package org.apache.bookkeeper.replication;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNull;
+
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Map.Entry;
+import java.util.Set;
+
 import org.apache.bookkeeper.client.BKException;
 import org.apache.bookkeeper.client.BookKeeper;
 import org.apache.bookkeeper.client.ClientUtil;
@@ -32,22 +43,12 @@ import org.apache.bookkeeper.net.BookieSocketAddress;
 import org.apache.bookkeeper.proto.BookieServer;
 import org.apache.bookkeeper.test.MultiLedgerManagerTestCase;
 import org.apache.bookkeeper.util.BookKeeperConstants;
-import org.apache.bookkeeper.util.ZkUtils;
 import org.apache.bookkeeper.zookeeper.ZooKeeperClient;
-import org.apache.bookkeeper.zookeeper.ZooKeeperWatcherBase;
 import org.apache.zookeeper.ZooKeeper;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.net.InetAddress;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import static org.junit.Assert.*;
-
 /**
  * Test the ReplicationWroker, where it has to replicate the fragments from
  * failed Bookies to given target Bookie.
@@ -58,6 +59,7 @@ public class TestReplicationWorker extends MultiLedgerManagerTestCase {
     private static final Logger LOG = LoggerFactory
             .getLogger(TestReplicationWorker.class);
     private String basePath = "";
+    private String baseLockPath = "";
     private LedgerManagerFactory mFactory;
     private LedgerUnderreplicationManager underReplicationManager;
     private static byte[] data = "TestReplicationWorker".getBytes();
@@ -72,6 +74,9 @@ public class TestReplicationWorker extends MultiLedgerManagerTestCase {
         basePath = baseClientConf.getZkLedgersRootPath() + '/'
                 + BookKeeperConstants.UNDER_REPLICATION_NODE
                 + BookKeeperConstants.DEFAULT_ZK_LEDGERS_ROOT_PATH;
+        baseLockPath = baseClientConf.getZkLedgersRootPath() + '/'
+                + BookKeeperConstants.UNDER_REPLICATION_NODE
+                + "/locks";
         baseConf.setRereplicationEntryBatchSize(3);
     }
 
@@ -535,6 +540,7 @@ public class TestReplicationWorker extends MultiLedgerManagerTestCase {
             while (ReplicationTestUtil.isLedgerInUnderReplication(zkc, lh.getId(), basePath) && rw.isRunning()) {
                 Thread.sleep(100);
             }
+            assertNull(zkc.exists(String.format("%s/urL%010d", baseLockPath, lh.getId()), false));
             assertFalse("RW should shutdown if the bookie is readonly", rw.isRunning());
         } finally {
             rw.shutdown();