Updated Branches: refs/heads/trunk 17f64320d -> 0240cc9df
hsha server may stop responding and will not close selectors patch by Viktor Kuzmin; reviewed by Vijay for CASSANDRA-4370 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/0240cc9d Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/0240cc9d Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/0240cc9d Branch: refs/heads/trunk Commit: 0240cc9dfaac62660af61bfee2df42f71a1d4b3e Parents: 17f6432 Author: Vijay Parthasarathy <[email protected]> Authored: Mon Jun 25 18:38:03 2012 -0700 Committer: Vijay Parthasarathy <[email protected]> Committed: Mon Jun 25 18:38:03 2012 -0700 ---------------------------------------------------------------------- .../apache/cassandra/thrift/CustomTHsHaServer.java | 44 +++++++++----- 1 files changed, 28 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/0240cc9d/src/java/org/apache/cassandra/thrift/CustomTHsHaServer.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/thrift/CustomTHsHaServer.java b/src/java/org/apache/cassandra/thrift/CustomTHsHaServer.java index 9c307b3..c6517a2 100644 --- a/src/java/org/apache/cassandra/thrift/CustomTHsHaServer.java +++ b/src/java/org/apache/cassandra/thrift/CustomTHsHaServer.java @@ -173,6 +173,13 @@ public class CustomTHsHaServer extends TNonblockingServer { select(); } + } + catch (Throwable t) + { + LOGGER.error("Uncaught Exception: ", t); + } + finally + { try { selector.close(); // CASSANDRA-3867 @@ -182,10 +189,6 @@ public class CustomTHsHaServer extends TNonblockingServer // ignore this exception. } } - catch (Throwable t) - { - LOGGER.error("Uncaught Exception: ", t); - } } private void select() throws InterruptedException, IOException @@ -197,21 +200,30 @@ public class CustomTHsHaServer extends TNonblockingServer { SelectionKey key = keyIterator.next(); keyIterator.remove(); - if (!key.isValid()) + + try { - // if invalid cleanup. + if (!key.isValid()) + { + // if invalid cleanup. + cleanupSelectionkey(key); + continue; + } + + if (key.isAcceptable()) + handleAccept(); + if (key.isReadable()) + handleRead(key); + else if (key.isWritable()) + handleWrite(key); + else + LOGGER.debug("Unexpected state " + key.interestOps()); + } + catch (Exception io) + { + // just ignore (?) cleanupSelectionkey(key); - continue; } - - if (key.isAcceptable()) - handleAccept(); - if (key.isReadable()) - handleRead(key); - else if (key.isWritable()) - handleWrite(key); - else - LOGGER.debug("Unexpected state " + key.interestOps()); } // process the changes which are inserted after completion. processInterestChanges();
