Browse Source

YARN-9331. [YARN-8851] Fix a bug that lacking cgroup initialization when bootstrap DeviceResourceHandlerImpl. Contributed by Zhankun Tang.

Weiwei Yang 6 years ago
parent
commit
c6ea28c480

+ 3 - 2
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/deviceframework/DeviceResourceHandlerImpl.java

@@ -122,8 +122,9 @@ public class DeviceResourceHandlerImpl implements ResourceHandler {
     }
     }
     // Add device set. Here we trust the plugin's return value
     // Add device set. Here we trust the plugin's return value
     deviceMappingManager.addDeviceSet(resourceName, availableDevices);
     deviceMappingManager.addDeviceSet(resourceName, availableDevices);
-    // TODO: Init cgroups
-
+    // Init cgroups
+    this.cGroupsHandler.initializeCGroupController(
+        CGroupsHandler.CGroupController.DEVICES);
     return null;
     return null;
   }
   }
 
 

+ 2 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/resourceplugin/deviceframework/TestDevicePluginAdapter.java

@@ -164,6 +164,8 @@ public class TestDevicePluginAdapter {
         mockShellWrapper);
         mockShellWrapper);
     adapter.setDeviceResourceHandler(drhl);
     adapter.setDeviceResourceHandler(drhl);
     adapter.getDeviceResourceHandler().bootstrap(conf);
     adapter.getDeviceResourceHandler().bootstrap(conf);
+    verify(mockCGroupsHandler).initializeCGroupController(
+        CGroupsHandler.CGroupController.DEVICES);
     int size = dmm.getAvailableDevices(resourceName);
     int size = dmm.getAvailableDevices(resourceName);
     Assert.assertEquals(3, size);
     Assert.assertEquals(3, size);
     // Case 1. A container c1 requests 1 device
     // Case 1. A container c1 requests 1 device