private void removeAndAbort(GetOperation op, Exception abortCause) {
    // There is a rare scenario where the operation gets removed from this set and gets completed concurrently by
    // the RequestResponseHandler thread when it is in poll() or handleResponse(). In order to avoid the completion
    // from happening twice, complete it here only if the remove was successful.
    if (remove(op)) {
      op.abort(abortCause);
      routerMetrics.operationAbortCount.inc();
      routerMetrics.onGetBlobError(abortCause, op.getOptions(), op.isEncrypted);
    }
  }
Remove an operation from the set and abort.
@param op the operation to abort
@param abortCause the reason for aborting
ambry-router/src/main/java/com/github/ambry/router/GetManager.java