Repository: hadoop
Updated Branches:
refs/heads/branch-2.7 08c02199f -> 3f3829e3a
HADOOP-12464. Interrupted client may try to fail-over and retry. Contributed by
Kihwal Lee.
(cherry picked from commit 6144e0137bb51bd04b46ea5ce42c59c2d4f7657d)
Conflicts:
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/retry/RetryInvocationHandler.java
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/3f3829e3
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/3f3829e3
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/3f3829e3
Branch: refs/heads/branch-2.7
Commit: 3f3829e3a868f50c7129b0d335ea5ff285765e05
Parents: 08c0219
Author: Kihwal Lee <[email protected]>
Authored: Mon Oct 19 11:00:48 2015 -0500
Committer: Kihwal Lee <[email protected]>
Committed: Mon Oct 19 11:00:48 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/3f3829e3/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 46c1f16..54ee43a 100644
--- a/hadoop-common-project/hadoop-common/CHANGES.txt
+++ b/hadoop-common-project/hadoop-common/CHANGES.txt
@@ -49,6 +49,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/3f3829e3/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 5a4e638..5d02745 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
@@ -103,6 +103,10 @@ public class RetryInvocationHandler<T> implements
RpcInvocationHandler {
hasMadeASuccessfulCall = true;
return ret;
} catch (Exception e) {
+ if (Thread.currentThread().isInterrupted()) {
+ // If interrupted, do not retry.
+ throw e;
+ }
boolean isIdempotentOrAtMostOnce = proxyProvider.getInterface()
.getMethod(method.getName(), method.getParameterTypes())
.isAnnotationPresent(Idempotent.class);
http://git-wip-us.apache.org/repos/asf/hadoop/blob/3f3829e3/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 fc4855e..99b0b62 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
@@ -1460,22 +1460,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();