public void storeAndLogRoundChangeSummary(final RoundChange message) {
    if (!isMessageValid(message)) {
      LOG.info("RoundChange message is invalid .");
      return;
    }
    roundSummary.put(message.getAuthor(), message.getRoundIdentifier());
    if (roundChangeCache.keySet().stream()
            .findFirst()
            .orElse(new ConsensusRoundIdentifier(0, 0))
            .getRoundNumber()
        >= 2) {
      LOG.info("BFT round summary (quorum = {})", quorum);
      for (Map.Entry<Address, ConsensusRoundIdentifier> nextEntry : roundSummary.entrySet()) {
        LOG.info(
            "Address: {}  Round: {} {}",
            nextEntry.getKey(),
            nextEntry.getValue().getRoundNumber(),
            nextEntry.getKey().equals(localAddress) ? "(Local node)" : "");
      }
    }
  }
Store the latest round for a node, and if chain is stalled log a summary of which round each
address is on

@param message the round-change message that has just been received
consensus/qbft-core/src/main/java/org/hyperledger/besu/consensus/qbft/core/statemachine/RoundChangeManager.java