private boolean maybeProcessPendingChildrenBlocks(final Block block) {
    final List<Block> readyForImport;
    synchronized (pendingBlocksManager) {
      // Remove block from pendingBlocks list
      pendingBlocksManager.deregisterPendingBlock(block);

      // Import any pending blocks that are children of the newly added block
      readyForImport = pendingBlocksManager.childrenOf(block.getHash());
    }

    if (!readyForImport.isEmpty()) {

      LOG.atTrace()
          .setMessage("Ready to import pending blocks found [{}] for block {}")
          .addArgument(
              () ->
                  readyForImport.stream().map(Block::toLogString).collect(Collectors.joining(", ")))
          .addArgument(block::toLogString)
          .log();

      final Supplier<CompletableFuture<List<Block>>> importBlocksTask =
          PersistBlockTask.forUnorderedBlocks(
              protocolSchedule,
              protocolContext,
              ethContext,
              readyForImport,
              HeaderValidationMode.FULL,
              metricsSystem);
      ethContext
          .getScheduler()
          .scheduleSyncWorkerTask(importBlocksTask)
          .whenComplete(
              (r, t) -> {
                if (r != null) {
                  LOG.info(
                      "Imported {} pending blocks: {}",
                      r.size(),
                      r.stream().map(b -> b.getHeader().getNumber()).collect(Collectors.toList()));
                }
                if (t != null) {
                  LOG.error("Error importing pending blocks", t);
                }
              });
    }
    return !readyForImport.isEmpty();
  }
Process pending Children if any

@param block the block to process the children
@return true if block has any pending child
ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/BlockPropagationManager.java