I get a lot of spurious messages like this in the log:
```
2019-08-31T18:07:53Z Synchronizing blockheaders, height: 592633 (~100.00%)
2019-08-31T18:09:40Z Synchronizing blockheaders, height: 592634 (~100.00%)
2019-08-31T18:09:40Z Synchronizing blockheaders, height: 592634 (~100.00%)
2019-08-31T18:09:40Z Synchronizing blockheaders, height: 592634 (~100.00%)
2019-08-31T18:09:40Z Synchronizing blockheaders, height: 592634 (~100.00%)
2019-08-31T18:09:40Z Synchronizing blockheaders, height: 592634 (~100.00%)
2019-08-31T18:10:28Z Synchronizing blockheaders, height: 592635 (~100.00%)
2019-08-31T18:10:28Z Synchronizing blockheaders, height: 592635 (~100.00%)
2019-08-31T18:10:28Z Synchronizing blockheaders, height: 592635 (~100.00%)
2019-08-31T18:10:28Z Synchronizing blockheaders, height: 592635 (~100.00%)
2019-08-31T18:10:28Z Synchronizing blockheaders, height: 592635 (~100.00%)
2019-08-31T18:11:01Z Synchronizing blockheaders, height: 592636 (~100.00%)
2019-08-31T18:11:01Z Synchronizing blockheaders, height: 592636 (~100.00%)
2019-08-31T18:11:01Z Synchronizing blockheaders, height: 592636 (~100.00%)
2019-08-31T18:11:01Z Synchronizing blockheaders, height: 592636 (~100.00%)
2019-08-31T18:11:01Z Synchronizing blockheaders, height: 592636 (~100.00%)
```
also
```
2019-08-31T18:19:47Z New outbound peer connected: version: 70015, blocks=592636, peer=0
2019-08-31T18:19:47Z Synchronizing blockheaders, height: 592636 (~100.00%)
2019-08-31T18:19:47Z New outbound peer connected: version: 70015, blocks=592636, peer=1
2019-08-31T18:19:48Z Synchronizing blockheaders, height: 592636 (~100.00%)
2019-08-31T18:19:48Z New outbound peer connected: version: 70015, blocks=592636, peer=2
2019-08-31T18:19:49Z Synchronizing blockheaders, height: 592636 (~100.00%)
```
This log message was introduced in #15615 by @jonasschnelli..
From what I understand, it's supposed to only be shown once per 2000 blocks, not multiple times for the same block.


return state.Invalid(ValidationInvalidReason::CACHED_INVALID, error("%s: block %s is marked invalid", __func__, hash.ToString()), 0, "duplicate");
            return true;
        }
        if (!CheckBlockHeader(block, state, chainparams.GetConsensus()))
            return error("%s: Consensus::CheckBlockHeader: %s, %s", __func__, hash.ToString(), FormatStateMessage(state));
        
        CBlockIndex* pindexPrev = nullptr;
        BlockMap::iterator mi = m_block_index.find(block.hashPrevBlock);
        if (mi == m_block_index.end())
            return state.Invalid(ValidationInvalidReason::BLOCK_MISSING_PREV, error("%s: prev block not found", __func__), 0, "prev-blk-not-found");
        pindexPrev = (*mi).second;
        if (pindexPrev->nStatus & BLOCK_FAILED_MASK)
            return state.Invalid(ValidationInvalidReason::BLOCK_INVALID_PREV, error("%s: prev block invalid", __func__), REJECT_INVALID, "bad-prevblk");
        if (!ContextualCheckBlockHeader(block, state, chainparams, pindexPrev, GetAdjustedTime()))
            return error("%s: Consensus::ContextualCheckBlockHeader: %s, %s", __func__, hash.ToString(), FormatStateMessage(state));
        /* Determine if this block descends from any block which has been found
         * invalid (m_failed_blocks), then mark pindexPrev and any blocks between
         * them as failed. For example:
         *
         *                D3
         *              /
         *      B2 - C2
         *    /         \
         *  A             D2 - E2 - F2
         *    \
         *      B1 - C1 - D1 - E1
         *
         * In the case that we attempted to reorg from E1 to F2, only to find
         * C2 to be invalid, we would mark D2, E2, and F2 as BLOCK_FAILED_CHILD
         * but NOT D3 (it was not in any of our candidate sets at the time).