public void handle(RequestPath requestPath, RestRequest restRequest, RestResponseChannel restResponseChannel,
      Callback<ReadableStreamChannel> callback) throws RestServiceException {
    SubResource subResource = requestPath.getSubResource();
    GetBlobOptions options = buildGetBlobOptions(restRequest.getArgs(), subResource,
        getGetOption(restRequest, frontendConfig.defaultRouterGetOption), restRequest, requestPath.getBlobSegmentIdx());
    RestRequestMetricsGroup metricsGroup = getMetricsGroupForGet(metrics, subResource);
    RestRequestMetrics restRequestMetrics = metricsGroup.getRestRequestMetrics(restRequest.isSslUsed(), false);
    // named blob requests have their account/container in the URI, so checks can be done prior to ID conversion.
    if (requestPath.matchesOperation(Operations.NAMED_BLOB)) {
      accountAndContainerInjector.injectAccountContainerForNamedBlob(restRequest, metricsGroup);
    }
    restRequest.getMetricsTracker().injectMetrics(restRequestMetrics);
    new CallbackChain(restRequest, restResponseChannel, metricsGroup, requestPath, subResource, options,
        callback).start();
  }
Handler to handle all the http GET requests on blobs.
ambry-frontend/src/main/java/com/github/ambry/frontend/GetBlobHandler.java