protected OperationTracker getOperationTracker(PartitionId partitionId, byte datacenterId,
      RouterOperation routerOperation, BlobId blobId) {
    OperationTracker operationTracker;
    String trackerType = routerConfig.routerGetOperationTrackerType;
    String originatingDcName = clusterMap.getDatacenterName(datacenterId);
    if (trackerType.equals(SimpleOperationTracker.class.getSimpleName())) {
      operationTracker = new SimpleOperationTracker(routerConfig, routerOperation, partitionId, originatingDcName, true,
          routerMetrics, blobId);
    } else if (trackerType.equals(AdaptiveOperationTracker.class.getSimpleName())) {
      operationTracker =
          new AdaptiveOperationTracker(routerConfig, routerMetrics, routerOperation, partitionId, originatingDcName,
              time, blobId);
    } else {
      throw new IllegalArgumentException("Unrecognized tracker type: " + trackerType);
    }
    return operationTracker;
  }
Gets an {@link OperationTracker} based on the config and {@code partitionId}.
@param partitionId the {@link PartitionId} for which a tracker is required.
@param datacenterId the id of datacenter in which the blob originated.
@param routerOperation The type of router operation used by tracker.
@param blobId the {@link BlobId} for which a tracker is required.
@return an {@link OperationTracker} based on the config and {@code partitionId}.
ambry-router/src/main/java/com/github/ambry/router/GetOperation.java