You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by in...@apache.org on 2018/04/09 16:19:30 UTC
[3/4] hadoop git commit: HDFS-13388. RequestHedgingProxyProvider
calls multiple configured NNs all the time. Contributed by Jinglun.
HDFS-13388. RequestHedgingProxyProvider calls multiple configured NNs all the time. Contributed by Jinglun.
(cherry picked from commit ac32b3576da4cc463dff85118163ccfff02215fc)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/7e692425
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/7e692425
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/7e692425
Branch: refs/heads/branch-2
Commit: 7e692425d538454abf69b07f6e8fd686a1171ac8
Parents: 14827da
Author: Inigo Goiri <in...@apache.org>
Authored: Mon Apr 9 09:16:48 2018 -0700
Committer: Inigo Goiri <in...@apache.org>
Committed: Mon Apr 9 09:18:42 2018 -0700
----------------------------------------------------------------------
.../ha/RequestHedgingProxyProvider.java | 3 ++
.../ha/TestRequestHedgingProxyProvider.java | 34 ++++++++++++++++++++
2 files changed, 37 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/7e692425/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/RequestHedgingProxyProvider.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/RequestHedgingProxyProvider.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/RequestHedgingProxyProvider.java
index 010e9e5..f34adce 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/RequestHedgingProxyProvider.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/RequestHedgingProxyProvider.java
@@ -78,6 +78,9 @@ public class RequestHedgingProxyProvider<T> extends
public Object
invoke(Object proxy, final Method method, final Object[] args)
throws Throwable {
+ if (currentUsedProxy != null) {
+ return method.invoke(currentUsedProxy.proxy, args);
+ }
Map<Future<Object>, ProxyInfo<T>> proxyMap = new HashMap<>();
int numAttempts = 0;
http://git-wip-us.apache.org/repos/asf/hadoop/blob/7e692425/hadoop-hdfs-project/hadoop-hdfs-client/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestRequestHedgingProxyProvider.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestRequestHedgingProxyProvider.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestRequestHedgingProxyProvider.java
index 65fbbf8..a8a5c6e 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestRequestHedgingProxyProvider.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestRequestHedgingProxyProvider.java
@@ -42,10 +42,13 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
+import static org.junit.Assert.assertEquals;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.mock;
import com.google.common.collect.Lists;
@@ -99,6 +102,37 @@ public class TestRequestHedgingProxyProvider {
}
@Test
+ public void testRequestNNAfterOneSuccess() throws Exception {
+ final AtomicInteger count = new AtomicInteger(0);
+ final ClientProtocol goodMock = mock(ClientProtocol.class);
+ when(goodMock.getStats()).thenAnswer(new Answer<long[]>() {
+ @Override
+ public long[] answer(InvocationOnMock invocation) throws Throwable {
+ count.incrementAndGet();
+ Thread.sleep(1000);
+ return new long[]{1};
+ }
+ });
+ final ClientProtocol badMock = mock(ClientProtocol.class);
+ when(badMock.getStats()).thenAnswer(new Answer<long[]>() {
+ @Override
+ public long[] answer(InvocationOnMock invocation) throws Throwable {
+ count.incrementAndGet();
+ throw new IOException("Bad mock !!");
+ }
+ });
+
+ RequestHedgingProxyProvider<ClientProtocol> provider =
+ new RequestHedgingProxyProvider<>(conf, nnUri, ClientProtocol.class,
+ createFactory(badMock, goodMock, goodMock, badMock));
+ ClientProtocol proxy = provider.getProxy().proxy;
+ proxy.getStats();
+ assertEquals(2, count.get());
+ proxy.getStats();
+ assertEquals(3, count.get());
+ }
+
+ @Test
public void testHedgingWhenOneIsSlow() throws Exception {
final ClientProtocol goodMock = Mockito.mock(ClientProtocol.class);
Mockito.when(goodMock.getStats()).thenAnswer(new Answer<long[]>() {
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org