@Override
  protected synchronized void processException(DistributionMessage msg, ReplyException ex) {
    logger.debug(
        "StreamingPartitionResponseWithResultCollector received exception {} from member {}",
        ex.getCause(), msg.getSender());

    // we have already forwarded the exception, no need to keep it here
    if (execution.isForwardExceptions() || execution.getWaitOnExceptionFlag()) {
      return;
    }

    /*
     * Below two cases should also be handled and not thrown exception Saving the exception
     * ForeceReattempt can also be added here? Also, if multipel nodes throw exception, one may
     * override another TODO: Wrap exception among each other or create a list of exceptions like
     * this.fite.
     */
    if (ex.getCause() instanceof CacheClosedException) {
      execution.addFailedNode(msg.getSender().getId());
      exception = ex;
    } else if (ex.getCause() instanceof BucketMovedException) {
      exception = ex;
    } else if (!execution.getWaitOnExceptionFlag()) {
      exception = ex;
    }
  }
Contract of {@link ReplyProcessor21#stillWaiting()} is that it never returns true after
returning false.
geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRFunctionStreamingResultCollector.java