YARN-873. YARNClient.getApplicationReport(unknownAppId) returns a null report (Xuan Gong via bikas)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1506732 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
605fafb4c0
commit
ed6598791e
|
@ -740,6 +740,9 @@ Release 2.1.0-beta - 2013-07-02
|
|||
YARN-853. Fixed CapacityScheduler's maximum-am-resource-percent to properly
|
||||
work beyond refreshing queues. (Devaraj K via vinodkv)
|
||||
|
||||
YARN-873. YARNClient.getApplicationReport(unknownAppId) returns a null
|
||||
report (Xuan Gong via bikas)
|
||||
|
||||
BREAKDOWN OF HADOOP-8562/YARN-191 SUBTASKS AND RELATED JIRAS
|
||||
|
||||
YARN-158. Yarn creating package-info.java must not depend on sh.
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.hadoop.yarn.exceptions;
|
||||
|
||||
import org.apache.hadoop.yarn.api.ApplicationClientProtocol;
|
||||
import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest;
|
||||
|
||||
/**
|
||||
* This exception is thrown on
|
||||
* {@link ApplicationClientProtocol#getApplicationReport(GetApplicationReportRequest)} API
|
||||
* when the Application doesn't exist in RM
|
||||
*/
|
||||
public class ApplicationNotFoundException extends YarnException{
|
||||
|
||||
private static final long serialVersionUID = 8694408L;
|
||||
|
||||
public ApplicationNotFoundException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
public ApplicationNotFoundException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public ApplicationNotFoundException(String message,
|
||||
Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
|
@ -49,6 +49,7 @@ import org.apache.hadoop.yarn.api.records.NodeState;
|
|||
import org.apache.hadoop.yarn.api.records.Resource;
|
||||
import org.apache.hadoop.yarn.api.records.YarnApplicationState;
|
||||
import org.apache.hadoop.yarn.client.api.YarnClient;
|
||||
import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
|
||||
import org.apache.hadoop.yarn.util.Records;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
@ -108,6 +109,23 @@ public class TestYarnCLI {
|
|||
verify(sysOut, times(1)).println(isA(String.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetApplicationReportException() throws Exception {
|
||||
ApplicationCLI cli = createAndGetAppCLI();
|
||||
ApplicationId applicationId = ApplicationId.newInstance(1234, 5);
|
||||
when(client.getApplicationReport(any(ApplicationId.class))).thenThrow(
|
||||
new ApplicationNotFoundException("Application with id '"
|
||||
+ applicationId + "' doesn't exist in RM."));
|
||||
try {
|
||||
cli.run(new String[] { "-status", applicationId.toString() });
|
||||
Assert.fail();
|
||||
} catch (Exception ex) {
|
||||
Assert.assertTrue(ex instanceof ApplicationNotFoundException);
|
||||
Assert.assertEquals("Application with id '" + applicationId
|
||||
+ "' doesn't exist in RM.", ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetApplications() throws Exception {
|
||||
ApplicationCLI cli = createAndGetAppCLI();
|
||||
|
|
|
@ -75,6 +75,7 @@ import org.apache.hadoop.yarn.api.records.QueueInfo;
|
|||
import org.apache.hadoop.yarn.api.records.Resource;
|
||||
import org.apache.hadoop.yarn.api.records.YarnClusterMetrics;
|
||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||
import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
|
||||
import org.apache.hadoop.yarn.exceptions.YarnException;
|
||||
import org.apache.hadoop.yarn.factories.RecordFactory;
|
||||
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
|
||||
|
@ -218,7 +219,7 @@ public class ClientRMService extends AbstractService implements
|
|||
|
||||
/**
|
||||
* It gives response which includes application report if the application
|
||||
* present otherwise gives response with application report as null.
|
||||
* present otherwise throws ApplicationNotFoundException.
|
||||
*/
|
||||
@Override
|
||||
public GetApplicationReportResponse getApplicationReport(
|
||||
|
@ -235,10 +236,10 @@ public class ClientRMService extends AbstractService implements
|
|||
|
||||
RMApp application = this.rmContext.getRMApps().get(applicationId);
|
||||
if (application == null) {
|
||||
// If the RM doesn't have the application, provide the response with
|
||||
// application report as null and let the clients to handle.
|
||||
return recordFactory
|
||||
.newRecordInstance(GetApplicationReportResponse.class);
|
||||
// If the RM doesn't have the application, throw
|
||||
// ApplicationNotFoundException and let client to handle.
|
||||
throw new ApplicationNotFoundException("Application with id '"
|
||||
+ applicationId + "' doesn't exist in RM.");
|
||||
}
|
||||
|
||||
boolean allowAccess = checkAccess(callerUGI, application.getUser(),
|
||||
|
|
|
@ -66,6 +66,7 @@ import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
|||
import org.apache.hadoop.yarn.event.Dispatcher;
|
||||
import org.apache.hadoop.yarn.event.Event;
|
||||
import org.apache.hadoop.yarn.event.EventHandler;
|
||||
import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
|
||||
import org.apache.hadoop.yarn.exceptions.YarnException;
|
||||
import org.apache.hadoop.yarn.factories.RecordFactory;
|
||||
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
|
||||
|
@ -186,10 +187,14 @@ public class TestClientRMService {
|
|||
GetApplicationReportRequest request = recordFactory
|
||||
.newRecordInstance(GetApplicationReportRequest.class);
|
||||
request.setApplicationId(ApplicationId.newInstance(0, 0));
|
||||
GetApplicationReportResponse applicationReport = rmService
|
||||
.getApplicationReport(request);
|
||||
Assert.assertNull("It should return null as application report for absent application.",
|
||||
applicationReport.getApplicationReport());
|
||||
try {
|
||||
rmService.getApplicationReport(request);
|
||||
Assert.fail();
|
||||
} catch (ApplicationNotFoundException ex) {
|
||||
Assert.assertEquals(ex.getMessage(),
|
||||
"Application with id '" + request.getApplicationId()
|
||||
+ "' doesn't exist in RM.");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
Loading…
Reference in New Issue