code: func (s *Ethereum) shouldPreserve(block *types.Block) bool {
  	// The reason we need to disable the self-reorg preserving for clique
  	// is it can be probable to introduce a deadlock.
  	//
  	// e.g. If there are 7 available signers
  	//
  	// r1   A
  	// r2     B
  	// r3       C
  	// r4         D
  	// r5   A      [X] F G
  	// r6    [X]
  	//
  	// In the round5, the inturn signer E is offline, so the worst case
  	// is A, F and G sign the block of round5 and reject the block of opponents
  	// and in the round6, the last available signer B is offline, the whole
  	// network is stuck.
  	if _, ok := s.engine.(*clique.Clique); ok {
  		return false
  	}
  	return s.isLocalBlock(block)
  }
docs: // shouldPreserve checks whether we should preserve the given block
  // during the chain reorg depending on whether the author of block
  // is a local account.