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
|
YARN-3088. LinuxContainerExecutor.deleteAsUser can throw NPE if native
|
||||||
executor returns an error (Eric Payne via jlowe)
|
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
|
Release 2.6.0 - 2014-11-18
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -794,6 +794,13 @@ public class ResourceLocalizationService extends CompositeService
|
||||||
.getResource().getRequest(), e.getMessage()));
|
.getResource().getRequest(), e.getMessage()));
|
||||||
LOG.error("Local path for public localization is not found. "
|
LOG.error("Local path for public localization is not found. "
|
||||||
+ " May be disks failed.", e);
|
+ " 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) {
|
} catch (RejectedExecutionException re) {
|
||||||
rsrc.unlock();
|
rsrc.unlock();
|
||||||
publicRsrc.handle(new ResourceFailedLocalizationEvent(request
|
publicRsrc.handle(new ResourceFailedLocalizationEvent(request
|
||||||
|
@ -1015,6 +1022,9 @@ public class ResourceLocalizationService extends CompositeService
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOG.error("local path for PRIVATE localization could not be " +
|
LOG.error("local path for PRIVATE localization could not be " +
|
||||||
"found. Disks might have failed.", e);
|
"found. Disks might have failed.", e);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
LOG.error("Inorrect path for PRIVATE localization."
|
||||||
|
+ next.getResource().getFile(), e);
|
||||||
} catch (URISyntaxException e) {
|
} catch (URISyntaxException e) {
|
||||||
//TODO fail? Already translated several times...
|
//TODO fail? Already translated several times...
|
||||||
}
|
}
|
||||||
|
|
|
@ -1253,14 +1253,33 @@ public class TestResourceLocalizationService {
|
||||||
user, appId);
|
user, appId);
|
||||||
Assert.assertNull(tracker.getLocalizedResource(pubReq));
|
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
|
Mockito
|
||||||
.doCallRealMethod()
|
.doCallRealMethod()
|
||||||
.when(dirsHandlerSpy)
|
.when(dirsHandlerSpy)
|
||||||
.getLocalPathForWrite(isA(String.class), Mockito.anyLong(),
|
.getLocalPathForWrite(isA(String.class), Mockito.anyLong(),
|
||||||
Mockito.anyBoolean());
|
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 publicLocalizer = spyService.getPublicLocalizer();
|
||||||
publicLocalizer.threadPool.shutdown();
|
publicLocalizer.threadPool.shutdown();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue