Source:
<code>public Future<GetBlobResult> getBlob(String blobIdStr, GetBlobOptions options, final Callback<GetBlobResult> callback) { if (blobIdStr == null || options == null) { throw new IllegalArgumentException("blobId or options must not be null"); } currentOperationsCount.incrementAndGet(); final FutureResult<GetBlobResult> futureResult = new FutureResult<>(); GetBlobOptionsInternal internalOptions = new GetBlobOptionsInternal(options, false, routerMetrics.ageAtGet); try { BlobId blobId = RouterUtils.getBlobIdFromString(blobIdStr, clusterMap); <START> if (blobId.getDatacenterId() != clusterMap.getLocalDatacenterId()) { <END> routerMetrics.getBlobNotOriginateLocalOperationRate.mark(); } trackGetBlobRateMetrics(options, blobId.isEncrypted()); routerMetrics.operationQueuingRate.mark(); if (isOpen.get()) { getOperationController().getBlob(blobId, internalOptions, new Callback<GetBlobResultInternal>() { @Override public void onCompletion(GetBlobResultInternal internalResult, Exception exception) { GetBlobResult getBlobResult = internalResult == null ? null : internalResult.getBlobResult; futureResult.done(getBlobResult, exception); if (callback != null) { callback.onCompletion(getBlobResult, exception); } } }); } else { RouterException routerException = new RouterException("Cannot accept operation because Router is closed", RouterErrorCode.RouterClosed); completeGetBlobOperation(routerException, internalOptions, futureResult, callback, blobId.isEncrypted()); } } catch (RouterException e) { completeGetBlobOperation(e, internalOptions, futureResult, callback, false); } return futureResult; }</code><technical_language>account for -1 in BlobId (ClusterMapUtils.UNKNOWN_DATACENTER_ID) i.e. -1 count this rate</technical_language>

Target:
public Future<GetBlobResult> getBlob(String blobIdStr, GetBlobOptions options, final Callback<GetBlobResult> callback) { if (blobIdStr == null || options == null) { throw new IllegalArgumentException("blobId or options must not be null"); } currentOperationsCount.incrementAndGet(); final FutureResult<GetBlobResult> futureResult = new FutureResult<>(); GetBlobOptionsInternal internalOptions = new GetBlobOptionsInternal(options, false, routerMetrics.ageAtGet); try { BlobId blobId = RouterUtils.getBlobIdFromString(blobIdStr, clusterMap); if (blobId.getDatacenterId() != ClusterMapUtils.UNKNOWN_DATACENTER_ID && blobId.getDatacenterId() != clusterMap.getLocalDatacenterId()) { routerMetrics.getBlobNotOriginateLocalOperationRate.mark(); } trackGetBlobRateMetrics(options, blobId.isEncrypted()); routerMetrics.operationQueuingRate.mark(); if (isOpen.get()) { getOperationController().getBlob(blobId, internalOptions, new Callback<GetBlobResultInternal>() { @Override public void onCompletion(GetBlobResultInternal internalResult, Exception exception) { GetBlobResult getBlobResult = internalResult == null ? null : internalResult.getBlobResult; futureResult.done(getBlobResult, exception); if (callback != null) { callback.onCompletion(getBlobResult, exception); } } }); } else { RouterException routerException = new RouterException("Cannot accept operation because Router is closed", RouterErrorCode.RouterClosed); completeGetBlobOperation(routerException, internalOptions, futureResult, callback, blobId.isEncrypted()); } } catch (RouterException e) { completeGetBlobOperation(e, internalOptions, futureResult, callback, false); } return futureResult; }