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