Repository: hadoop Updated Branches: refs/heads/trunk 151eab2a1 -> 6144e0137
HADOOP-12464. Interrupted client may try to fail-over and retry. Contributed by Kihwal Lee. Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/6144e013 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/6144e013 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/6144e013 Branch: refs/heads/trunk Commit: 6144e0137bb51bd04b46ea5ce42c59c2d4f7657d Parents: 151eab2 Author: Kihwal Lee <[email protected]> Authored: Mon Oct 19 10:52:29 2015 -0500 Committer: Kihwal Lee <[email protected]> Committed: Mon Oct 19 10:52:29 2015 -0500 ---------------------------------------------------------------------- hadoop-common-project/hadoop-common/CHANGES.txt | 2 ++ .../apache/hadoop/io/retry/RetryInvocationHandler.java | 4 ++++ .../src/main/java/org/apache/hadoop/ipc/Client.java | 10 ++-------- 3 files changed, 8 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/6144e013/hadoop-common-project/hadoop-common/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 1db02d2..8f40350 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -1365,6 +1365,8 @@ Release 2.7.2 - UNRELEASED HADOOP-12465. Incorrect javadoc in WritableUtils.java. (Jagadesh Kiran N via aajisaka) + HADOOP-12464. Interrupted client may try to fail-over and retry (kihwal) + Release 2.7.1 - 2015-07-06 INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/6144e013/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/retry/RetryInvocationHandler.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/retry/RetryInvocationHandler.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/retry/RetryInvocationHandler.java index 9256356..6864d5d 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/retry/RetryInvocationHandler.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/retry/RetryInvocationHandler.java @@ -104,6 +104,10 @@ public class RetryInvocationHandler<T> implements RpcInvocationHandler { hasMadeASuccessfulCall = true; return ret; } catch (Exception ex) { + if (Thread.currentThread().isInterrupted()) { + // If interrupted, do not retry. + throw ex; + } boolean isIdempotentOrAtMostOnce = proxyProvider.getInterface() .getMethod(method.getName(), method.getParameterTypes()) .isAnnotationPresent(Idempotent.class); http://git-wip-us.apache.org/repos/asf/hadoop/blob/6144e013/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java index 7b80740..f067d59 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java @@ -1428,22 +1428,16 @@ public class Client { throw new IOException(e); } - boolean interrupted = false; synchronized (call) { while (!call.done) { try { call.wait(); // wait for the result } catch (InterruptedException ie) { - // save the fact that we were interrupted - interrupted = true; + Thread.currentThread().interrupt(); + throw new InterruptedIOException("Call interrupted"); } } - if (interrupted) { - // set the interrupt flag now that we are done waiting - Thread.currentThread().interrupt(); - } - if (call.error != null) { if (call.error instanceof RemoteException) { call.error.fillInStackTrace();
