This is an automated email from the ASF dual-hosted git repository. devaraj pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push: new 56f1e13 YARN-9270. Minor cleanup in TestFpgaDiscoverer. Contributed by Peter Bacsko. 56f1e13 is described below commit 56f1e131ecb9f53dcc2596807f8dec2d2b95bb51 Author: Devaraj K <deva...@apache.org> AuthorDate: Fri Mar 29 10:58:56 2019 -0700 YARN-9270. Minor cleanup in TestFpgaDiscoverer. Contributed by Peter Bacsko. --- .../resources/fpga/FpgaResourceHandlerImpl.java | 12 +- .../resourceplugin/fpga/FpgaDiscoverer.java | 30 +-- .../fpga/FpgaNodeResourceUpdateHandler.java | 13 +- .../resourceplugin/fpga/FpgaResourcePlugin.java | 12 +- .../resources/fpga/TestFpgaResourceHandler.java | 26 ++- .../resourceplugin/fpga/TestFpgaDiscoverer.java | 211 ++++++++------------- 6 files changed, 124 insertions(+), 180 deletions(-) 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/linux/resources/fpga/FpgaResourceHandlerImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/resources/fpga/FpgaResourceHandlerImpl.java index cd1ea13..d06b805 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/resources/fpga/FpgaResourceHandlerImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/resources/fpga/FpgaResourceHandlerImpl.java @@ -64,6 +64,8 @@ public class FpgaResourceHandlerImpl implements ResourceHandler { private final CGroupsHandler cGroupsHandler; + private final FpgaDiscoverer fpgaDiscoverer; + public static final String EXCLUDED_FPGAS_CLI_OPTION = "--excluded_fpgas"; public static final String CONTAINER_ID_CLI_OPTION = "--container_id"; private PrivilegedOperationExecutor privilegedOperationExecutor; @@ -72,10 +74,11 @@ public class FpgaResourceHandlerImpl implements ResourceHandler { public FpgaResourceHandlerImpl(Context nmContext, CGroupsHandler cGroupsHandler, PrivilegedOperationExecutor privilegedOperationExecutor, - AbstractFpgaVendorPlugin plugin) { + AbstractFpgaVendorPlugin plugin, + FpgaDiscoverer fpgaDiscoverer) { this.allocator = new FpgaResourceAllocator(nmContext); this.vendorPlugin = plugin; - FpgaDiscoverer.getInstance().setResourceHanderPlugin(vendorPlugin); + this.fpgaDiscoverer = fpgaDiscoverer; this.cGroupsHandler = cGroupsHandler; this.privilegedOperationExecutor = privilegedOperationExecutor; } @@ -99,8 +102,7 @@ public class FpgaResourceHandlerImpl implements ResourceHandler { } LOG.info("FPGA Plugin bootstrap success."); // Get avialable devices minor numbers from toolchain or static configuration - List<FpgaResourceAllocator.FpgaDevice> fpgaDeviceList = - FpgaDiscoverer.getInstance().discover(); + List<FpgaDevice> fpgaDeviceList = fpgaDiscoverer.discover(); allocator.addFpgaDevices(vendorPlugin.getFpgaType(), fpgaDeviceList); this.cGroupsHandler.initializeCGroupController( CGroupsHandler.CGroupController.DEVICES); @@ -183,7 +185,7 @@ public class FpgaResourceHandlerImpl implements ResourceHandler { " if you want YARN to program the device"); } else { LOG.info("IP file path:" + ipFilePath); - List<FpgaResourceAllocator.FpgaDevice> allowed = allocation.getAllowed(); + List<FpgaDevice> allowed = allocation.getAllowed(); String majorMinorNumber; for (int i = 0; i < allowed.size(); i++) { FpgaDevice device = allowed.get(i); 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/resourceplugin/fpga/FpgaDiscoverer.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/FpgaDiscoverer.java index a049038..185effa 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/FpgaDiscoverer.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/FpgaDiscoverer.java @@ -34,6 +34,7 @@ import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.resources.ResourceHandlerException; import org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.resources.fpga.FpgaResourceAllocator; +import org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.resources.fpga.FpgaResourceAllocator.FpgaDevice; import org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.fpga.discovery.AoclOutputBasedDiscoveryStrategy; import org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.fpga.discovery.FPGADiscoveryStrategy; import org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.fpga.discovery.ScriptBasedFPGADiscoveryStrategy; @@ -49,12 +50,8 @@ public class FpgaDiscoverer { private static final Logger LOG = LoggerFactory.getLogger( FpgaDiscoverer.class); - private static FpgaDiscoverer instance; - private Configuration conf = null; - private AbstractFpgaVendorPlugin plugin = null; - private List<FpgaResourceAllocator.FpgaDevice> currentFpgaInfo = null; private Function<String, Optional<String>> scriptRunner = this::runScript; @@ -62,36 +59,17 @@ public class FpgaDiscoverer { // shell command timeout public static final int MAX_EXEC_TIMEOUT_MS = 10 * 1000; - static { - instance = new FpgaDiscoverer(); - } - - public static FpgaDiscoverer getInstance() { - return instance; - } - @VisibleForTesting void setScriptRunner(Function<String, Optional<String>> scriptRunner) { this.scriptRunner = scriptRunner; } @VisibleForTesting - static void reset() { - instance = new FpgaDiscoverer(); - } - - @VisibleForTesting - public static FpgaDiscoverer setInstance(FpgaDiscoverer newInstance) { - instance = newInstance; - return instance; - } - - @VisibleForTesting public void setConf(Configuration configuration) { this.conf = configuration; } - public List<FpgaResourceAllocator.FpgaDevice> getCurrentFpgaInfo() { + public List<FpgaDevice> getCurrentFpgaInfo() { return currentFpgaInfo; } @@ -119,9 +97,9 @@ public class FpgaDiscoverer { * @return the list of FPGA devices * @throws ResourceHandlerException if there's any error during discovery **/ - public List<FpgaResourceAllocator.FpgaDevice> discover() + public List<FpgaDevice> discover() throws ResourceHandlerException { - List<FpgaResourceAllocator.FpgaDevice> list; + List<FpgaDevice> list; String allowed = this.conf.get(YarnConfiguration.NM_FPGA_ALLOWED_DEVICES); String availableDevices = conf.get( 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/resourceplugin/fpga/FpgaNodeResourceUpdateHandler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/FpgaNodeResourceUpdateHandler.java index fdba9a4..f39dada 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/FpgaNodeResourceUpdateHandler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/FpgaNodeResourceUpdateHandler.java @@ -19,7 +19,6 @@ package org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.fpga; - import static org.apache.hadoop.yarn.api.records.ResourceInformation.FPGA_URI; import java.util.LinkedList; @@ -30,22 +29,28 @@ import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.ResourceInformation; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.exceptions.YarnException; -import org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.resources.fpga.FpgaResourceAllocator; +import org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.resources.fpga.FpgaResourceAllocator.FpgaDevice; import org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.NodeResourceUpdaterPlugin; import org.apache.hadoop.yarn.util.resource.ResourceUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class FpgaNodeResourceUpdateHandler extends NodeResourceUpdaterPlugin { + private final FpgaDiscoverer fpgaDiscoverer; + private static final Logger LOG = LoggerFactory.getLogger( FpgaNodeResourceUpdateHandler.class); + public FpgaNodeResourceUpdateHandler(FpgaDiscoverer fpgaDiscoverer) { + this.fpgaDiscoverer = fpgaDiscoverer; + } + @Override public void updateConfiguredResource(Resource res) throws YarnException { LOG.info("Initializing configured FPGA resources for the NodeManager."); - List<FpgaResourceAllocator.FpgaDevice> list = FpgaDiscoverer.getInstance().getCurrentFpgaInfo(); + List<FpgaDevice> list = fpgaDiscoverer.getCurrentFpgaInfo(); List<Integer> minors = new LinkedList<>(); - for (FpgaResourceAllocator.FpgaDevice device : list) { + for (FpgaDevice device : list) { minors.add(device.getMinor()); } if (minors.isEmpty()) { 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/resourceplugin/fpga/FpgaResourcePlugin.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/FpgaResourcePlugin.java index 4dab1a4..c01d547 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/FpgaResourcePlugin.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/FpgaResourcePlugin.java @@ -44,6 +44,7 @@ public class FpgaResourcePlugin implements ResourcePlugin { private AbstractFpgaVendorPlugin vendorPlugin = null; private FpgaNodeResourceUpdateHandler fpgaNodeResourceUpdateHandler = null; + private FpgaDiscoverer fpgaDiscoverer; private AbstractFpgaVendorPlugin createFpgaVendorPlugin(Configuration conf) { String vendorPluginClass = conf.get(YarnConfiguration.NM_FPGA_VENDOR_PLUGIN, @@ -68,9 +69,11 @@ public class FpgaResourcePlugin implements ResourcePlugin { public void initialize(Context context) throws YarnException { // Get vendor plugin from configuration this.vendorPlugin = createFpgaVendorPlugin(context.getConf()); - FpgaDiscoverer.getInstance().setResourceHanderPlugin(vendorPlugin); - FpgaDiscoverer.getInstance().initialize(context.getConf()); - fpgaNodeResourceUpdateHandler = new FpgaNodeResourceUpdateHandler(); + fpgaDiscoverer = new FpgaDiscoverer(); + fpgaDiscoverer.setResourceHanderPlugin(vendorPlugin); + fpgaDiscoverer.initialize(context.getConf()); + fpgaNodeResourceUpdateHandler = + new FpgaNodeResourceUpdateHandler(fpgaDiscoverer); } @Override @@ -79,7 +82,8 @@ public class FpgaResourcePlugin implements ResourcePlugin { PrivilegedOperationExecutor privilegedOperationExecutor) { if (fpgaResourceHandler == null) { fpgaResourceHandler = new FpgaResourceHandlerImpl(nmContext, - cGroupsHandler, privilegedOperationExecutor, vendorPlugin); + cGroupsHandler, privilegedOperationExecutor, vendorPlugin, + fpgaDiscoverer); } return fpgaResourceHandler; } 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/linux/resources/fpga/TestFpgaResourceHandler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/resources/fpga/TestFpgaResourceHandler.java index 9564c72..0b7c3566 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/resources/fpga/TestFpgaResourceHandler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/linux/resources/fpga/TestFpgaResourceHandler.java @@ -51,6 +51,7 @@ import org.apache.hadoop.yarn.api.records.ContainerLaunchContext; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.api.records.ResourceInformation; import org.apache.hadoop.yarn.conf.YarnConfiguration; +import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.server.nodemanager.Context; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ResourceMappings; @@ -91,16 +92,18 @@ public class TestFpgaResourceHandler { private ConcurrentHashMap<ContainerId, Container> runningContainersMap; private IntelFpgaOpenclPlugin mockVendorPlugin; private List<FpgaDevice> deviceList; + private FpgaDiscoverer fpgaDiscoverer; private static final String vendorType = "IntelOpenCL"; private File dummyAocx; private String getTestParentFolder() { - File f = new File("target/temp/" + TestFpgaResourceHandler.class.getName()); + File f = new File("target/temp/" + + TestFpgaResourceHandler.class.getName()); return f.getAbsolutePath(); } @Before - public void setup() throws IOException { + public void setup() throws IOException, YarnException { CustomResourceTypesConfigurationProvider. initResourceTypes(ResourceInformation.FPGA_URI); configuration = new YarnConfiguration(); @@ -116,13 +119,16 @@ public class TestFpgaResourceHandler { } String aocxPath = getTestParentFolder() + "/test.aocx"; mockVendorPlugin = mockPlugin(vendorType, deviceList, aocxPath); - FpgaDiscoverer.getInstance().setConf(configuration); + fpgaDiscoverer = new FpgaDiscoverer(); + fpgaDiscoverer.setResourceHanderPlugin(mockVendorPlugin); + fpgaDiscoverer.initialize(configuration); when(mockContext.getNMStateStore()).thenReturn(mockNMStateStore); runningContainersMap = new ConcurrentHashMap<>(); when(mockContext.getContainers()).thenReturn(runningContainersMap); fpgaResourceHandler = new FpgaResourceHandlerImpl(mockContext, - mockCGroupsHandler, mockPrivilegedExecutor, mockVendorPlugin); + mockCGroupsHandler, mockPrivilegedExecutor, mockVendorPlugin, + fpgaDiscoverer); dummyAocx = new File(aocxPath); Files.createParentDirs(dummyAocx); @@ -143,7 +149,8 @@ public class TestFpgaResourceHandler { String allowed = "auto"; configuration.set(YarnConfiguration.NM_FPGA_ALLOWED_DEVICES, allowed); fpgaResourceHandler.bootstrap(configuration); - verify(mockVendorPlugin, times(1)).initPlugin(configuration); + // initPlugin() was also called in setup() + verify(mockVendorPlugin, times(2)).initPlugin(configuration); verify(mockCGroupsHandler, times(1)).initializeCGroupController( CGroupsHandler.CGroupController.DEVICES); Assert.assertEquals(5, fpgaResourceHandler.getFpgaAllocator() @@ -152,7 +159,8 @@ public class TestFpgaResourceHandler { .getAllowedFpga().size()); // Case 2. subset of devices fpgaResourceHandler = new FpgaResourceHandlerImpl(mockContext, - mockCGroupsHandler, mockPrivilegedExecutor, mockVendorPlugin); + mockCGroupsHandler, mockPrivilegedExecutor, mockVendorPlugin, + fpgaDiscoverer); allowed = "0,1,2"; configuration.set(YarnConfiguration.NM_FPGA_ALLOWED_DEVICES, allowed); fpgaResourceHandler.bootstrap(configuration); @@ -174,7 +182,8 @@ public class TestFpgaResourceHandler { // Case 3. User configuration contains invalid minor device number fpgaResourceHandler = new FpgaResourceHandlerImpl(mockContext, - mockCGroupsHandler, mockPrivilegedExecutor, mockVendorPlugin); + mockCGroupsHandler, mockPrivilegedExecutor, mockVendorPlugin, + fpgaDiscoverer); allowed = "0,1,7"; configuration.set(YarnConfiguration.NM_FPGA_ALLOWED_DEVICES, allowed); fpgaResourceHandler.bootstrap(configuration); @@ -509,7 +518,8 @@ public class TestFpgaResourceHandler { mockVendorPlugin = mockPlugin(vendorType, deviceList, dummyAocx.getAbsolutePath()); fpgaResourceHandler = new FpgaResourceHandlerImpl(mockContext, - mockCGroupsHandler, mockPrivilegedExecutor, mockVendorPlugin); + mockCGroupsHandler, mockPrivilegedExecutor, mockVendorPlugin, + fpgaDiscoverer); fpgaResourceHandler.bootstrap(configuration); fpgaResourceHandler.preStart(mockContainer(0, 1, "GEMM")); 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/resourceplugin/fpga/TestFpgaDiscoverer.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/TestFpgaDiscoverer.java index 1eb2431..92e9db2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/TestFpgaDiscoverer.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/TestFpgaDiscoverer.java @@ -28,8 +28,6 @@ import static org.mockito.Mockito.when; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.lang.reflect.Field; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -41,6 +39,7 @@ import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.resources.ResourceHandlerException; import org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.resources.fpga.FpgaResourceAllocator.FpgaDevice; +import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -50,6 +49,11 @@ public class TestFpgaDiscoverer { @Rule public ExpectedException expected = ExpectedException.none(); + private File fakeBinary; + private IntelFpgaOpenclPlugin openclPlugin; + private Configuration conf; + private FpgaDiscoverer fpgaDiscoverer; + private String getTestParentFolder() { File f = new File("target/temp/" + TestFpgaDiscoverer.class.getName()); return f.getAbsolutePath(); @@ -65,110 +69,97 @@ public class TestFpgaDiscoverer { File f = new File(folder); FileUtils.deleteDirectory(f); f.mkdirs(); - FpgaDiscoverer.reset(); + + conf = new Configuration(); + + openclPlugin = new IntelFpgaOpenclPlugin(); + openclPlugin.initPlugin(conf); + openclPlugin.setInnerShellExecutor(mockPuginShell()); + + fpgaDiscoverer = new FpgaDiscoverer(); + fpgaDiscoverer.setResourceHanderPlugin(openclPlugin); } - // A dirty hack to modify the env of the current JVM itself - Dirty, but - // should be okay for testing. - @SuppressWarnings({ "rawtypes", "unchecked" }) - private static void setNewEnvironmentHack(Map<String, String> newenv) - throws Exception { - try { - Class<?> cl = Class.forName("java.lang.ProcessEnvironment"); - Field field = cl.getDeclaredField("theEnvironment"); - field.setAccessible(true); - Map<String, String> env = (Map<String, String>) field.get(null); - env.clear(); - env.putAll(newenv); - Field ciField = cl.getDeclaredField("theCaseInsensitiveEnvironment"); - ciField.setAccessible(true); - Map<String, String> cienv = (Map<String, String>) ciField.get(null); - cienv.clear(); - cienv.putAll(newenv); - } catch (NoSuchFieldException e) { - Class[] classes = Collections.class.getDeclaredClasses(); - Map<String, String> env = System.getenv(); - for (Class cl : classes) { - if ("java.util.Collections$UnmodifiableMap".equals(cl.getName())) { - Field field = cl.getDeclaredField("m"); - field.setAccessible(true); - Object obj = field.get(env); - Map<String, String> map = (Map<String, String>) obj; - map.clear(); - map.putAll(newenv); - } - } + @After + public void afterTest() { + if (fakeBinary != null) { + fakeBinary.delete(); } } @Test - public void testLinuxFpgaResourceDiscoverPluginConfig() throws Exception { - Configuration conf = new Configuration(false); - FpgaDiscoverer discoverer = FpgaDiscoverer.getInstance(); - - IntelFpgaOpenclPlugin openclPlugin = new IntelFpgaOpenclPlugin(); - // because FPGA discoverer is a singleton, we use setPlugin to make - // FpgaDiscoverer.getInstance().diagnose() work in openclPlugin.initPlugin() - discoverer.setResourceHanderPlugin(openclPlugin); - openclPlugin.initPlugin(conf); - openclPlugin.setInnerShellExecutor(mockPuginShell()); + public void testExecutablePathWithoutExplicitConfig() + throws YarnException { + fpgaDiscoverer.initialize(conf); - discoverer.initialize(conf); - // Case 1. No configuration set for binary(no environment "ALTERAOCLSDKROOT" set) assertEquals("No configuration(no environment ALTERAOCLSDKROOT set)" + - "should return just a single binary name", + " should return just a single binary name", "aocl", openclPlugin.getPathToExecutable()); + } - // Case 2. With correct configuration and file exists - File fakeBinary = new File(getTestParentFolder() + "/aocl"); - conf.set(YarnConfiguration.NM_FPGA_PATH_TO_EXEC, getTestParentFolder() + "/aocl"); + @Test + public void testExecutablePathWithCorrectConfig() + throws IOException, YarnException { + fakeBinary = new File(getTestParentFolder() + "/aocl"); + conf.set(YarnConfiguration.NM_FPGA_PATH_TO_EXEC, + getTestParentFolder() + "/aocl"); touchFile(fakeBinary); - discoverer.initialize(conf); + + fpgaDiscoverer.initialize(conf); + assertEquals("Correct configuration should return user setting", getTestParentFolder() + "/aocl", openclPlugin.getPathToExecutable()); + } + + @Test + public void testExecutablePathWhenFileDoesNotExist() + throws YarnException { + conf.set(YarnConfiguration.NM_FPGA_PATH_TO_EXEC, + getTestParentFolder() + "/aocl"); - // Case 3. With correct configuration but file doesn't exists. Use default - fakeBinary.delete(); - discoverer.initialize(conf); - assertEquals("Should return just a single binary name", + fpgaDiscoverer.initialize(conf); + + assertEquals("File doesn't exists - expected a single binary name", "aocl", openclPlugin.getPathToExecutable()); + } - // Case 4. Set a empty value + @Test + public void testExecutablePathWhenFileIsEmpty() + throws YarnException { conf.set(YarnConfiguration.NM_FPGA_PATH_TO_EXEC, ""); - discoverer.initialize(conf); + + fpgaDiscoverer.initialize(conf); + assertEquals("configuration with empty string value, should use aocl", "aocl", openclPlugin.getPathToExecutable()); + } - // Case 5. No configuration set for binary, but set environment "ALTERAOCLSDKROOT" - // we load the default configuration to start with - conf = new Configuration(true); + @Test + public void testExecutablePathWithSdkRootSet() + throws IOException, YarnException { fakeBinary = new File(getTestParentFolder() + "/bin/aocl"); fakeBinary.getParentFile().mkdirs(); touchFile(fakeBinary); Map<String, String> newEnv = new HashMap<String, String>(); newEnv.put("ALTERAOCLSDKROOT", getTestParentFolder()); - setNewEnvironmentHack(newEnv); - discoverer.initialize(conf); + openclPlugin.setEnvProvider(s -> { + return newEnv.get(s); }); + + fpgaDiscoverer.initialize(conf); + assertEquals("No configuration but with environment ALTERAOCLSDKROOT set", getTestParentFolder() + "/bin/aocl", openclPlugin.getPathToExecutable()); - } @Test public void testDiscoveryWhenAvailableDevicesDefined() throws YarnException { - Configuration conf = new Configuration(false); conf.set(YarnConfiguration.NM_FPGA_AVAILABLE_DEVICES, "acl0/243:0,acl1/244:1"); - FpgaDiscoverer discoverer = FpgaDiscoverer.getInstance(); - IntelFpgaOpenclPlugin openclPlugin = new IntelFpgaOpenclPlugin(); - discoverer.setResourceHanderPlugin(openclPlugin); - openclPlugin.initPlugin(conf); - openclPlugin.setInnerShellExecutor(mockPuginShell()); + fpgaDiscoverer.initialize(conf); + List<FpgaDevice> devices = fpgaDiscoverer.discover(); - discoverer.initialize(conf); - List<FpgaDevice> devices = discoverer.discover(); assertEquals("Number of devices", 2, devices.size()); FpgaDevice device0 = devices.get(0); FpgaDevice device1 = devices.get(1); @@ -188,18 +179,11 @@ public class TestFpgaDiscoverer { expected.expect(ResourceHandlerException.class); expected.expectMessage("No FPGA devices were specified"); - Configuration conf = new Configuration(false); conf.set(YarnConfiguration.NM_FPGA_AVAILABLE_DEVICES, ""); - FpgaDiscoverer discoverer = FpgaDiscoverer.getInstance(); - - IntelFpgaOpenclPlugin openclPlugin = new IntelFpgaOpenclPlugin(); - discoverer.setResourceHanderPlugin(openclPlugin); - openclPlugin.initPlugin(conf); - openclPlugin.setInnerShellExecutor(mockPuginShell()); - discoverer.initialize(conf); - discoverer.discover(); + fpgaDiscoverer.initialize(conf); + fpgaDiscoverer.discover(); } @Test @@ -208,37 +192,24 @@ public class TestFpgaDiscoverer { expected.expect(ResourceHandlerException.class); expected.expectMessage("Illegal device specification string"); - Configuration conf = new Configuration(false); conf.set(YarnConfiguration.NM_FPGA_AVAILABLE_DEVICES, "illegal/243:0,acl1/244=1"); - FpgaDiscoverer discoverer = FpgaDiscoverer.getInstance(); - IntelFpgaOpenclPlugin openclPlugin = new IntelFpgaOpenclPlugin(); - discoverer.setResourceHanderPlugin(openclPlugin); - openclPlugin.initPlugin(conf); - openclPlugin.setInnerShellExecutor(mockPuginShell()); - - discoverer.initialize(conf); - discoverer.discover(); + fpgaDiscoverer.initialize(conf); + fpgaDiscoverer.discover(); } @Test public void testDiscoveryWhenExternalScriptDefined() throws YarnException { - Configuration conf = new Configuration(false); conf.set(YarnConfiguration.NM_FPGA_DEVICE_DISCOVERY_SCRIPT, "/dummy/script"); - FpgaDiscoverer discoverer = FpgaDiscoverer.getInstance(); - IntelFpgaOpenclPlugin openclPlugin = new IntelFpgaOpenclPlugin(); - discoverer.setResourceHanderPlugin(openclPlugin); - openclPlugin.initPlugin(conf); - openclPlugin.setInnerShellExecutor(mockPuginShell()); - discoverer.setScriptRunner(s -> { + fpgaDiscoverer.setScriptRunner(s -> { return Optional.of("acl0/243:0,acl1/244:1"); }); + fpgaDiscoverer.initialize(conf); + List<FpgaDevice> devices = fpgaDiscoverer.discover(); - discoverer.initialize(conf); - List<FpgaDevice> devices = discoverer.discover(); assertEquals("Number of devices", 2, devices.size()); FpgaDevice device0 = devices.get(0); FpgaDevice device1 = devices.get(1); @@ -258,20 +229,14 @@ public class TestFpgaDiscoverer { expected.expect(ResourceHandlerException.class); expected.expectMessage("No FPGA devices were specified"); - Configuration conf = new Configuration(false); conf.set(YarnConfiguration.NM_FPGA_DEVICE_DISCOVERY_SCRIPT, "/dummy/script"); - FpgaDiscoverer discoverer = FpgaDiscoverer.getInstance(); - IntelFpgaOpenclPlugin openclPlugin = new IntelFpgaOpenclPlugin(); - discoverer.setResourceHanderPlugin(openclPlugin); - openclPlugin.initPlugin(conf); - openclPlugin.setInnerShellExecutor(mockPuginShell()); - discoverer.setScriptRunner(s -> { + fpgaDiscoverer.setScriptRunner(s -> { return Optional.of(""); }); - discoverer.initialize(conf); - discoverer.discover(); + fpgaDiscoverer.initialize(conf); + fpgaDiscoverer.discover(); } @Test @@ -280,20 +245,14 @@ public class TestFpgaDiscoverer { expected.expect(ResourceHandlerException.class); expected.expectMessage("Unable to run external script"); - Configuration conf = new Configuration(false); conf.set(YarnConfiguration.NM_FPGA_DEVICE_DISCOVERY_SCRIPT, "/dummy/script"); - FpgaDiscoverer discoverer = FpgaDiscoverer.getInstance(); - IntelFpgaOpenclPlugin openclPlugin = new IntelFpgaOpenclPlugin(); - discoverer.setResourceHanderPlugin(openclPlugin); - openclPlugin.initPlugin(conf); - openclPlugin.setInnerShellExecutor(mockPuginShell()); - discoverer.setScriptRunner(s -> { + fpgaDiscoverer.setScriptRunner(s -> { return Optional.empty(); }); - discoverer.initialize(conf); - discoverer.discover(); + fpgaDiscoverer.initialize(conf); + fpgaDiscoverer.discover(); } @Test @@ -302,17 +261,10 @@ public class TestFpgaDiscoverer { expected.expect(ResourceHandlerException.class); expected.expectMessage("Unable to run external script"); - Configuration conf = new Configuration(false); conf.set(YarnConfiguration.NM_FPGA_DEVICE_DISCOVERY_SCRIPT, ""); - FpgaDiscoverer discoverer = FpgaDiscoverer.getInstance(); - IntelFpgaOpenclPlugin openclPlugin = new IntelFpgaOpenclPlugin(); - discoverer.setResourceHanderPlugin(openclPlugin); - openclPlugin.initPlugin(conf); - openclPlugin.setInnerShellExecutor(mockPuginShell()); - - discoverer.initialize(conf); - discoverer.discover(); + fpgaDiscoverer.initialize(conf); + fpgaDiscoverer.discover(); } @Test @@ -323,21 +275,14 @@ public class TestFpgaDiscoverer { expected.expect(ResourceHandlerException.class); expected.expectMessage("Unable to run external script"); - Configuration conf = new Configuration(false); fakeScript = new File(getTestParentFolder() + "/fakeScript"); touchFile(fakeScript); fakeScript.setExecutable(false); conf.set(YarnConfiguration.NM_FPGA_DEVICE_DISCOVERY_SCRIPT, fakeScript.getAbsolutePath()); - FpgaDiscoverer discoverer = FpgaDiscoverer.getInstance(); - - IntelFpgaOpenclPlugin openclPlugin = new IntelFpgaOpenclPlugin(); - discoverer.setResourceHanderPlugin(openclPlugin); - openclPlugin.initPlugin(conf); - openclPlugin.setInnerShellExecutor(mockPuginShell()); - discoverer.initialize(conf); - discoverer.discover(); + fpgaDiscoverer.initialize(conf); + fpgaDiscoverer.discover(); } finally { fakeScript.delete(); } --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org