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
|
YARN-853. Fixed CapacityScheduler's maximum-am-resource-percent to properly
|
||||||
work beyond refreshing queues. (Devaraj K via vinodkv)
|
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
|
BREAKDOWN OF HADOOP-8562/YARN-191 SUBTASKS AND RELATED JIRAS
|
||||||
|
|
||||||
YARN-158. Yarn creating package-info.java must not depend on sh.
|
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.Resource;
|
||||||
import org.apache.hadoop.yarn.api.records.YarnApplicationState;
|
import org.apache.hadoop.yarn.api.records.YarnApplicationState;
|
||||||
import org.apache.hadoop.yarn.client.api.YarnClient;
|
import org.apache.hadoop.yarn.client.api.YarnClient;
|
||||||
|
import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
|
||||||
import org.apache.hadoop.yarn.util.Records;
|
import org.apache.hadoop.yarn.util.Records;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
@ -108,6 +109,23 @@ public class TestYarnCLI {
|
||||||
verify(sysOut, times(1)).println(isA(String.class));
|
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
|
@Test
|
||||||
public void testGetApplications() throws Exception {
|
public void testGetApplications() throws Exception {
|
||||||
ApplicationCLI cli = createAndGetAppCLI();
|
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.Resource;
|
||||||
import org.apache.hadoop.yarn.api.records.YarnClusterMetrics;
|
import org.apache.hadoop.yarn.api.records.YarnClusterMetrics;
|
||||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
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.exceptions.YarnException;
|
||||||
import org.apache.hadoop.yarn.factories.RecordFactory;
|
import org.apache.hadoop.yarn.factories.RecordFactory;
|
||||||
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
|
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
|
* It gives response which includes application report if the application
|
||||||
* present otherwise gives response with application report as null.
|
* present otherwise throws ApplicationNotFoundException.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public GetApplicationReportResponse getApplicationReport(
|
public GetApplicationReportResponse getApplicationReport(
|
||||||
|
@ -235,10 +236,10 @@ public class ClientRMService extends AbstractService implements
|
||||||
|
|
||||||
RMApp application = this.rmContext.getRMApps().get(applicationId);
|
RMApp application = this.rmContext.getRMApps().get(applicationId);
|
||||||
if (application == null) {
|
if (application == null) {
|
||||||
// If the RM doesn't have the application, provide the response with
|
// If the RM doesn't have the application, throw
|
||||||
// application report as null and let the clients to handle.
|
// ApplicationNotFoundException and let client to handle.
|
||||||
return recordFactory
|
throw new ApplicationNotFoundException("Application with id '"
|
||||||
.newRecordInstance(GetApplicationReportResponse.class);
|
+ applicationId + "' doesn't exist in RM.");
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean allowAccess = checkAccess(callerUGI, application.getUser(),
|
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.Dispatcher;
|
||||||
import org.apache.hadoop.yarn.event.Event;
|
import org.apache.hadoop.yarn.event.Event;
|
||||||
import org.apache.hadoop.yarn.event.EventHandler;
|
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.exceptions.YarnException;
|
||||||
import org.apache.hadoop.yarn.factories.RecordFactory;
|
import org.apache.hadoop.yarn.factories.RecordFactory;
|
||||||
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
|
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
|
||||||
|
@ -186,10 +187,14 @@ public class TestClientRMService {
|
||||||
GetApplicationReportRequest request = recordFactory
|
GetApplicationReportRequest request = recordFactory
|
||||||
.newRecordInstance(GetApplicationReportRequest.class);
|
.newRecordInstance(GetApplicationReportRequest.class);
|
||||||
request.setApplicationId(ApplicationId.newInstance(0, 0));
|
request.setApplicationId(ApplicationId.newInstance(0, 0));
|
||||||
GetApplicationReportResponse applicationReport = rmService
|
try {
|
||||||
.getApplicationReport(request);
|
rmService.getApplicationReport(request);
|
||||||
Assert.assertNull("It should return null as application report for absent application.",
|
Assert.fail();
|
||||||
applicationReport.getApplicationReport());
|
} catch (ApplicationNotFoundException ex) {
|
||||||
|
Assert.assertEquals(ex.getMessage(),
|
||||||
|
"Application with id '" + request.getApplicationId()
|
||||||
|
+ "' doesn't exist in RM.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue