package org.fastcatsearch.job.cluster;
import java.util.ArrayList;
import java.util.List;
import org.fastcatsearch.cluster.Node;
import org.fastcatsearch.cluster.NodeService;
import org.fastcatsearch.common.io.Streamable;
import org.fastcatsearch.control.ResultFuture;
import org.fastcatsearch.exception.FastcatSearchException;
import org.fastcatsearch.job.Job;
public abstract class StreamableClusterJob extends Job implements Streamable {
private static final long serialVersionUID = 2080251241965769963L;
protected boolean sendJobToNodeList(Job job, NodeService nodeService, List<Node> nodeList, boolean includeMyNode) throws FastcatSearchException{
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)){
//자신에게는 실행요청하지 않음.
continue;
}
ResultFuture resultFuture = nodeService.sendRequest(node, job);
resultFutureList.add(resultFuture);
}
for (int i = 0; i < resultFutureList.size(); i++) {
Node node = nodeList.get(i);
ResultFuture resultFuture = resultFutureList.get(i);
Object obj = resultFuture.take();
if(!resultFuture.isSuccess()){
logger.debug("[{}] job 결과 : {}", node, obj);
// throw new FastcatSearchException("작업실패 collection="+collectionId+", "+node);
return false;
}
}
return true;
}
}