YARN-8215. ATS v2 returns invalid YARN_CONTAINER_ALLOCATED_HOST_HTTP_ADDRESS from NM. Contributed by Rohith Sharma K S.

(cherry picked from commit 7fc09c4f72)
This commit is contained in:
Sunil G 2018-04-27 10:33:42 +05:30 committed by Rohith Sharma K S
parent ab2b4290a0
commit a91d5c7e2c
2 changed files with 10 additions and 6 deletions

View File

@ -24,6 +24,8 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
@ -79,6 +81,7 @@ public class NMTimelinePublisher extends CompositeService {
private NodeId nodeId; private NodeId nodeId;
private String httpAddress; private String httpAddress;
private String httpPort;
private UserGroupInformation nmLoginUGI; private UserGroupInformation nmLoginUGI;
@ -100,6 +103,12 @@ public class NMTimelinePublisher extends CompositeService {
UserGroupInformation.getLoginUser() : UserGroupInformation.getLoginUser() :
UserGroupInformation.getCurrentUser(); UserGroupInformation.getCurrentUser();
LOG.info("Initialized NMTimelinePublisher UGI to " + nmLoginUGI); LOG.info("Initialized NMTimelinePublisher UGI to " + nmLoginUGI);
String webAppURLWithoutScheme =
WebAppUtils.getNMWebAppURLWithoutScheme(conf);
if (webAppURLWithoutScheme.contains(":")) {
httpPort = webAppURLWithoutScheme.split(":")[1];
}
super.serviceInit(conf); super.serviceInit(conf);
} }
@ -109,6 +118,7 @@ public class NMTimelinePublisher extends CompositeService {
// context will be updated after containerManagerImpl is started // context will be updated after containerManagerImpl is started
// hence NMMetricsPublisher is added subservice of containerManagerImpl // hence NMMetricsPublisher is added subservice of containerManagerImpl
this.nodeId = context.getNodeId(); this.nodeId = context.getNodeId();
this.httpAddress = nodeId.getHost() + ":" + httpPort;
} }
@Override @Override
@ -330,11 +340,6 @@ public class NMTimelinePublisher extends CompositeService {
public void publishContainerEvent(ContainerEvent event) { public void publishContainerEvent(ContainerEvent event) {
// publish only when the desired event is received // publish only when the desired event is received
if (this.httpAddress == null) {
// update httpAddress for first time. When this service started,
// web server will not be started.
this.httpAddress = nodeId.getHost() + ":" + context.getHttpPort();
}
switch (event.getType()) { switch (event.getType()) {
case INIT_CONTAINER: case INIT_CONTAINER:
publishContainerCreatedEvent(event); publishContainerCreatedEvent(event);

View File

@ -59,7 +59,6 @@ public class TestNMTimelinePublisher {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
final DummyTimelineClient timelineClient = new DummyTimelineClient(null); final DummyTimelineClient timelineClient = new DummyTimelineClient(null);
when(context.getNodeId()).thenReturn(NodeId.newInstance("localhost", 0)); when(context.getNodeId()).thenReturn(NodeId.newInstance("localhost", 0));
when(context.getHttpPort()).thenReturn(0);
Configuration conf = new Configuration(); Configuration conf = new Configuration();
conf.setBoolean(YarnConfiguration.TIMELINE_SERVICE_ENABLED, true); conf.setBoolean(YarnConfiguration.TIMELINE_SERVICE_ENABLED, true);