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 2011/11/04 11:00:30 UTC

svn commit: r1197472 - in /zookeeper/bookkeeper/trunk: CHANGES.txt bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LedgerRecoveryTest.java

Author: ivank
Date: Fri Nov  4 10:00:29 2011
New Revision: 1197472

URL: http://svn.apache.org/viewvc?rev=1197472&view=rev
Log:
BOOKKEEPER-103: ledgerId and entryId is parsed wrong when addEntry (Sijie Guo via ivank)

Modified:
    zookeeper/bookkeeper/trunk/CHANGES.txt
    zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java
    zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LedgerRecoveryTest.java

Modified: zookeeper/bookkeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/CHANGES.txt?rev=1197472&r1=1197471&r2=1197472&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/CHANGES.txt (original)
+++ zookeeper/bookkeeper/trunk/CHANGES.txt Fri Nov  4 10:00:29 2011
@@ -58,6 +58,8 @@ BUGFIXES:
 
   BOOKKEEPER-93: bookkeeper doesn't work correctly on OpenLedgerNoRecovery (Sijie Guo via ivank)
 
+  BOOKKEEPER-103: ledgerId and entryId is parsed wrong when addEntry (Sijie Guo via ivank)
+
  hedwig-server/
 
   BOOKKEEPER-43: NullPointException when releasing topic (Sijie Guo via breed)

Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java?rev=1197472&r1=1197471&r2=1197472&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java Fri Nov  4 10:00:29 2011
@@ -150,10 +150,23 @@ public class BookieServer implements NIO
     public void processPacket(ByteBuffer packet, Cnxn src) {
         PacketHeader h = PacketHeader.fromInt(packet.getInt());
 
-        ByteBuffer bb = packet.duplicate();
-        long ledgerId = bb.getLong();
-        long entryId = bb.getLong();
-        
+        // packet format is different between ADDENTRY and READENTRY
+        long ledgerId = -1;
+        long entryId = -1;
+        byte[] masterKey = null;
+        switch (h.getOpCode()) {
+        case BookieProtocol.ADDENTRY:
+            // first read master key
+            masterKey = new byte[20];
+            packet.get(masterKey, 0, 20);
+            // !! fall thru to read ledger id and entry id
+        case BookieProtocol.READENTRY:
+            ByteBuffer bb = packet.duplicate();
+            ledgerId = bb.getLong();
+            entryId = bb.getLong();
+            break;
+        }
+
         if (h.getVersion() < BookieProtocol.LOWEST_COMPAT_PROTOCOL_VERSION
             || h.getVersion() > BookieProtocol.CURRENT_PROTOCOL_VERSION) {
             LOG.error("Invalid protocol version, expected something between "
@@ -164,12 +177,10 @@ public class BookieServer implements NIO
                                            h.getVersion(), h.getOpCode(), ledgerId, entryId));
             return;
         }
-        
+
         switch (h.getOpCode()) {
         case BookieProtocol.ADDENTRY:
             try {
-                byte[] masterKey = new byte[20];
-                packet.get(masterKey, 0, 20);
                 // LOG.debug("Master key: " + new String(masterKey));
                 bookie.addEntry(packet.slice(), this, src, masterKey);
             } catch (IOException e) {

Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LedgerRecoveryTest.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LedgerRecoveryTest.java?rev=1197472&r1=1197471&r2=1197472&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LedgerRecoveryTest.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/LedgerRecoveryTest.java Fri Nov  4 10:00:29 2011
@@ -23,6 +23,7 @@ package org.apache.bookkeeper.test;
 
 import org.junit.*;
 import org.apache.bookkeeper.client.LedgerHandle;
+import org.apache.bookkeeper.client.BKException;
 import org.apache.bookkeeper.client.BookKeeper.DigestType;
 import org.apache.log4j.Logger;
 
@@ -85,4 +86,28 @@ public class LedgerRecoveryTest extends 
         testInternal(0);
     }
 
+    @Test
+    public void testLedgerRecoveryWithWrongPassword() throws Exception {
+        // Create a ledger
+        byte[] ledgerPassword = "aaaa".getBytes();
+        LedgerHandle lh = bkc.createLedger(digestType, ledgerPassword);
+        // bkc.initMessageDigest("SHA1");
+        long ledgerId = lh.getId();
+        LOG.info("Ledger ID: " + lh.getId());
+        String tmp = "BookKeeper is cool!";
+        int numEntries = 30;
+        for (int i = 0; i < numEntries; i++) {
+            lh.addEntry(tmp.getBytes());
+        }
+
+        // Using wrong password
+        ledgerPassword = "bbbb".getBytes();
+        try {
+            lh = bkc.openLedger(ledgerId, digestType, ledgerPassword);
+            fail("Opening ledger with wrong password should fail");
+        } catch (BKException e) {
+            // should failed
+        }
+    }
+
 }