public InstanceDataIterator()

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);
    }
  }