private synchronized void startTimer(
      final ConsensusRoundIdentifier round, final long expiryTime) {
    cancelTimer();
    final long now = clock.millis();

    if (expiryTime > now) {
      final long delay = expiryTime - now;

      final Runnable newTimerRunnable = () -> queue.add(new BlockTimerExpiry(round));

      final ScheduledFuture<?> newTimerTask =
          bftExecutors.scheduleTask(newTimerRunnable, delay, TimeUnit.MILLISECONDS);
      currentTimerTask = Optional.of(newTimerTask);
    } else {
      queue.add(new BlockTimerExpiry(round));
    }
  }
Resets the empty block timer

@param roundIdentifier The current round identifier
@param headerTimestamp Function to get timestamp from the header of the chain head
@param currentTimeInMillis The current time
consensus/common/src/main/java/org/hyperledger/besu/consensus/common/bft/BlockTimer.java