@Override public T balance(List<T> resources) { if (resources.size() == 1){ return resources.get(0); } return balance(resources, null); }
@Override public T balance(List<T> resources, T exclude) { if (resources.size() == 1){ return resources.get(0); } for(;;){ T resource = doBalance(resources); if (exclude == null || !resource.equals(exclude)){ return resource; } } }
private Boolean selectServer() { List<String> servers = client.getHttpServers(); if (servers.isEmpty()){ log.warn("There are no available server, please check the environment."); return Boolean.FALSE; } currentServer = balancer.balance(servers); return Boolean.TRUE; }
/** * Schedule the job to one of the servers * @param jobId the job id * @param servers the alive servers */ public Response<Boolean> scheduleJob(Long jobId, List<String> servers){ try { String targetServer = balancer.balance(servers); return Response.ok(doScheduleJob(jobId, targetServer)); } catch (Exception e) { Logs.error("failed to schedule job(jobId={}, servers={})", jobId, servers); return Response.notOk("job.schedule.failed"); } }
@Override public Response<Boolean> scheduleJob(Long jobId) { try { // get current server list Response<List<String>> listResp = clusterService.listSimpleServers(); if (!listResp.isSuccess()){ return Response.notOk(listResp.getErr()); } List<String> servers = listResp.getData(); if (CollectionUtil.isNullOrEmpty(servers)){ // no available server, don't need schedule Logs.warn("There are no available servers when schedule job(id={}).", jobId); return Response.notOk("server.no.available"); } String targetServer = balancer.balance(servers); return Response.ok(doScheduleJob(jobId, targetServer)); } catch (Exception e) { Logs.error("failed to schedule job(jobId={})", jobId); return Response.notOk("job.schedule.failed"); } }