Author: sijie Date: Tue Oct 22 05:35:46 2013 New Revision: 1534498 URL: http://svn.apache.org/r1534498 Log: BOOKKEEPER-688: NPE exception in PerChannelBookieClient (ivank via sijie)
Modified: zookeeper/bookkeeper/trunk/CHANGES.txt zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java Modified: zookeeper/bookkeeper/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/CHANGES.txt?rev=1534498&r1=1534497&r2=1534498&view=diff ============================================================================== --- zookeeper/bookkeeper/trunk/CHANGES.txt (original) +++ zookeeper/bookkeeper/trunk/CHANGES.txt Tue Oct 22 05:35:46 2013 @@ -112,6 +112,8 @@ Trunk (unreleased changes) BOOKKEEPER-673: Ledger length can be inaccurate in failure case (sijie via ivank) + BOOKKEEPER-688: NPE exception in PerChannelBookieClient (ivank via sijie) + hedwig-server: BOOKKEEPER-601: readahead cache size isn't updated correctly (sijie via fpj) 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=1534498&r1=1534497&r2=1534498&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 Tue Oct 22 05:35:46 2013 @@ -238,15 +238,20 @@ public class PerChannelBookieClient exte final int entrySize = toSend.readableBytes(); final CompletionKey completionKey = new CompletionKey(ledgerId, entryId); addCompletions.put(completionKey, new AddCompletion(cb, entrySize, ctx)); + final Channel c = channel; + if (c == null) { + errorOutAddKey(completionKey); + return; + } try { - ChannelFuture future = channel.write(r); + ChannelFuture future = c.write(r); future.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { if (future.isSuccess()) { if (LOG.isDebugEnabled()) { LOG.debug("Successfully wrote request for adding entry: " + entryId + " ledger-id: " + ledgerId - + " bookie: " + channel.getRemoteAddress() + " entry length: " + entrySize); + + " bookie: " + c.getRemoteAddress() + " entry length: " + entrySize); } // totalBytesOutstanding.addAndGet(entrySize); } else { @@ -270,15 +275,21 @@ public class PerChannelBookieClient exte BookieProtocol.CURRENT_PROTOCOL_VERSION, ledgerId, entryId, BookieProtocol.FLAG_DO_FENCING, masterKey); + final Channel c = channel; + if (c == null) { + errorOutReadKey(key); + return; + } + try { - ChannelFuture future = channel.write(r); + ChannelFuture future = c.write(r); future.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { if (future.isSuccess()) { if (LOG.isDebugEnabled()) { LOG.debug("Successfully wrote request {} to {}", - r, channel.getRemoteAddress()); + r, c.getRemoteAddress()); } } else { errorOutReadKey(key); @@ -299,15 +310,21 @@ public class PerChannelBookieClient exte BookieProtocol.CURRENT_PROTOCOL_VERSION, ledgerId, entryId, BookieProtocol.FLAG_NONE); + final Channel c = channel; + if (c == null) { + errorOutReadKey(key); + return; + } + try{ - ChannelFuture future = channel.write(r); + ChannelFuture future = c.write(r); future.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { if (future.isSuccess()) { if (LOG.isDebugEnabled()) { LOG.debug("Successfully wrote request {} to {}", - r, channel.getRemoteAddress()); + r, c.getRemoteAddress()); } } else { errorOutReadKey(key);