private boolean roleSettingOperation( TestPlanEntity testPlan, Host tester, List<Engine> idleEngines, List<Engine> engineOnTester) { Queue<Engine> engineQ = new ArrayDeque<>(); engineQ.addAll(engineOnTester); boolean finished = setUpRemoteEngines(testPlan, engineQ); if (!finished) { if (engineQ.isEmpty()) { engineQ.addAll(idleEngines); finished = setUpRemoteEngines(testPlan, engineQ); if (!finished) { _logger.error( String.format( "Testplan: %d can't init. Too many engine role faults", testPlan.getId())); return true; } } else { _logger.error( String.format( "Testplan: %d can't init. Not enough available engines", testPlan.getId())); return true; } } else { if (!engineQ.isEmpty()) { List<Engine> enginesToBeKicked = engineQ.stream().collect(Collectors.toList()); _logger.warn( String.format("Host: %d has to many engines, should kickout some.", tester.getId())); if (!hostService.kickEnginesToRandomHost(enginesToBeKicked, tester)) { _logger.warn(String.format("Host: %d kick out failed. please retry", tester.getId())); return true; } } } return false; }