in src/main/java/com/aliyun/odps/jdbc/utils/InstanceDataIterator.java [53:80]
public InstanceDataIterator(Odps odps, Instance instance, long offset, Long readCount, long splitSize, int preloadSplitNum, int threadNum)
throws OdpsException {
try {
this.downloadSession = new InstanceTunnel(odps).createDownloadSession(instance.getProject(), instance.getId(), false);
} catch (TunnelException e) {
if (e.getErrorCode().equals(SQLExecutorConstants.sessionNotSelectException)
|| e.getErrorMsg().contains(SQLExecutorConstants.sessionNotSelectMessage)) {
isSelect = false;
currentRecord = getInfoRecord(instance);
return;
}
throw e;
}
this.offset = offset;
this.recordCount = (readCount == null || readCount < 0) ? downloadSession.getRecordCount() - offset : Math.min(readCount, (downloadSession.getRecordCount() - offset));
this.splitSize = (splitSize <= 0) ? this.recordCount : splitSize;
this.splitNum = computeSplitNum(this.splitSize, recordCount);
this.preloadSplitNum = (preloadSplitNum == -1) ? splitNum : Math.max(preloadSplitNum, 1);
this.threadNum = (threadNum == -1) ? Math.min(this.preloadSplitNum, Runtime.getRuntime()
.availableProcessors() * 2) : threadNum;
this.executor = Executors.newFixedThreadPool(this.threadNum);
this.queues = new LinkedBlockingQueue[this.splitNum];
// Initialize first batch of splits
for (int i = 0; i < this.preloadSplitNum && i < this.splitNum; i++) {
submitNextSplit(i);
}
}