private void maybeProcessPendingBlocks(final Block block) {
    // Try to get the lowest ancestor pending for this block, so we can import it
    final Optional<Block> lowestPending = pendingBlocksManager.pendingAncestorBlockOf(block);
    if (lowestPending.isPresent()) {
      final Block lowestPendingBlock = lowestPending.get();
      // If the parent of the lowest ancestor is not in the chain, request it.
      if (!protocolContext
          .getBlockchain()
          .contains(lowestPendingBlock.getHeader().getParentHash())) {
        requestParentBlock(lowestPendingBlock);
      } else {
        LOG.trace("Parent block is already in the chain");
        // if the parent is already imported, process its children
        maybeProcessPendingChildrenBlocks(lowestPendingBlock);
      }
    }
  }
Try to request the lowest ancestor for the given pending block or process the descendants if
the ancestor is already in the chain
ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/BlockPropagationManager.java