package org.fastcatsearch.cluster; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.fastcatsearch.control.ResultFuture; import org.fastcatsearch.job.Job; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ClusterUtils { private static Logger logger = LoggerFactory.getLogger(ClusterUtils.class); public static NodeJobResult[] sendJobToNodeIdSet(Job job, NodeService nodeService, Set<String> nodeIdSet, boolean includeMyNode) { List<String> list = new ArrayList<String>(); list.addAll(nodeIdSet); return sendJobToNodeIdList(job, nodeService, list, includeMyNode); } public static NodeJobResult[] sendJobToNodeSet(Job job, NodeService nodeService, Set<Node> nodeSet, boolean includeMyNode) { List<Node> list = new ArrayList<Node>(); list.addAll(nodeSet); return sendJobToNodeList(job, nodeService, list, includeMyNode); } public static NodeJobResult[] sendJobToNodeIdList(Job job, NodeService nodeService, List<String> nodeIdList, boolean includeMyNode) { return ClusterUtils.sendJobToNodeList(job, nodeService, nodeService.getNodeById(nodeIdList), includeMyNode); } public static NodeJobResult[] sendJobToNodeList(Job job, NodeService nodeService, List<Node> nodeList, boolean includeMyNode) { NodeJobResult[] resultList = new NodeJobResult[nodeList.size()]; List<ResultFuture> resultFutureList = new ArrayList<ResultFuture>(nodeList.size()); for (int i = 0; i < nodeList.size(); i++) { Node node = nodeList.get(i); if(!includeMyNode && nodeService.isMyNode(node)){ //자신에게는 실행요청하지 않음. resultFutureList.add(null); continue; } ResultFuture resultFuture = nodeService.sendRequest(node, job); if(resultFuture == null){ //네트워크 장애 등으로 전송실패. logger.debug("{} 으로 전송하지 못햇습니다. ", nodeList.get(i)); } resultFutureList.add(resultFuture); } for (int i = 0; i < resultFutureList.size(); i++) { Node node = nodeList.get(i); ResultFuture resultFuture = resultFutureList.get(i); if(resultFuture != null){ Object obj = resultFuture.take();//1분안에 가져온다. resultList[i] = new NodeJobResult(node, obj, resultFuture.isSuccess()); }else{ resultList[i] = new NodeJobResult(node, null, false); } } return resultList; } }