You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by jl...@apache.org on 2015/11/16 16:03:26 UTC
[2/2] hadoop git commit: YARN-4354. Public resource localization
fails with NPE. Contributed by Jason Lowe. (cherry picked from commit
855d52927b6115e2cfbd97a94d6c1a3ddf0e94bb)
YARN-4354. Public resource localization fails with NPE. Contributed by Jason Lowe.
(cherry picked from commit 855d52927b6115e2cfbd97a94d6c1a3ddf0e94bb)
Conflicts:
hadoop-yarn-project/CHANGES.txt
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/TestLocalResourcesTrackerImpl.java
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/e1716c7c
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/e1716c7c
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/e1716c7c
Branch: refs/heads/branch-2.7
Commit: e1716c7cf9ce165822c48b4007f9013e4f806704
Parents: 38f37ca
Author: Jason Lowe <jl...@apache.org>
Authored: Mon Nov 16 15:02:56 2015 +0000
Committer: Jason Lowe <jl...@apache.org>
Committed: Mon Nov 16 15:02:56 2015 +0000
----------------------------------------------------------------------
hadoop-yarn-project/CHANGES.txt | 3 ++
.../localizer/LocalResourcesTrackerImpl.java | 10 +++-
.../TestLocalResourcesTrackerImpl.java | 56 ++++++++++++++++++--
.../TestResourceLocalizationService.java | 4 +-
4 files changed, 67 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/e1716c7c/hadoop-yarn-project/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt
index f961b0c..cf647c1 100644
--- a/hadoop-yarn-project/CHANGES.txt
+++ b/hadoop-yarn-project/CHANGES.txt
@@ -138,6 +138,9 @@ Release 2.7.2 - UNRELEASED
YARN-4127. RM fail with noAuth error if switched from failover mode to non-failover
mode. (Varun Saxena via jianhe)
+ YARN-4354. Public resource localization fails with NPE. (Jason Lowe via
+ junping_du)
+
Release 2.7.1 - 2015-07-06
INCOMPATIBLE CHANGES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/e1716c7c/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/LocalResourcesTrackerImpl.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/LocalResourcesTrackerImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/LocalResourcesTrackerImpl.java
index f9346d8..60a9529 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/LocalResourcesTrackerImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/LocalResourcesTrackerImpl.java
@@ -171,14 +171,22 @@ class LocalResourcesTrackerImpl implements LocalResourcesTracker {
break;
}
+ if (rsrc == null) {
+ LOG.warn("Received " + event.getType() + " event for request " + req
+ + " but localized resource is missing");
+ return;
+ }
rsrc.handle(event);
// Remove the resource if its downloading and its reference count has
// become 0 after RELEASE. This maybe because a container was killed while
// localizing and no other container is referring to the resource.
+ // NOTE: This should NOT be done for public resources since the
+ // download is not associated with a container-specific localizer.
if (event.getType() == ResourceEventType.RELEASE) {
if (rsrc.getState() == ResourceState.DOWNLOADING &&
- rsrc.getRefCount() <= 0) {
+ rsrc.getRefCount() <= 0 &&
+ rsrc.getRequest().getVisibility() != LocalResourceVisibility.PUBLIC) {
removeResource(req);
}
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/e1716c7c/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/TestLocalResourcesTrackerImpl.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/TestLocalResourcesTrackerImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/TestLocalResourcesTrackerImpl.java
index bd33213..6c75714 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/TestLocalResourcesTrackerImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/TestLocalResourcesTrackerImpl.java
@@ -138,12 +138,12 @@ public class TestLocalResourcesTrackerImpl {
tracker.handle(rel21Event);
dispatcher.await();
- verifyTrackedResourceCount(tracker, 1);
+ verifyTrackedResourceCount(tracker, 2);
// Verify resource with non zero ref count is not removed.
Assert.assertEquals(2, lr1.getRefCount());
Assert.assertFalse(tracker.remove(lr1, mockDelService));
- verifyTrackedResourceCount(tracker, 1);
+ verifyTrackedResourceCount(tracker, 2);
// Localize resource1
ResourceLocalizedEvent rle =
@@ -158,7 +158,7 @@ public class TestLocalResourcesTrackerImpl {
// Verify resources in state LOCALIZED with ref-count=0 is removed.
Assert.assertTrue(tracker.remove(lr1, mockDelService));
- verifyTrackedResourceCount(tracker, 0);
+ verifyTrackedResourceCount(tracker, 1);
} finally {
if (dispatcher != null) {
dispatcher.stop();
@@ -829,6 +829,56 @@ public class TestLocalResourcesTrackerImpl {
}
}
+ @Test
+ @SuppressWarnings("unchecked")
+ public void testReleaseWhileDownloading() throws Exception {
+ String user = "testuser";
+ DrainDispatcher dispatcher = null;
+ try {
+ Configuration conf = new Configuration();
+ dispatcher = createDispatcher(conf);
+ EventHandler<LocalizerEvent> localizerEventHandler =
+ mock(EventHandler.class);
+ EventHandler<LocalizerEvent> containerEventHandler =
+ mock(EventHandler.class);
+ dispatcher.register(LocalizerEventType.class, localizerEventHandler);
+ dispatcher.register(ContainerEventType.class, containerEventHandler);
+
+ ContainerId cId = BuilderUtils.newContainerId(1, 1, 1, 1);
+ LocalizerContext lc = new LocalizerContext(user, cId, null);
+
+ LocalResourceRequest req =
+ createLocalResourceRequest(user, 1, 1, LocalResourceVisibility.PUBLIC);
+ LocalizedResource lr = createLocalizedResource(req, dispatcher);
+ ConcurrentMap<LocalResourceRequest, LocalizedResource> localrsrc =
+ new ConcurrentHashMap<LocalResourceRequest, LocalizedResource>();
+ localrsrc.put(req, lr);
+ LocalResourcesTracker tracker =
+ new LocalResourcesTrackerImpl(user, null, dispatcher, localrsrc,
+ false, conf, new NMNullStateStoreService());
+
+ // request the resource
+ ResourceEvent reqEvent =
+ new ResourceRequestEvent(req, LocalResourceVisibility.PUBLIC, lc);
+ tracker.handle(reqEvent);
+
+ // release the resource
+ ResourceEvent relEvent = new ResourceReleaseEvent(req, cId);
+ tracker.handle(relEvent);
+
+ // download completing after release
+ ResourceLocalizedEvent rle =
+ new ResourceLocalizedEvent(req, new Path("file:///tmp/r1"), 1);
+ tracker.handle(rle);
+
+ dispatcher.await();
+ } finally {
+ if (dispatcher != null) {
+ dispatcher.stop();
+ }
+ }
+ }
+
private boolean createdummylocalizefile(Path path) {
boolean ret = false;
File file = new File(path.toUri().getRawPath().toString());
http://git-wip-us.apache.org/repos/asf/hadoop/blob/e1716c7c/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/TestResourceLocalizationService.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/TestResourceLocalizationService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/TestResourceLocalizationService.java
index 7cbbce7..cfed5cd 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/TestResourceLocalizationService.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/TestResourceLocalizationService.java
@@ -482,8 +482,8 @@ public class TestResourceLocalizationService {
Assert.assertEquals("Incorrect reference count", 0, lr.getRefCount());
pubRsrcs.remove(lr.getRequest());
}
- Assert.assertEquals(2, pubRsrcs.size());
- Assert.assertEquals(0, pubRsrcCount);
+ Assert.assertEquals(0, pubRsrcs.size());
+ Assert.assertEquals(2, pubRsrcCount);
appRsrcCount = 0;
for (LocalizedResource lr : appTracker) {