protected boolean operateOnDistributedRegion(final ClusterDistributionManager dm,
      DistributedRegion r) throws ForceReattemptException {
    if (functionObject == null) {
      ReplyMessage.send(getSender(), processorId,
          new ReplyException(new FunctionException(
              String.format("Function named %s is not registered to FunctionService",
                  functionName))),
          dm, r.isInternalRegion());

      return false;
    }


    if (logger.isTraceEnabled(LogMarker.DM_VERBOSE)) {
      logger.trace(LogMarker.DM_VERBOSE, "FunctionMessage operateOnRegion: {}", r.getFullPath());
    }
    try {
      r.executeOnRegion(this, functionObject, args, processorId, filter,
          isReExecute);
      if (!replyLastMsg && functionObject.hasResult()) {
        ReplyMessage.send(getSender(), processorId,
            new ReplyException(new FunctionException(
                String.format("The function, %s, did not send last result",
                    functionObject.getId()))),
            dm, r.isInternalRegion());
        return false;
      }
    } catch (IOException e) {
      ReplyMessage
          .send(getSender(), processorId,
              new ReplyException(
                  "Operation got interrupted due to shutdown in progress on remote VM", e),
              dm, r.isInternalRegion());
      return false;
    } catch (CancelException sde) {
      ReplyMessage.send(getSender(), processorId,
          new ReplyException(new ForceReattemptException(
              "Operation got interrupted due to shutdown in progress on remote VM", sde)),
          dm, r.isInternalRegion());
      return false;
    }

    // Unless there was an exception thrown, this message handles sending the
    // response
    return false;
  }
default exception to ensure a false-positive response is never returned
geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegionFunctionStreamingMessage.java