From commits-return-3217-apmail-zookeeper-commits-archive=zookeeper.apache.org@zookeeper.apache.org Mon Mar 25 05:48:37 2013 Return-Path: X-Original-To: apmail-zookeeper-commits-archive@www.apache.org Delivered-To: apmail-zookeeper-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id AFDEDFBF8 for ; Mon, 25 Mar 2013 05:48:37 +0000 (UTC) Received: (qmail 98989 invoked by uid 500); 25 Mar 2013 05:48:37 -0000 Delivered-To: apmail-zookeeper-commits-archive@zookeeper.apache.org Received: (qmail 98790 invoked by uid 500); 25 Mar 2013 05:48:28 -0000 Mailing-List: contact commits-help@zookeeper.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ Delivered-To: mailing list commits@zookeeper.apache.org Received: (qmail 98739 invoked by uid 99); 25 Mar 2013 05:48:26 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 25 Mar 2013 05:48:26 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 25 Mar 2013 05:48:23 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 30A2E23888FE; Mon, 25 Mar 2013 05:48:02 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1460524 - in /zookeeper/bookkeeper/trunk: CHANGES.txt bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LedgerCacheImpl.java bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ReadOnlyBookieTest.java Date: Mon, 25 Mar 2013 05:48:01 -0000 To: commits@zookeeper.apache.org From: sijie@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130325054802.30A2E23888FE@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: sijie Date: Mon Mar 25 05:48:01 2013 New Revision: 1460524 URL: http://svn.apache.org/r1460524 Log: BOOKKEEPER-583: Read from a ReadOnlyBookie fails if index fileinfo is not in ledger cache (vinay via sijie) Modified: zookeeper/bookkeeper/trunk/CHANGES.txt zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LedgerCacheImpl.java zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ReadOnlyBookieTest.java Modified: zookeeper/bookkeeper/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/CHANGES.txt?rev=1460524&r1=1460523&r2=1460524&view=diff ============================================================================== --- zookeeper/bookkeeper/trunk/CHANGES.txt (original) +++ zookeeper/bookkeeper/trunk/CHANGES.txt Mon Mar 25 05:48:01 2013 @@ -52,6 +52,8 @@ Trunk (unreleased changes) BOOKKEEPER-557: Compiler error showing up badly with jdk 7 (ivank via sijie) + BOOKKEEPER-583: Read from a ReadOnlyBookie fails if index fileinfo is not in ledger cache (vinay via sijie) + Release 4.2.0 - 2013-01-14 Non-backward compatible changes: Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LedgerCacheImpl.java URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LedgerCacheImpl.java?rev=1460524&r1=1460523&r2=1460524&view=diff ============================================================================== --- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LedgerCacheImpl.java (original) +++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/LedgerCacheImpl.java Mon Mar 25 05:48:01 2013 @@ -263,9 +263,6 @@ public class LedgerCacheImpl implements } evictFileInfoIfNecessary(); fi = new FileInfo(lf, masterKey); - if (ledgerDirsManager.isDirFull(getLedgerDirForLedger(fi))) { - moveLedgerIndexFile(ledger, fi); - } fileInfoCache.put(ledger, fi); openLedgers.add(ledger); } Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ReadOnlyBookieTest.java URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ReadOnlyBookieTest.java?rev=1460524&r1=1460523&r2=1460524&view=diff ============================================================================== --- zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ReadOnlyBookieTest.java (original) +++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/ReadOnlyBookieTest.java Mon Mar 25 05:48:01 2013 @@ -184,4 +184,40 @@ public class ReadOnlyBookieTest extends // Expected } } + + /** + * Try to read closed ledger from restarted ReadOnlyBookie. + */ + public void testReadFromReadOnlyBookieShouldBeSuccess() throws Exception { + LedgerHandle ledger = bkc.createLedger(2, 2, DigestType.MAC, "".getBytes()); + for (int i = 0; i < 10; i++) { + ledger.addEntry("data".getBytes()); + } + ledger.close(); + bsConfs.get(1).setReadOnlyModeEnabled(true); + bsConfs.get(1).setDiskCheckInterval(500); + restartBookies(); + + // Check new bookie with readonly mode enabled. + File[] ledgerDirs = bsConfs.get(1).getLedgerDirs(); + assertEquals("Only one ledger dir should be present", 1, ledgerDirs.length); + Bookie bookie = bs.get(1).getBookie(); + LedgerDirsManager ledgerDirsManager = bookie.getLedgerDirsManager(); + + // Now add the current ledger dir to filled dirs list + ledgerDirsManager.addToFilledDirs(new File(ledgerDirs[0], "current")); + + // Wait till Bookie converts to ReadOnly mode. + Thread.sleep(1000); + assertTrue("Bookie should be converted to readonly mode", bookie.isRunning() && bookie.isReadOnly()); + + // Now kill the other bookie and read entries from the readonly bookie + killBookie(0); + + Enumeration readEntries = ledger.readEntries(0, 9); + while (readEntries.hasMoreElements()) { + LedgerEntry entry = readEntries.nextElement(); + assertEquals("Entry should contain correct data", "data", new String(entry.getEntry())); + } + } }