YARN-9782. Avoid DNS resolution while running SLS. Contributed by Abhishek Modi.

This commit is contained in:
Abhishek Modi 2019-10-04 14:45:10 +05:30
parent b23bdaf085
commit 2478cbafe6
4 changed files with 70 additions and 1 deletions

View File

@ -22,6 +22,7 @@
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.Reader; import java.io.Reader;
import java.security.Security;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
@ -150,6 +151,10 @@ public enum TraceType {
SLS, RUMEN, SYNTH SLS, RUMEN, SYNTH
} }
public static final String NETWORK_CACHE_TTL = "networkaddress.cache.ttl";
public static final String NETWORK_NEGATIVE_CACHE_TTL =
"networkaddress.cache.negative.ttl";
private TraceType inputType; private TraceType inputType;
private SynthTraceJobProducer stjp; private SynthTraceJobProducer stjp;
@ -241,6 +246,9 @@ public void setSimulationParams(TraceType inType, String[] inTraces,
public void start() throws IOException, ClassNotFoundException, YarnException, public void start() throws IOException, ClassNotFoundException, YarnException,
InterruptedException { InterruptedException {
enableDNSCaching(getConf());
// start resource manager // start resource manager
startRM(); startRM();
// start node managers // start node managers
@ -260,6 +268,23 @@ public void start() throws IOException, ClassNotFoundException, YarnException,
runner.start(); runner.start();
} }
/**
* Enables DNS Caching based on config. If DNS caching is enabled, then set
* the DNS cache to infinite time. Since in SLS random nodes are added, DNS
* resolution can take significant time which can cause erroneous results.
* For more details, check <a href=
* "https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.html">
* Java Networking Properties</a>
* @param conf Configuration object.
*/
static void enableDNSCaching(Configuration conf) {
if (conf.getBoolean(SLSConfiguration.DNS_CACHING_ENABLED,
SLSConfiguration.DNS_CACHING_ENABLED_DEFAULT)) {
Security.setProperty(NETWORK_CACHE_TTL, "-1");
Security.setProperty(NETWORK_NEGATIVE_CACHE_TTL, "-1");
}
}
private void startRM() throws ClassNotFoundException, YarnException { private void startRM() throws ClassNotFoundException, YarnException {
Configuration rmConf = new YarnConfiguration(getConf()); Configuration rmConf = new YarnConfiguration(getConf());
String schedulerClass = rmConf.get(YarnConfiguration.RM_SCHEDULER); String schedulerClass = rmConf.get(YarnConfiguration.RM_SCHEDULER);

View File

@ -28,6 +28,9 @@
public class SLSConfiguration { public class SLSConfiguration {
// sls // sls
public static final String PREFIX = "yarn.sls."; public static final String PREFIX = "yarn.sls.";
public static final String DNS_CACHING_ENABLED = PREFIX
+ "dns.caching.enabled";
public static final boolean DNS_CACHING_ENABLED_DEFAULT = false;
// runner // runner
public static final String RUNNER_PREFIX = PREFIX + "runner."; public static final String RUNNER_PREFIX = PREFIX + "runner.";
public static final String RUNNER_POOL_SIZE = RUNNER_PREFIX + "pool.size"; public static final String RUNNER_POOL_SIZE = RUNNER_PREFIX + "pool.size";

View File

@ -64,7 +64,9 @@ public abstract class BaseSLSRunnerTest {
@After @After
public void tearDown() throws InterruptedException { public void tearDown() throws InterruptedException {
sls.stop(); if (sls != null) {
sls.stop();
}
} }
public void runSLS(Configuration conf, long timeout) throws Exception { public void runSLS(Configuration conf, long timeout) throws Exception {

View File

@ -22,14 +22,18 @@
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler;
import org.apache.hadoop.yarn.sls.conf.SLSConfiguration;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.junit.runners.Parameterized; import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.*; import org.junit.runners.Parameterized.*;
import java.security.Security;
import java.util.*; import java.util.*;
import static org.junit.Assert.assertEquals;
/** /**
* This test performs simple runs of the SLS with different trace types and * This test performs simple runs of the SLS with different trace types and
* schedulers. * schedulers.
@ -86,4 +90,39 @@ public void testSimulatorRunning() throws Exception {
runSLS(conf, timeTillShutdownInsec); runSLS(conf, timeTillShutdownInsec);
} }
/**
* Test to check whether caching is enabled based on config.
*/
@Test
public void testEnableCaching() {
String networkCacheDefault = Security.getProperty(
SLSRunner.NETWORK_CACHE_TTL);
String networkNegativeCacheDefault =
Security.getProperty(SLSRunner.NETWORK_NEGATIVE_CACHE_TTL);
try {
Configuration conf = new Configuration(false);
// check when dns caching is disabled
conf.setBoolean(SLSConfiguration.DNS_CACHING_ENABLED, false);
SLSRunner.enableDNSCaching(conf);
assertEquals(networkCacheDefault,
Security.getProperty(SLSRunner.NETWORK_CACHE_TTL));
assertEquals(networkNegativeCacheDefault,
Security.getProperty(SLSRunner.NETWORK_NEGATIVE_CACHE_TTL));
// check when dns caching is enabled
conf.setBoolean(SLSConfiguration.DNS_CACHING_ENABLED, true);
SLSRunner.enableDNSCaching(conf);
assertEquals("-1",
Security.getProperty(SLSRunner.NETWORK_CACHE_TTL));
assertEquals("-1",
Security.getProperty(SLSRunner.NETWORK_NEGATIVE_CACHE_TTL));
} finally {
// set security settings back to default
Security.setProperty(SLSRunner.NETWORK_CACHE_TTL,
String.valueOf(networkCacheDefault));
Security.setProperty(SLSRunner.NETWORK_NEGATIVE_CACHE_TTL,
String.valueOf(networkNegativeCacheDefault));
}
}
} }