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/17 20:08:19 UTC
hadoop git commit: YARN-8096. Wrong condition in
AmIpFilter#getProxyAddresses() to update the proxy IP list. Contributed by
Oleksandr Shevchenko.
Repository: hadoop
Updated Branches:
refs/heads/trunk a68b04370 -> db1bba857
YARN-8096. Wrong condition in AmIpFilter#getProxyAddresses() to update the proxy IP list. Contributed by Oleksandr Shevchenko.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/db1bba85
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/db1bba85
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/db1bba85
Branch: refs/heads/trunk
Commit: db1bba857a44d13db6df913b20767c2834da29aa
Parents: a68b043
Author: Inigo Goiri <in...@apache.org>
Authored: Tue Apr 17 13:08:01 2018 -0700
Committer: Inigo Goiri <in...@apache.org>
Committed: Tue Apr 17 13:08:01 2018 -0700
----------------------------------------------------------------------
.../server/webproxy/amfilter/AmIpFilter.java | 13 +++++--
.../server/webproxy/amfilter/TestAmFilter.java | 40 ++++++++++++++++++++
2 files changed, 50 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/db1bba85/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/amfilter/AmIpFilter.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/amfilter/AmIpFilter.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/amfilter/AmIpFilter.java
index ac4afa8..bd425a7 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/amfilter/AmIpFilter.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/amfilter/AmIpFilter.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.yarn.server.webproxy.amfilter;
import com.google.common.annotations.VisibleForTesting;
import org.apache.hadoop.classification.InterfaceAudience.Public;
+import org.apache.hadoop.util.Time;
import org.apache.hadoop.yarn.server.webproxy.ProxyUtils;
import org.apache.hadoop.yarn.server.webproxy.WebAppProxyServlet;
import org.slf4j.Logger;
@@ -44,6 +45,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
@Public
public class AmIpFilter implements Filter {
@@ -59,7 +61,7 @@ public class AmIpFilter implements Filter {
public static final String PROXY_URI_BASES_DELIMITER = ",";
private static final String PROXY_PATH = "/proxy";
//update the proxy IP list about every 5 min
- private static final long UPDATE_INTERVAL = 5 * 60 * 1000;
+ private static long updateInterval = TimeUnit.MINUTES.toMillis(5);
private String[] proxyHosts;
private Set<String> proxyAddresses = null;
@@ -99,9 +101,9 @@ public class AmIpFilter implements Filter {
}
protected Set<String> getProxyAddresses() throws ServletException {
- long now = System.currentTimeMillis();
+ long now = Time.monotonicNow();
synchronized(this) {
- if (proxyAddresses == null || (lastUpdate + UPDATE_INTERVAL) >= now) {
+ if (proxyAddresses == null || (lastUpdate + updateInterval) <= now) {
proxyAddresses = new HashSet<>();
for (String proxyHost : proxyHosts) {
try {
@@ -226,4 +228,9 @@ public class AmIpFilter implements Filter {
}
return isValid;
}
+
+ @VisibleForTesting
+ protected static void setUpdateInterval(long updateInterval) {
+ AmIpFilter.updateInterval = updateInterval;
+ }
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/db1bba85/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilter.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilter.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilter.java
index f775c6d..6eb4d48 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilter.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/test/java/org/apache/hadoop/yarn/server/webproxy/amfilter/TestAmFilter.java
@@ -49,7 +49,9 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
+import com.google.common.base.Supplier;
import org.apache.hadoop.http.TestHttpServer;
+import org.apache.hadoop.test.GenericTestUtils;
import org.apache.hadoop.yarn.server.webproxy.ProxyUtils;
import org.apache.hadoop.yarn.server.webproxy.WebAppProxyServlet;
import org.eclipse.jetty.server.Server;
@@ -179,6 +181,44 @@ public class TestAmFilter {
return server.getURI().toString() + servletPath;
}
+ @Test(timeout = 2000)
+ public void testProxyUpdate() throws Exception {
+ Map<String, String> params = new HashMap<>();
+ params.put(AmIpFilter.PROXY_HOSTS, proxyHost);
+ params.put(AmIpFilter.PROXY_URI_BASES, proxyUri);
+
+ FilterConfig conf = new DummyFilterConfig(params);
+ AmIpFilter filter = new AmIpFilter();
+ int updateInterval = 1000;
+ AmIpFilter.setUpdateInterval(updateInterval);
+ filter.init(conf);
+ filter.getProxyAddresses();
+
+ // check that the configuration was applied
+ assertTrue(filter.getProxyAddresses().contains("127.0.0.1"));
+
+ // change proxy configurations
+ params = new HashMap<>();
+ params.put(AmIpFilter.PROXY_HOSTS, "unknownhost");
+ params.put(AmIpFilter.PROXY_URI_BASES, proxyUri);
+ conf = new DummyFilterConfig(params);
+ filter.init(conf);
+
+ // configurations shouldn't be updated now
+ assertFalse(filter.getProxyAddresses().isEmpty());
+ // waiting for configuration update
+ GenericTestUtils.waitFor(new Supplier<Boolean>() {
+ @Override
+ public Boolean get() {
+ try {
+ return filter.getProxyAddresses().isEmpty();
+ } catch (ServletException e) {
+ return true;
+ }
+ }
+ }, 500, updateInterval);
+ }
+
/**
* Test AmIpFilter
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org