Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Fixed
-
2.5.1
-
None
-
Reviewed
Description
The simulation may enter deadlock if all application simulators hold all threads provided by the thread pool, and all wait for AM container allocation. In that case, all AM simulators wait for NM simulators to do heartbeat to allocate resource, and all NM simulators wait for AM simulators to release some threads. The simulator is deadlocked.
To solve this deadlock, need to remove the while() loop in the MRAMSimulator.
// waiting until the AM container is allocated while (true) { if (response != null && ! response.getAllocatedContainers().isEmpty()) { // get AM container ..... break; } // this sleep time is different from HeartBeat Thread.sleep(1000); // send out empty request sendContainerRequest(); response = responseQueue.take(); }