Author: fpj
Date: Thu Jul 7 14:37:50 2011
New Revision: 1143850
URL: http://svn.apache.org/viewvc?rev=1143850&view=rev
Log:
BOOKKEEPER-5: Issue with Netty in BookKeeper (fpj and ivank via fpj)
Modified:
zookeeper/bookkeeper/trunk/CHANGES.txt
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieClient.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java
Modified: zookeeper/bookkeeper/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/CHANGES.txt?rev=1143850&r1=1143849&r2=1143850&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/CHANGES.txt (original)
+++ zookeeper/bookkeeper/trunk/CHANGES.txt Thu Jul 7 14:37:50 2011
@@ -15,3 +15,5 @@ BUGFIXES:
BOOKKEEPER-19: BookKeeper doesn't support more than 2Gig of memory (ivan via
fpj)
BOOKEEPER-22: Exception in LedgerCache causes addEntry request to fail (fpj
via fpj)
+
+ BOOKEEPER-5: Issue with Netty in BookKeeper (fpj and ivank via fpj)
Modified:
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieClient.java
URL:
http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieClient.java?rev=1143850&r1=1143849&r2=1143850&view=diff
==============================================================================
---
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieClient.java
(original)
+++
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieClient.java
Thu Jul 7 14:37:50 2011
@@ -64,6 +64,8 @@ public class BookieClient {
PerChannelBookieClient prevChannel = channels.putIfAbsent(addr,
channel);
if (prevChannel != null) {
channel = prevChannel;
+ } else {
+ channel.connect();
}
}
Modified:
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
URL:
http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java?rev=1143850&r1=1143849&r2=1143850&view=diff
==============================================================================
---
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
(original)
+++
zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
Thu Jul 7 14:37:50 2011
@@ -92,11 +92,9 @@ public class PerChannelBookieClient exte
this.executor = executor;
this.totalBytesOutstanding = totalBytesOutstanding;
this.channelFactory = channelFactory;
- connect(channelFactory);
}
- void connect(ChannelFactory channelFactory) {
-
+ void connect() {
if (LOG.isDebugEnabled())
LOG.debug("Connecting to bookie: " + addr);
@@ -178,7 +176,7 @@ public class PerChannelBookieClient exte
pendingOps.add(op);
if (!connectionAttemptInProgress) {
- connect(channelFactory);
+ connect();
}
}
@@ -282,7 +280,7 @@ public class PerChannelBookieClient exte
public void close() {
if (channel != null) {
- channel.close();
+ channel.close().awaitUninterruptibly();
}
}
Modified:
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java
URL:
http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java?rev=1143850&r1=1143849&r2=1143850&view=diff
==============================================================================
---
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java
(original)
+++
zookeeper/bookkeeper/trunk/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java
Thu Jul 7 14:37:50 2011
@@ -662,6 +662,58 @@ public class BookieReadWriteTest extends
}
}
+ @Test
+ public void testShutdown() throws IOException {
+ try {
+ int numLedgers = 10000;
+ Long throttle = (((Double) Math.max(1.0, ((double)
10000/numLedgers))).longValue());
+ System.setProperty("throttle", throttle.toString());
+ bkc = new BookKeeper("127.0.0.1");
+ LedgerHandle[] lhArray = new LedgerHandle[numLedgers];
+ for(int i = 0; i < numLedgers; i++){
+ lhArray[i] = bkc.createLedger(3, 2,
BookKeeper.DigestType.CRC32, new byte[] {'a', 'b'});
+ LOG.debug("Ledger handle: " + lhArray[i].getId());
+ }
+ LOG.info("Done creating ledgers.");
+ Random r = new Random();
+
+ for (int i = 0; i < numEntriesToWrite; i++) {
+ ByteBuffer entry = ByteBuffer.allocate(4);
+ entry.putInt(rng.nextInt(maxInt));
+ entry.position(0);
+
+ entries.add(entry.array());
+ entriesSize.add(entry.array().length);
+
+ int nextLh = r.nextInt(numLedgers);
+ lhArray[nextLh].asyncAddEntry(entry.array(), this, sync);
+ }
+
+ // wait for all entries to be acknowledged
+ synchronized (sync) {
+ while (sync.counter < numEntriesToWrite) {
+ LOG.debug("Entries counter = " + sync.counter);
+ sync.wait();
+ }
+ }
+
+ LOG.debug("*** WRITE COMPLETE ***");
+ // close ledger
+ for(int i = 0; i < lhArray.length; i++){
+ lhArray[i].close();
+ }
+ } catch (KeeperException e) {
+ LOG.error("Test failed", e);
+ fail("Test failed due to ZooKeeper exception");
+ } catch (BKException e) {
+ LOG.error("Test failed", e);
+ fail("Test failed due to BookKeeper exception");
+ } catch (InterruptedException e) {
+ LOG.error("Test failed", e);
+ fail("Test failed due to interruption");
+ }
+ }
+
public void addComplete(int rc, LedgerHandle lh, long entryId, Object ctx)
{
if(rc != BKException.Code.OK) fail("Return code is not OK: " + rc);