[ 
https://issues.apache.org/jira/browse/MAPREDUCE-6761?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15428788#comment-15428788
 ] 

Kuhu Shukla commented on MAPREDUCE-6761:
----------------------------------------

bq. I had to change the type of the frameworkLoader to its' interface 
(Iterable), so I can mock it with mockito.
Not sure on how to handle this, but here are some changes we can make to the 
test.
Remove DummyClientProtocolProvider and use a ClientProtocolProvider with mock 
ClientProtocol in TestCluster.
{code}
  public ClientProtocolProvider getClientProtocolProvider() {
    return new ClientProtocolProvider() {
      @Override
      public ClientProtocol create(Configuration conf) throws IOException {
        return mock(ClientProtocol.class);
      }

      @Override
      public ClientProtocol create(InetSocketAddress addr, Configuration
          conf) throws IOException {
        return mock(ClientProtocol.class);
      }

      @Override
      public void close(ClientProtocol clientProtocol) throws IOException {

      }
    };
  }
{code}

and use this in the return/throw mock chain
{code}
 ClientProtocolProvider clientProtocolProvider1 = getClientProtocolProvider();
    ClientProtocolProvider clientProtocolProvider2 = 
getClientProtocolProvider();
    when(iterator.next()).thenReturn(clientProtocolProvider1)
        .thenThrow(new ServiceConfigurationError("Test error"))
        .thenReturn(clientProtocolProvider2);
......
assertThat("Unexpected type of clientProtocolProvider",
        testCluster.getClient(),
        instanceOf(ClientProtocol.class));
    // Check if we do not try to load the providers after a failure.
    verify(iterator, times(2)).next();
{code}

Also, I think we don't need the pom.xml change. I seem to be able to run this 
without it.
Hope this helps [~pvary].

> Regression when handling providers - invalid configuration 
> ServiceConfiguration causes Cluster initialization failure
> ---------------------------------------------------------------------------------------------------------------------
>
>                 Key: MAPREDUCE-6761
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-6761
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>          Components: mrv2
>    Affects Versions: 3.0.0-alpha2
>            Reporter: Peter Vary
>            Assignee: Peter Vary
>              Labels: supportability
>         Attachments: MAPREDUCE-6761.2.patch, MAPREDUCE-6761.3.patch, 
> MAPREDUCE-6761.patch
>
>
> When a rogue org.apache.hadoop.mapreduce.protocol.ClientProtocolProvider 
> defines a provider that is not on classpath, then the initialization is 
> failed with the following exception:
> java.util.ServiceConfigurationError: 
> org.apache.hadoop.mapreduce.protocol.ClientProtocolProvider: Provider 
> org.apache.hadoop.mapred.YarnClientProtocolProvider not found
>       at java.util.ServiceLoader.fail(ServiceLoader.java:239)
>       at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
>       at 
> java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:372)
>       at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
>       at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
>       at org.apache.hadoop.mapreduce.Cluster.initProviderList(Cluster.java:84)
>       at org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:114)
>       at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:108)
>       at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:101)
>       at org.apache.hadoop.mapred.JobClient.init(JobClient.java:477)
>       at org.apache.hadoop.mapred.JobClient.<init>(JobClient.java:455)
> This regression is caused by MAPREDUCE-6473



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: mapreduce-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: mapreduce-issues-h...@hadoop.apache.org

Reply via email to