YARN-3011. Possible IllegalArgumentException in ResourceLocalizationService might lead NM to crash. Contributed by Varun Saxena
(cherry picked from commit 4e15fc0841
)
This commit is contained in:
parent
b3a63fa8a2
commit
8100c8a68c
|
@ -384,6 +384,9 @@ Release 2.7.0 - UNRELEASED
|
|||
YARN-3088. LinuxContainerExecutor.deleteAsUser can throw NPE if native
|
||||
executor returns an error (Eric Payne via jlowe)
|
||||
|
||||
YARN-3011. Possible IllegalArgumentException in ResourceLocalizationService
|
||||
might lead NM to crash. (Varun Saxena via jianhe)
|
||||
|
||||
Release 2.6.0 - 2014-11-18
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -794,6 +794,13 @@ public class ResourceLocalizationService extends CompositeService
|
|||
.getResource().getRequest(), e.getMessage()));
|
||||
LOG.error("Local path for public localization is not found. "
|
||||
+ " May be disks failed.", e);
|
||||
} catch (IllegalArgumentException ie) {
|
||||
rsrc.unlock();
|
||||
publicRsrc.handle(new ResourceFailedLocalizationEvent(request
|
||||
.getResource().getRequest(), ie.getMessage()));
|
||||
LOG.error("Local path for public localization is not found. "
|
||||
+ " Incorrect path. " + request.getResource().getRequest()
|
||||
.getPath(), ie);
|
||||
} catch (RejectedExecutionException re) {
|
||||
rsrc.unlock();
|
||||
publicRsrc.handle(new ResourceFailedLocalizationEvent(request
|
||||
|
@ -1015,6 +1022,9 @@ public class ResourceLocalizationService extends CompositeService
|
|||
} catch (IOException e) {
|
||||
LOG.error("local path for PRIVATE localization could not be " +
|
||||
"found. Disks might have failed.", e);
|
||||
} catch (IllegalArgumentException e) {
|
||||
LOG.error("Inorrect path for PRIVATE localization."
|
||||
+ next.getResource().getFile(), e);
|
||||
} catch (URISyntaxException e) {
|
||||
//TODO fail? Already translated several times...
|
||||
}
|
||||
|
|
|
@ -1253,14 +1253,33 @@ public class TestResourceLocalizationService {
|
|||
user, appId);
|
||||
Assert.assertNull(tracker.getLocalizedResource(pubReq));
|
||||
|
||||
// test RejectedExecutionException
|
||||
// test IllegalArgumentException
|
||||
String name = Long.toHexString(r.nextLong());
|
||||
URL url = getPath("/local/PRIVATE/" + name + "/");
|
||||
final LocalResource rsrc =
|
||||
BuilderUtils.newLocalResource(url, LocalResourceType.FILE,
|
||||
LocalResourceVisibility.PUBLIC, r.nextInt(1024) + 1024L,
|
||||
r.nextInt(1024) + 2048L, false);
|
||||
final LocalResourceRequest pubReq1 = new LocalResourceRequest(rsrc);
|
||||
Map<LocalResourceVisibility, Collection<LocalResourceRequest>> req1 =
|
||||
new HashMap<LocalResourceVisibility,
|
||||
Collection<LocalResourceRequest>>();
|
||||
req1.put(LocalResourceVisibility.PUBLIC,
|
||||
Collections.singletonList(pubReq1));
|
||||
Mockito
|
||||
.doCallRealMethod()
|
||||
.when(dirsHandlerSpy)
|
||||
.getLocalPathForWrite(isA(String.class), Mockito.anyLong(),
|
||||
Mockito.anyBoolean());
|
||||
// send request
|
||||
spyService.handle(new ContainerLocalizationRequestEvent(c, req1));
|
||||
dispatcher.await();
|
||||
tracker =
|
||||
spyService.getLocalResourcesTracker(LocalResourceVisibility.PUBLIC,
|
||||
user, appId);
|
||||
Assert.assertNull(tracker.getLocalizedResource(pubReq));
|
||||
|
||||
// shutdown the thread pool
|
||||
// test RejectedExecutionException by shutting down the thread pool
|
||||
PublicLocalizer publicLocalizer = spyService.getPublicLocalizer();
|
||||
publicLocalizer.threadPool.shutdown();
|
||||
|
||||
|
|
Loading…
Reference in New Issue