YARN-7434. Router getApps REST invocation fails with multiple RMs. Contributed by Inigo Goiri.
(cherry picked from commit 6e2259264ad9525eeec2a14055d53236711659d7)
This commit is contained in:
parent
931987f470
commit
2d8d420f26
@ -684,10 +684,10 @@ public AppsInfo getApps(final HttpServletRequest hsr, final String stateQuery,
|
|||||||
CompletionService<AppsInfo> compSvc =
|
CompletionService<AppsInfo> compSvc =
|
||||||
new ExecutorCompletionService<>(this.threadpool);
|
new ExecutorCompletionService<>(this.threadpool);
|
||||||
|
|
||||||
|
// HttpServletRequest does not work with ExecutorCompletionService.
|
||||||
|
// Create a duplicate hsr.
|
||||||
|
final HttpServletRequest hsrCopy = clone(hsr);
|
||||||
for (final SubClusterInfo info : subClustersActive.values()) {
|
for (final SubClusterInfo info : subClustersActive.values()) {
|
||||||
// HttpServletRequest does not work with ExecutorCompletionService.
|
|
||||||
// Create a duplicate hsr.
|
|
||||||
final HttpServletRequest hsrCopy = clone(hsr);
|
|
||||||
compSvc.submit(new Callable<AppsInfo>() {
|
compSvc.submit(new Callable<AppsInfo>() {
|
||||||
@Override
|
@Override
|
||||||
public AppsInfo call() {
|
public AppsInfo call() {
|
||||||
@ -746,25 +746,33 @@ private HttpServletRequestWrapper clone(final HttpServletRequest hsr) {
|
|||||||
if (hsr == null) {
|
if (hsr == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
final Map<String, String[]> parameterMap =
|
||||||
|
(Map<String, String[]>) hsr.getParameterMap();
|
||||||
|
final String pathInfo = hsr.getPathInfo();
|
||||||
|
final String user = hsr.getRemoteUser();
|
||||||
|
final Principal principal = hsr.getUserPrincipal();
|
||||||
|
final String mediaType =
|
||||||
|
RouterWebServiceUtil.getMediaTypeFromHttpServletRequest(
|
||||||
|
hsr, AppsInfo.class);
|
||||||
return new HttpServletRequestWrapper(hsr) {
|
return new HttpServletRequestWrapper(hsr) {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Map<String, String[]> getParameterMap() {
|
public Map<String, String[]> getParameterMap() {
|
||||||
return (Map<String, String[]>) hsr.getParameterMap();
|
return parameterMap;
|
||||||
}
|
}
|
||||||
public String getPathInfo() {
|
public String getPathInfo() {
|
||||||
return hsr.getPathInfo();
|
return pathInfo;
|
||||||
}
|
}
|
||||||
public String getRemoteUser() {
|
public String getRemoteUser() {
|
||||||
return hsr.getRemoteUser();
|
return user;
|
||||||
}
|
}
|
||||||
public Principal getUserPrincipal() {
|
public Principal getUserPrincipal() {
|
||||||
return hsr.getUserPrincipal();
|
return principal;
|
||||||
}
|
}
|
||||||
public String getHeader(String value) {
|
public String getHeader(String value) {
|
||||||
// we override only Accept
|
// we override only Accept
|
||||||
if (value.equals(HttpHeaders.ACCEPT)) {
|
if (value.equals(HttpHeaders.ACCEPT)) {
|
||||||
return RouterWebServiceUtil.getMediaTypeFromHttpServletRequest(
|
return mediaType;
|
||||||
hsr, AppsInfo.class);
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user