public List<AnalysisResultFuture> dispatchJobs(final AnalysisJob job, final int chunks, final int rowsPerChunk,
final RowProcessingPublisher publisher) {
final List<AnalysisResultFuture> results = new ArrayList<>();
for (int i = 0; i < chunks; i++) {
final int firstRow = (i * rowsPerChunk) + 1;
final int maxRows;
if (i == chunks - 1) {
maxRows = Integer.MAX_VALUE - firstRow - 1;
} else {
maxRows = rowsPerChunk;
}
final AnalysisJob slaveJob = buildSlaveJob(job, i, firstRow, maxRows);
final DistributedJobContext context = new DistributedJobContextImpl(_configuration, job, i, chunks);
try {
logger.info("Dispatching slave job {} of {}", i + 1, chunks);
final AnalysisResultFuture slaveResultFuture = _clusterManager.dispatchJob(slaveJob, context);
results.add(slaveResultFuture);
} catch (final Exception e) {
_analysisListener.errorUnknown(job, e);
final AnalysisResultFuture errorResult = new FailedAnalysisResultFuture(e);
results.add(0, errorResult);
break;
}
}
return results;
}