private CompletableFuture<Block> validateAndProcessPendingBlock(
      final BlockHeaderValidator blockHeaderValidator,
      final Block block,
      final BlockHeader parent,
      final BadBlockManager badBlockManager) {
    final HeaderValidationMode validationMode = HeaderValidationMode.FULL;
    if (blockHeaderValidator.validateHeader(
        block.getHeader(), parent, protocolContext, validationMode)) {
      ethContext.getScheduler().scheduleSyncWorkerTask(() -> broadcastBlock(block, parent));
      return runImportTask(block);
    } else {
      processingBlocksManager.registerBlockImportDone(block.getHash());
      final String description = String.format("Failed header validation (%s)", validationMode);
      badBlockManager.addBadBlock(block, BadBlockCause.fromValidationFailure(description));
      LOG.warn(
          "Added to bad block manager for invalid header, failed to import announced block {}",
          block.toLogString());
      return CompletableFuture.completedFuture(block);
    }
  }
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