protected Future evaluate()

in src/main/java/com/twitter/nodes/ServiceNode.java [104:133]


  protected Future<Resp> evaluate() {
    try {
      Req request = buildRequest();
      debugDetailed("built service request: %s", request);
      if (request != null) {
        com.twitter.finagle.Service<Req, Resp> serviceToUse = getService();
        if (serviceToUse == null) {
          return Future.exception(new ServiceNotAvailableException());
        }

        Future<Resp> responseFuture = serviceToUse.apply(request);
        // Add callbacks to track statistics or bookkeeping tasks on the subclasses.
        return responseFuture.addEventListener(new FutureEventListener<Resp>() {
          @Override
          public void onFailure(Throwable cause) { }

          @Override
          public void onSuccess(Resp value) {
            postResponse(value);
          }
        });
      } else {
        return buildResponseForNullRequest();
      }
    } catch (Exception e) {
      LOG.error(e, String.format(
          "Node [%s] threw exception while building service request:", getName()));
      return Future.exception(e);
    }
  }