Updated Branches: refs/heads/cassandra-1.1 112ce0c69 -> a846cd659
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/a846cd65 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a846cd65 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a846cd65 Branch: refs/heads/cassandra-1.1 Commit: a846cd659ee1f3f1adcfc9dbf40e63c05ea8cde2 Parents: 112ce0c Author: Vijay Parthasarathy <[email protected]> Authored: Mon Jun 25 18:41:22 2012 -0700 Committer: Vijay Parthasarathy <[email protected]> Committed: Mon Jun 25 18:41:22 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/a846cd65/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 9f7b0cf..350a13d 100644 --- a/src/java/org/apache/cassandra/thrift/CustomTHsHaServer.java +++ b/src/java/org/apache/cassandra/thrift/CustomTHsHaServer.java @@ -177,6 +177,13 @@ public class CustomTHsHaServer extends TNonblockingServer { select(); } + } + catch (Throwable t) + { + LOGGER.error("Uncaught Exception: ", t); + } + finally + { try { selector.close(); // CASSANDRA-3867 @@ -186,10 +193,6 @@ public class CustomTHsHaServer extends TNonblockingServer // ignore this exception. } } - catch (Throwable t) - { - LOGGER.error("Uncaught Exception: ", t); - } } private void select() throws InterruptedException, IOException @@ -201,21 +204,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();
