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);


Reply via email to