void poll(List<RequestInfo> requestsToSend, Set<Integer> requestsToDrop) {
    long startTime = time.milliseconds();
    requestRegistrationCallback.setRequestsToSend(requestsToSend);
    requestRegistrationCallback.setRequestsToDrop(requestsToDrop);
    for (UndeleteOperation op : undeleteOperations) {
      boolean exceptionEncountered = false;
      try {
        op.poll(requestRegistrationCallback);
      } catch (Exception e) {
        exceptionEncountered = true;
        op.setOperationException(new RouterException("Undelete poll encountered unexpected error", e,
            RouterErrorCode.UnexpectedInternalError));
      }
      if (exceptionEncountered || op.isOperationComplete()) {
        if (undeleteOperations.remove(op)) {
          // In order to ensure that an operation is completed only once, call onComplete() only at the place where the
          // operation actually gets removed from the set of operations. See comment within close().
          onComplete(op);
        }
      }
    }
    routerMetrics.undeleteManagerPollTimeMs.update(time.milliseconds() - startTime);
  }
Polls all undelete operations and populates a list of {@link RequestInfo} to be sent to data nodes in order to
complete undelete operations.
@param requestsToSend list to be filled with the requests created.
@param requestsToDrop list to be filled with the requests to drop.
ambry-router/src/main/java/com/github/ambry/router/UndeleteManager.java