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
+ }
+ }
+
}