private void checkState() {
    if (aborted) {
      if (blocked.isDone()) {
        // try throw underlying exception instead of "Source handle is aborted."
        try {
          blocked.get();
        } catch (InterruptedException e) {
          Thread.currentThread().interrupt();
          throw new IllegalStateException(e);
        } catch (ExecutionException e) {
          throw new IllegalStateException(e.getCause() == null ? e : e.getCause());
        }
      }
      throw new IllegalStateException("Source handle is aborted.");
    } else if (closed) {
      throw new IllegalStateException("SourceHandle is closed.");
    }
  }
this is set to true after calling isBlocked() at least once which indicates that this
SourceHandle needs to output data.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/exchange/source/SourceHandle.java