You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-issues@hadoop.apache.org by "fanshilun (Jira)" <ji...@apache.org> on 2022/11/02 10:50:00 UTC

[jira] [Created] (YARN-11367) [Federation] Fix DefaultRequestInterceptorREST Client NPE

fanshilun created YARN-11367:
--------------------------------

             Summary: [Federation] Fix DefaultRequestInterceptorREST Client NPE
                 Key: YARN-11367
                 URL: https://issues.apache.org/jira/browse/YARN-11367
             Project: Hadoop YARN
          Issue Type: Bug
          Components: federation, router
    Affects Versions: 3.4.0
            Reporter: fanshilun
            Assignee: fanshilun


YARN-8529. Add timeout to RouterWebServiceUtil#invokeRMWebService.

This JIRA only considers the case of Create InterceptorChain, and initializes the client in the DefaultRequestInterceptorREST#init method
{code:java}
@Override
public void init(String user) {
  webAppAddress = WebAppUtils.getRMWebAppURLWithScheme(getConf());
  client = RouterWebServiceUtil.createJerseyClient(getConf());
} {code}
However, FederationInterceptorREST#createInterceptorForSubCluster will create DefaultRequestInterceptorREST of different SubClusters. This part does not initialize the Client, resulting in NPE when calling.
{code:java}
private DefaultRequestInterceptorREST createInterceptorForSubCluster(
    SubClusterId subClusterId, String webAppAddress) {

  final Configuration conf = this.getConf();

  String interceptorClassName = conf.get(
      YarnConfiguration.ROUTER_WEBAPP_DEFAULT_INTERCEPTOR_CLASS,
      YarnConfiguration.DEFAULT_ROUTER_WEBAPP_DEFAULT_INTERCEPTOR_CLASS);
  DefaultRequestInterceptorREST interceptorInstance = null;
  try {
    Class<?> interceptorClass = conf.getClassByName(interceptorClassName);
    if (DefaultRequestInterceptorREST.class
        .isAssignableFrom(interceptorClass)) {
      interceptorInstance = (DefaultRequestInterceptorREST) ReflectionUtils
          .newInstance(interceptorClass, conf);

    } else {
      throw new YarnRuntimeException(
          "Class: " + interceptorClassName + " not instance of "
              + DefaultRequestInterceptorREST.class.getCanonicalName());
    }
  } catch (ClassNotFoundException e) {
    throw new YarnRuntimeException(
        "Could not instantiate ApplicationMasterRequestInterceptor: "
            + interceptorClassName,
        e);
  }

  String webAppAddresswithScheme =
      WebAppUtils.getHttpSchemePrefix(this.getConf()) + webAppAddress;
  interceptorInstance.setWebAppAddress(webAppAddresswithScheme);
  interceptorInstance.setSubClusterId(subClusterId);
  // Missing initialization DefaultRequestInterceptorREST#Client Code  
  interceptors.put(subClusterId, interceptorInstance);
  return interceptorInstance;
} {code}
 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: yarn-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: yarn-issues-help@hadoop.apache.org