|
@@ -34,6 +34,7 @@ import java.util.concurrent.ConcurrentMap;
|
|
|
import org.junit.Assert;
|
|
|
|
|
|
import org.apache.hadoop.conf.Configuration;
|
|
|
+import org.apache.hadoop.fs.FileContext;
|
|
|
import org.apache.hadoop.fs.Path;
|
|
|
import org.apache.hadoop.yarn.api.records.ApplicationId;
|
|
|
import org.apache.hadoop.yarn.api.records.ContainerId;
|
|
@@ -423,7 +424,7 @@ public class TestLocalResourcesTrackerImpl {
|
|
|
// Simulate the process of localization of lr1
|
|
|
// NOTE: Localization path from tracker has resource ID at end
|
|
|
Path hierarchicalPath1 =
|
|
|
- tracker.getPathForLocalization(lr1, localDir).getParent();
|
|
|
+ tracker.getPathForLocalization(lr1, localDir, null).getParent();
|
|
|
// Simulate lr1 getting localized
|
|
|
ResourceLocalizedEvent rle1 =
|
|
|
new ResourceLocalizedEvent(lr1,
|
|
@@ -440,7 +441,7 @@ public class TestLocalResourcesTrackerImpl {
|
|
|
tracker.handle(reqEvent2);
|
|
|
|
|
|
Path hierarchicalPath2 =
|
|
|
- tracker.getPathForLocalization(lr2, localDir).getParent();
|
|
|
+ tracker.getPathForLocalization(lr2, localDir, null).getParent();
|
|
|
// localization failed.
|
|
|
ResourceFailedLocalizationEvent rfe2 =
|
|
|
new ResourceFailedLocalizationEvent(
|
|
@@ -459,7 +460,7 @@ public class TestLocalResourcesTrackerImpl {
|
|
|
LocalResourceVisibility.PUBLIC, lc1);
|
|
|
tracker.handle(reqEvent3);
|
|
|
Path hierarchicalPath3 =
|
|
|
- tracker.getPathForLocalization(lr3, localDir).getParent();
|
|
|
+ tracker.getPathForLocalization(lr3, localDir, null).getParent();
|
|
|
// localization successful
|
|
|
ResourceLocalizedEvent rle3 =
|
|
|
new ResourceLocalizedEvent(lr3, new Path(hierarchicalPath3.toUri()
|
|
@@ -538,7 +539,8 @@ public class TestLocalResourcesTrackerImpl {
|
|
|
dispatcher.await();
|
|
|
|
|
|
// Simulate the process of localization of lr1
|
|
|
- Path hierarchicalPath1 = tracker.getPathForLocalization(lr1, localDir);
|
|
|
+ Path hierarchicalPath1 = tracker.getPathForLocalization(lr1, localDir,
|
|
|
+ null);
|
|
|
|
|
|
ArgumentCaptor<LocalResourceProto> localResourceCaptor =
|
|
|
ArgumentCaptor.forClass(LocalResourceProto.class);
|
|
@@ -618,7 +620,8 @@ public class TestLocalResourcesTrackerImpl {
|
|
|
dispatcher.await();
|
|
|
|
|
|
// Simulate the process of localization of lr1
|
|
|
- Path hierarchicalPath1 = tracker.getPathForLocalization(lr1, localDir);
|
|
|
+ Path hierarchicalPath1 = tracker.getPathForLocalization(lr1, localDir,
|
|
|
+ null);
|
|
|
|
|
|
ArgumentCaptor<LocalResourceProto> localResourceCaptor =
|
|
|
ArgumentCaptor.forClass(LocalResourceProto.class);
|
|
@@ -687,7 +690,8 @@ public class TestLocalResourcesTrackerImpl {
|
|
|
LocalResourceVisibility.APPLICATION, lc2);
|
|
|
tracker.handle(reqEvent2);
|
|
|
dispatcher.await();
|
|
|
- Path hierarchicalPath2 = tracker.getPathForLocalization(lr2, localDir);
|
|
|
+ Path hierarchicalPath2 = tracker.getPathForLocalization(lr2, localDir,
|
|
|
+ null);
|
|
|
long localizedId2 = Long.parseLong(hierarchicalPath2.getName());
|
|
|
Assert.assertEquals(localizedId1 + 1, localizedId2);
|
|
|
} finally {
|
|
@@ -781,6 +785,49 @@ public class TestLocalResourcesTrackerImpl {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public void testGetPathForLocalization() throws Exception {
|
|
|
+ FileContext lfs = FileContext.getLocalFSFileContext();
|
|
|
+ Path base_path = new Path("target",
|
|
|
+ TestLocalResourcesTrackerImpl.class.getSimpleName());
|
|
|
+ final String user = "someuser";
|
|
|
+ final ApplicationId appId = ApplicationId.newInstance(1, 1);
|
|
|
+ Configuration conf = new YarnConfiguration();
|
|
|
+ DrainDispatcher dispatcher = null;
|
|
|
+ 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);
|
|
|
+ NMStateStoreService stateStore = mock(NMStateStoreService.class);
|
|
|
+ DeletionService delService = mock(DeletionService.class);
|
|
|
+ try {
|
|
|
+ LocalResourceRequest req1 = createLocalResourceRequest(user, 1, 1,
|
|
|
+ LocalResourceVisibility.PUBLIC);
|
|
|
+ LocalizedResource lr1 = createLocalizedResource(req1, dispatcher);
|
|
|
+ ConcurrentMap<LocalResourceRequest, LocalizedResource> localrsrc =
|
|
|
+ new ConcurrentHashMap<LocalResourceRequest, LocalizedResource>();
|
|
|
+ localrsrc.put(req1, lr1);
|
|
|
+ LocalResourcesTrackerImpl tracker = new LocalResourcesTrackerImpl(user,
|
|
|
+ appId, dispatcher, localrsrc, true, conf, stateStore);
|
|
|
+ Path conflictPath = new Path(base_path, "10");
|
|
|
+ Path qualifiedConflictPath = lfs.makeQualified(conflictPath);
|
|
|
+ lfs.mkdir(qualifiedConflictPath, null, true);
|
|
|
+ Path rPath = tracker.getPathForLocalization(req1, base_path,
|
|
|
+ delService);
|
|
|
+ Assert.assertFalse(lfs.util().exists(rPath));
|
|
|
+ verify(delService, times(1)).delete(eq(user), eq(conflictPath));
|
|
|
+ } finally {
|
|
|
+ lfs.delete(base_path, true);
|
|
|
+ if (dispatcher != null) {
|
|
|
+ dispatcher.stop();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private boolean createdummylocalizefile(Path path) {
|
|
|
boolean ret = false;
|
|
|
File file = new File(path.toUri().getRawPath().toString());
|