From 3f1aad05f0510d713bdf1297de6cda380c2bb078 Mon Sep 17 00:00:00 2001 From: Szilard Nemeth Date: Wed, 19 Feb 2020 15:54:25 +0100 Subject: [PATCH] YARN-10147. FPGA plugin can't find the localized aocx file. Contributed by Peter Bacsko --- .../fpga/IntelFpgaOpenclPlugin.java | 9 ++- .../fpga/TestIntelFpgaOpenclPlugin.java | 81 +++++++++++++++++++ 2 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/fpga/TestIntelFpgaOpenclPlugin.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/resourceplugin/fpga/IntelFpgaOpenclPlugin.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/IntelFpgaOpenclPlugin.java index b3ceb58383..42ee676932 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/IntelFpgaOpenclPlugin.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/IntelFpgaOpenclPlugin.java @@ -238,8 +238,10 @@ public class IntelFpgaOpenclPlugin implements AbstractFpgaVendorPlugin { .findFirst(); if (aocxPath.isPresent()) { - ipFilePath = aocxPath.get().toUri().toString(); - LOG.debug("Found: {}", ipFilePath); + ipFilePath = aocxPath.get().toString(); + LOG.info("Found: {}", ipFilePath); + } else { + LOG.warn("Requested IP file not found"); } } else { LOG.warn("Localized resource is null!"); @@ -249,8 +251,7 @@ public class IntelFpgaOpenclPlugin implements AbstractFpgaVendorPlugin { } private boolean matchesIpid(Path p, String id) { - return p.getName().toLowerCase().equals(id.toLowerCase()) - && p.getName().endsWith(".aocx"); + return p.getName().toLowerCase().equals(id.toLowerCase() + ".aocx"); } /** 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/TestIntelFpgaOpenclPlugin.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/TestIntelFpgaOpenclPlugin.java new file mode 100644 index 0000000000..663df5e26c --- /dev/null +++ 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/TestIntelFpgaOpenclPlugin.java @@ -0,0 +1,81 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.fpga; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.curator.shaded.com.google.common.collect.Lists; +import org.apache.hadoop.fs.Path; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +public class TestIntelFpgaOpenclPlugin { + private IntelFpgaOpenclPlugin plugin; + + @Before + public void setup() { + plugin = new IntelFpgaOpenclPlugin(); + } + + @Test + public void testLocalizedIPfileFound() { + Map> resources = createResources(); + + String path = plugin.retrieveIPfilePath("fpga", "workDir", resources); + + assertEquals("Retrieved IP file path", "/test/fpga.aocx", path); + } + + @Test + public void testLocalizedIPfileNotFound() { + Map> resources = createResources(); + + String path = plugin.retrieveIPfilePath("dummy", "workDir", resources); + + assertNull("Retrieved IP file path", path); + } + + @Test + public void testLocalizedIpfileNotFoundWithNoLocalResources() { + String path = plugin.retrieveIPfilePath("fpga", "workDir", null); + + assertNull("Retrieved IP file path", path); + } + + @Test + public void testIPfileNotDefined() { + Map> resources = createResources(); + + String path = plugin.retrieveIPfilePath(null, "workDir", resources); + + assertNull("Retrieved IP file path", path); + } + + private Map> createResources() { + Map> resources = new HashMap<>(); + resources.put(new Path("/test/fpga.aocx"), + Lists.newArrayList("/symlinked/fpga.aocx")); + return resources; + } +}