YARN-2546. Made REST API for application creation/submission use numeric and boolean types instead of the string of them. Contributed by Varun Vasudev.
This commit is contained in:
parent
c86674a3a4
commit
72b0881ca6
|
@ -444,6 +444,9 @@ Release 2.6.0 - UNRELEASED
|
|||
|
||||
YARN-2596. TestWorkPreservingRMRestart fails with FairScheduler. (kasha)
|
||||
|
||||
YARN-2546. Made REST API for application creation/submission use numeric and
|
||||
boolean types instead of the string of them. (Varun Vasudev via zjshen)
|
||||
|
||||
Release 2.5.1 - 2014-09-05
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -22,62 +22,61 @@ import com.google.inject.Singleton;
|
|||
import com.sun.jersey.api.json.JSONConfiguration;
|
||||
import com.sun.jersey.api.json.JSONJAXBContext;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
import javax.ws.rs.ext.ContextResolver;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
import javax.xml.bind.JAXBContext;
|
||||
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.UserInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppAttemptInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppAttemptsInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ApplicationStatisticsInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppsInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerQueueInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerQueueInfoList;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterMetricsInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.StatisticsItemInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.FifoSchedulerInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodesInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.UserMetricsInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.UsersInfo;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.*;
|
||||
import org.apache.hadoop.yarn.webapp.RemoteExceptionData;
|
||||
|
||||
@Singleton
|
||||
@Provider
|
||||
public class JAXBContextResolver implements ContextResolver<JAXBContext> {
|
||||
|
||||
private JAXBContext context;
|
||||
private final Set<Class> types;
|
||||
|
||||
// you have to specify all the dao classes here
|
||||
private final Class[] cTypes = { AppInfo.class, AppAttemptInfo.class,
|
||||
AppAttemptsInfo.class, ClusterInfo.class,
|
||||
CapacitySchedulerQueueInfo.class, FifoSchedulerInfo.class,
|
||||
SchedulerTypeInfo.class, NodeInfo.class, UserMetricsInfo.class,
|
||||
CapacitySchedulerInfo.class, ClusterMetricsInfo.class,
|
||||
SchedulerInfo.class, AppsInfo.class, NodesInfo.class,
|
||||
RemoteExceptionData.class, CapacitySchedulerQueueInfoList.class,
|
||||
ResourceInfo.class, UsersInfo.class, UserInfo.class,
|
||||
ApplicationStatisticsInfo.class, StatisticsItemInfo.class};
|
||||
private final Map<Class, JAXBContext> typesContextMap;
|
||||
|
||||
public JAXBContextResolver() throws Exception {
|
||||
this.types = new HashSet<Class>(Arrays.asList(cTypes));
|
||||
this.context = new JSONJAXBContext(JSONConfiguration.natural()
|
||||
.rootUnwrapping(false).build(), cTypes);
|
||||
|
||||
JAXBContext context;
|
||||
JAXBContext unWrappedRootContext;
|
||||
|
||||
// you have to specify all the dao classes here
|
||||
final Class[] cTypes =
|
||||
{ AppInfo.class, AppAttemptInfo.class, AppAttemptsInfo.class,
|
||||
ClusterInfo.class, CapacitySchedulerQueueInfo.class,
|
||||
FifoSchedulerInfo.class, SchedulerTypeInfo.class, NodeInfo.class,
|
||||
UserMetricsInfo.class, CapacitySchedulerInfo.class,
|
||||
ClusterMetricsInfo.class, SchedulerInfo.class, AppsInfo.class,
|
||||
NodesInfo.class, RemoteExceptionData.class,
|
||||
CapacitySchedulerQueueInfoList.class, ResourceInfo.class,
|
||||
UsersInfo.class, UserInfo.class, ApplicationStatisticsInfo.class,
|
||||
StatisticsItemInfo.class };
|
||||
// these dao classes need root unwrapping
|
||||
final Class[] rootUnwrappedTypes =
|
||||
{ NewApplication.class, ApplicationSubmissionContextInfo.class,
|
||||
ContainerLaunchContextInfo.class, LocalResourceInfo.class,
|
||||
DelegationToken.class };
|
||||
|
||||
this.typesContextMap = new HashMap<Class, JAXBContext>();
|
||||
context =
|
||||
new JSONJAXBContext(JSONConfiguration.natural().rootUnwrapping(false)
|
||||
.build(), cTypes);
|
||||
unWrappedRootContext =
|
||||
new JSONJAXBContext(JSONConfiguration.natural().rootUnwrapping(true)
|
||||
.build(), rootUnwrappedTypes);
|
||||
for (Class type : cTypes) {
|
||||
typesContextMap.put(type, context);
|
||||
}
|
||||
for (Class type : rootUnwrappedTypes) {
|
||||
typesContextMap.put(type, unWrappedRootContext);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JAXBContext getContext(Class<?> objectType) {
|
||||
return (types.contains(objectType)) ? context : null;
|
||||
return typesContextMap.get(objectType);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,6 +43,8 @@ import javax.xml.parsers.DocumentBuilder;
|
|||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import com.sun.jersey.api.client.config.ClientConfig;
|
||||
import com.sun.jersey.api.client.config.DefaultClientConfig;
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.io.Text;
|
||||
|
@ -214,6 +216,7 @@ public class TestRMWebServicesAppsModification extends JerseyTest {
|
|||
"org.apache.hadoop.yarn.server.resourcemanager.webapp")
|
||||
.contextListenerClass(GuiceServletConfig.class)
|
||||
.filterClass(com.google.inject.servlet.GuiceFilter.class)
|
||||
.clientConfig(new DefaultClientConfig(JAXBContextResolver.class))
|
||||
.contextPath("jersey-guice-filter").servletPath("/").build());
|
||||
switch (run) {
|
||||
case 0:
|
||||
|
@ -550,10 +553,10 @@ public class TestRMWebServicesAppsModification extends JerseyTest {
|
|||
}
|
||||
}
|
||||
|
||||
// Simple test - just post to /apps/id and validate the response
|
||||
// Simple test - just post to /apps/new-application and validate the response
|
||||
@Test
|
||||
public void testGetNewApplication() throws Exception {
|
||||
// client().addFilter(new LoggingFilter(System.out));
|
||||
client().addFilter(new LoggingFilter(System.out));
|
||||
rm.start();
|
||||
String mediaTypes[] =
|
||||
{ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML };
|
||||
|
@ -653,7 +656,7 @@ public class TestRMWebServicesAppsModification extends JerseyTest {
|
|||
// create a test app and submit it via rest(after getting an app-id) then
|
||||
// get the app details from the rmcontext and check that everything matches
|
||||
|
||||
// client().addFilter(new LoggingFilter(System.out));
|
||||
client().addFilter(new LoggingFilter(System.out));
|
||||
String lrKey = "example";
|
||||
String queueName = "testqueue";
|
||||
String appName = "test";
|
||||
|
|
|
@ -2083,12 +2083,12 @@ _01_000001</amContainerLogs>
|
|||
|
||||
+---+
|
||||
{
|
||||
"application-id":"application_1404198295326_0001",
|
||||
"application-id":"application_1404198295326_0003",
|
||||
"maximum-resource-capability":
|
||||
{
|
||||
"memory":"8192",
|
||||
"vCores":"32"
|
||||
}
|
||||
{
|
||||
"memory":8192,
|
||||
"vCores":32
|
||||
}
|
||||
}
|
||||
+---+
|
||||
|
||||
|
@ -2257,8 +2257,8 @@ _01_000001</amContainerLogs>
|
|||
"resource":"hdfs://hdfs-namenode:9000/user/testuser/DistributedShell/demo-app/AppMaster.jar",
|
||||
"type":"FILE",
|
||||
"visibility":"APPLICATION",
|
||||
"size": "43004",
|
||||
"timestamp": "1405452071209"
|
||||
"size": 43004,
|
||||
"timestamp": 1405452071209
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -2290,15 +2290,15 @@ _01_000001</amContainerLogs>
|
|||
]
|
||||
}
|
||||
},
|
||||
"unmanaged-AM":"false",
|
||||
"max-app-attempts":"2",
|
||||
"unmanaged-AM":false,
|
||||
"max-app-attempts":2,
|
||||
"resource":
|
||||
{
|
||||
"memory":"1024",
|
||||
"vCores":"1"
|
||||
"memory":1024,
|
||||
"vCores":1
|
||||
},
|
||||
"application-type":"YARN",
|
||||
"keep-containers-across-application-attempts":"false"
|
||||
"keep-containers-across-application-attempts":false
|
||||
}
|
||||
|
||||
+---+
|
||||
|
@ -2797,8 +2797,8 @@ Server: Jetty(6.1.26)
|
|||
"renewer":"test-renewer",
|
||||
"owner":"client@EXAMPLE.COM",
|
||||
"kind":"RM_DELEGATION_TOKEN",
|
||||
"expiration-time":"1405153616489",
|
||||
"max-validity":"1405672016489"
|
||||
"expiration-time":1405153616489,
|
||||
"max-validity":1405672016489
|
||||
}
|
||||
+---+
|
||||
|
||||
|
@ -2869,7 +2869,7 @@ Server: Jetty(6.1.26)
|
|||
|
||||
+---+
|
||||
{
|
||||
"expiration-time":"1404112520402"
|
||||
"expiration-time":1404112520402
|
||||
}
|
||||
+---+
|
||||
|
||||
|
|
Loading…
Reference in New Issue