public boolean isLeader(String uuid, List<ScheduleStrategyRunntime> factoryList) { long no = Long.parseLong(uuid.substring(uuid.lastIndexOf("$") + 1)); for (ScheduleStrategyRunntime server : factoryList) { if (no > Long.parseLong(server.getUuid().substring(server.getUuid().lastIndexOf("$") + 1))) { return false; } } return true; }
/** * 根据策略重新分配调度任务的机器 * * @throws Exception */ public void assignScheduleServer() throws Exception { for (ScheduleStrategyRunntime run : this.scheduleStrategyManager.loadAllScheduleStrategyRunntimeByUUID(this.uuid)) { List<ScheduleStrategyRunntime> factoryList = this.scheduleStrategyManager.loadAllScheduleStrategyRunntimeByTaskType(run.getTaskType()); if (factoryList.size() == 0 || this.isLeader(this.uuid, factoryList) == false) { continue; } ScheduleStrategy scheduleStrategy = this.scheduleStrategyManager.loadStrategy(run.getTaskType()); int[] nums = new int[factoryList.size()]; if (scheduleStrategy.getNumOfSingleServer() > 0) { int count = 0; for (int i = 0; i < factoryList.size(); i++) { if (scheduleStrategy.getAssignNum() - count > scheduleStrategy.getNumOfSingleServer()) { nums[i] = scheduleStrategy.getNumOfSingleServer(); } else { nums[i] = scheduleStrategy.getAssignNum() - count; } count = count + nums[i]; } } else { int numOfSingle = scheduleStrategy.getAssignNum() / factoryList.size(); int otherNum = scheduleStrategy.getAssignNum() % factoryList.size(); for (int i = 0; i < factoryList.size(); i++) { if (i < otherNum) { nums[i] = numOfSingle + 1; } else { nums[i] = numOfSingle; } } } for (int i = 0; i < factoryList.size(); i++) { ScheduleStrategyRunntime factory = factoryList.get(i); // 更新请求的服务器数量 this.scheduleStrategyManager.updateStrategyRunntimeReqestNum( run.getTaskType(), factory.getUuid(), nums[i]); } } }