svn merge -c 1561110 FIXES: YARN-1575. Public localizer crashes with "Localized unkown resource". Contributed by Jason Lowe

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1561112 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jason Darrell Lowe 2014-01-24 18:59:54 +00:00
parent a3286bdd51
commit 4fe4190b1d
2 changed files with 11 additions and 4 deletions

View File

@ -345,6 +345,9 @@ Release 2.4.0 - UNRELEASED
YARN-1607. TestRM relies on the scheduler assigning multiple containers in YARN-1607. TestRM relies on the scheduler assigning multiple containers in
a single node update (Sandy Ryza) a single node update (Sandy Ryza)
YARN-1575. Public localizer crashes with "Localized unkown resource"
(jlowe)
Release 2.3.0 - UNRELEASED Release 2.3.0 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -638,8 +638,8 @@ public class ResourceLocalizationService extends CompositeService
super("Public Localizer"); super("Public Localizer");
this.lfs = getLocalFileContext(conf); this.lfs = getLocalFileContext(conf);
this.conf = conf; this.conf = conf;
this.pending = this.pending = Collections.synchronizedMap(
new ConcurrentHashMap<Future<Path>, LocalizerResourceRequestEvent>(); new HashMap<Future<Path>, LocalizerResourceRequestEvent>());
this.threadPool = createLocalizerExecutor(conf); this.threadPool = createLocalizerExecutor(conf);
this.queue = new ExecutorCompletionService<Path>(threadPool); this.queue = new ExecutorCompletionService<Path>(threadPool);
} }
@ -675,8 +675,12 @@ public class ResourceLocalizationService extends CompositeService
publicDirDestPath = publicDirDestPath =
new Path(publicDirDestPath, Long.toString(publicRsrc new Path(publicDirDestPath, Long.toString(publicRsrc
.nextUniqueNumber())); .nextUniqueNumber()));
pending.put(queue.submit(new FSDownload(lfs, null, conf, // explicitly synchronize pending here to avoid future task
publicDirDestPath, resource)), request); // completing and being dequeued before pending updated
synchronized (pending) {
pending.put(queue.submit(new FSDownload(lfs, null, conf,
publicDirDestPath, resource)), request);
}
} catch (IOException e) { } catch (IOException e) {
rsrc.unlock(); rsrc.unlock();
// TODO Need to Fix IO Exceptions - Notifying resource // TODO Need to Fix IO Exceptions - Notifying resource