You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by iv...@apache.org on 2013/06/07 11:46:16 UTC
svn commit: r1490557 - in /zookeeper/bookkeeper/branches/branch-4.2: ./
bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/
bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/
Author: ivank
Date: Fri Jun 7 09:46:15 2013
New Revision: 1490557
URL: http://svn.apache.org/r1490557
Log:
BOOKKEEPER-585: Auditor logs noisily when a ledger has been deleted (ivank)
Modified:
zookeeper/bookkeeper/branches/branch-4.2/CHANGES.txt
zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java
zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java
zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicCheckTest.java
Modified: zookeeper/bookkeeper/branches/branch-4.2/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/branches/branch-4.2/CHANGES.txt?rev=1490557&r1=1490556&r2=1490557&view=diff
==============================================================================
--- zookeeper/bookkeeper/branches/branch-4.2/CHANGES.txt (original)
+++ zookeeper/bookkeeper/branches/branch-4.2/CHANGES.txt Fri Jun 7 09:46:15 2013
@@ -12,6 +12,8 @@ Release 4.2.2 - Unreleased
BOOKKEEPER-583: Read from a ReadOnlyBookie fails if index fileinfo is not in ledger cache (vinay via sijie)
+ BOOKKEEPER-585: Auditor logs noisily when a ledger has been deleted (ivank)
+
hedwig-server:
BOOKKEEPER-579: TestSubAfterCloseSub was put in a wrong package (sijie via ivank)
Modified: zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java?rev=1490557&r1=1490556&r2=1490557&view=diff
==============================================================================
--- zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java (original)
+++ zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java Fri Jun 7 09:46:15 2013
@@ -377,7 +377,7 @@ public class Auditor implements Watcher
* List all the ledgers and check them individually. This should not
* be run very often.
*/
- private void checkAllLedgers() throws BKAuditException, BKException,
+ void checkAllLedgers() throws BKAuditException, BKException,
IOException, InterruptedException, KeeperException {
ZooKeeperWatcherBase w = new ZooKeeperWatcherBase(conf.getZkTimeout());
ZooKeeper newzk = ZkUtils.createConnectedZookeeperClient(conf.getZkServers(), w);
@@ -413,6 +413,11 @@ public class Auditor implements Watcher
try {
lh = admin.openLedgerNoRecovery(ledgerId);
checker.checkLedger(lh, new ProcessLostFragmentsCb(lh, callback));
+ } catch (BKException.BKNoSuchLedgerExistsException bknsle) {
+ LOG.debug("Ledger was deleted before we could check it", bknsle);
+ callback.processResult(BKException.Code.OK,
+ null, null);
+ return;
} catch (BKException bke) {
LOG.error("Couldn't open ledger " + ledgerId, bke);
callback.processResult(BKException.Code.BookieHandleNotAvailableException,
Modified: zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java?rev=1490557&r1=1490556&r2=1490557&view=diff
==============================================================================
--- zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java (original)
+++ zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/ReplicationWorker.java Fri Jun 7 09:46:15 2013
@@ -246,6 +246,8 @@ public class ReplicationWorker implement
Thread.currentThread().interrupt();
LOG.info("InterruptedException "
+ "while replicating fragments", e);
+ } catch (BKNoSuchLedgerExistsException bknsle) {
+ LOG.debug("Ledger was deleted, safe to continue", bknsle);
} catch (BKException e) {
LOG.error("BKException while fencing the ledger"
+ " for rereplication of postponed ledgers", e);
Modified: zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicCheckTest.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicCheckTest.java?rev=1490557&r1=1490556&r2=1490557&view=diff
==============================================================================
--- zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicCheckTest.java (original)
+++ zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicCheckTest.java Fri Jun 7 09:46:15 2013
@@ -23,6 +23,8 @@ package org.apache.bookkeeper.replicatio
import org.apache.bookkeeper.test.BookKeeperClusterTestCase;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.CountDownLatch;
import java.util.HashMap;
import java.util.List;
import java.util.LinkedList;
@@ -270,4 +272,50 @@ public class AuditorPeriodicCheckTest ex
assertTrue("All should be underreplicated",
numUnderreplicated <= numLedgers && numUnderreplicated > 0);
}
+
+ /**
+ * Test that the period check will succeed if a ledger is deleted midway
+ */
+ @Test(timeout=60000)
+ public void testPeriodicCheckWhenLedgerDeleted() throws Exception {
+ for (AuditorElector e : auditorElectors.values()) {
+ e.shutdown();
+ }
+
+ final int numLedgers = 100;
+ List<Long> ids = new LinkedList<Long>();
+ for (int i = 0; i < numLedgers; i++) {
+ LedgerHandle lh = bkc.createLedger(3, 3, DigestType.CRC32, "passwd".getBytes());
+ ids.add(lh.getId());
+ for (int j = 0; j < 10; j++) {
+ lh.addEntry("testdata".getBytes());
+ }
+ lh.close();
+ }
+ final Auditor auditor = new Auditor(
+ StringUtils.addrToString(Bookie.getBookieAddress(bsConfs.get(0))),
+ bsConfs.get(0), zkc);
+ final AtomicBoolean exceptionCaught = new AtomicBoolean(false);
+ final CountDownLatch latch = new CountDownLatch(1);
+ Thread t = new Thread() {
+ public void run() {
+ try {
+ latch.countDown();
+ for (int i = 0; i < numLedgers; i++) {
+ auditor.checkAllLedgers();
+ }
+ } catch (Exception e) {
+ LOG.error("Caught exception while checking all ledgers", e);
+ exceptionCaught.set(true);
+ }
+ }
+ };
+ t.start();
+ latch.await();
+ for (Long id : ids) {
+ bkc.deleteLedger(id);
+ }
+ t.join();
+ assertFalse("Shouldn't have thrown exception", exceptionCaught.get());
+ }
}