YARN-3011. Possible IllegalArgumentException in ResourceLocalizationService might lead NM to crash. Contributed by Varun Saxena
(cherry picked from commit4e15fc0841
) (cherry picked from commit8100c8a68c
) (cherry picked from commit 10a6c4f349e6f32ed2a520bf669a0cbfff31c824)
This commit is contained in:
parent
24da944241
commit
994c3d049a
|
@ -66,6 +66,9 @@ Release 2.6.1 - UNRELEASED
|
|||
YARN-2997. Fixed NodeStatusUpdater to not send alreay-sent completed
|
||||
container statuses on heartbeat. (Chengbing Liu via jianhe)
|
||||
|
||||
YARN-3011. Possible IllegalArgumentException in ResourceLocalizationService
|
||||
might lead NM to crash. (Varun Saxena via jianhe)
|
||||
|
||||
Release 2.6.0 - 2014-11-18
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -788,6 +788,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
|
||||
|
@ -1010,6 +1017,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...
|
||||
}
|
||||
|
|
|
@ -1126,14 +1126,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);
|
||||
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