You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by nk...@apache.org on 2014/08/29 14:36:45 UTC
git commit: HBASE-11851 RpcClient can try to close a connection not
ready to close
Repository: hbase
Updated Branches:
refs/heads/master beeb540f6 -> 8c0e5dca7
HBASE-11851 RpcClient can try to close a connection not ready to close
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/8c0e5dca
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8c0e5dca
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8c0e5dca
Branch: refs/heads/master
Commit: 8c0e5dca75955ad948d706d8f4f849615501eaeb
Parents: beeb540
Author: Nicolas Liochon <nk...@gmail.com>
Authored: Fri Aug 29 14:35:57 2014 +0200
Committer: Nicolas Liochon <nk...@gmail.com>
Committed: Fri Aug 29 14:35:57 2014 +0200
----------------------------------------------------------------------
.../org/apache/hadoop/hbase/ipc/RpcClient.java | 52 +++++++++-----------
1 file changed, 24 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/8c0e5dca/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java
index 0262462..369b1f5 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RpcClient.java
@@ -732,39 +732,35 @@ public class RpcClient {
// beware of the concurrent access to the calls list: we can add calls, but as well
// remove them.
long waitUntil = EnvironmentEdgeManager.currentTimeMillis() + minIdleTimeBeforeClose;
- while (!shouldCloseConnection.get() && running.get() &&
- EnvironmentEdgeManager.currentTimeMillis() < waitUntil && calls.isEmpty()) {
- wait(Math.min(minIdleTimeBeforeClose, 1000));
- }
- if (shouldCloseConnection.get()) {
- return false;
- }
+ while (true) {
+ if (shouldCloseConnection.get()) {
+ return false;
+ }
- if (!running.get()) {
- markClosed(new IOException("stopped with " + calls.size() + " pending request(s)"));
- return false;
- }
+ if (!running.get()) {
+ markClosed(new IOException("stopped with " + calls.size() + " pending request(s)"));
+ return false;
+ }
- if (!calls.isEmpty()) {
- // shouldCloseConnection can be set to true by a parallel thread here. The caller
- // will need to check anyway.
- return true;
- }
+ if (!calls.isEmpty()) {
+ // shouldCloseConnection can be set to true by a parallel thread here. The caller
+ // will need to check anyway.
+ return true;
+ }
- if (EnvironmentEdgeManager.currentTimeMillis() >= waitUntil) {
- // Connection is idle.
- // We expect the number of calls to be zero here, but actually someone can
- // adds a call at the any moment, as there is no synchronization between this task
- // and adding new calls. It's not a big issue, but it will get an exception.
- markClosed(new IOException(
- "idle connection closed with " + calls.size() + " pending request(s)"));
- return false;
- }
+ if (EnvironmentEdgeManager.currentTimeMillis() >= waitUntil) {
+ // Connection is idle.
+ // We expect the number of calls to be zero here, but actually someone can
+ // adds a call at the any moment, as there is no synchronization between this task
+ // and adding new calls. It's not a big issue, but it will get an exception.
+ markClosed(new IOException(
+ "idle connection closed with " + calls.size() + " pending request(s)"));
+ return false;
+ }
- // We can get here if we received a notification that there is some work to do but
- // the work was cancelled. As we're not idle we continue to wait.
- return false;
+ wait(Math.min(minIdleTimeBeforeClose, 1000));
+ }
}
public InetSocketAddress getRemoteAddress() {