'Gather parts that look like they should move for balance reasons.
A simple gathers of parts that looks dispersible normally works out,
we\'ll switch strategies if things don\'t seem to move.'

def _gather_parts_for_balance(self, assign_parts, replica_plan):

    quarter_turn = (self.parts // 4)
    random_half = random.randint(0, (self.parts / 2))
    start = (((self._last_part_gather_start + quarter_turn) + random_half) % self.parts)
    self.logger.debug('Gather    start    is    %(start)s    (Last    start    was    %(last_start)s)', {'start': start, 'last_start': self._last_part_gather_start})
    self._last_part_gather_start = start
    self._gather_parts_for_balance_can_disperse(assign_parts, start, replica_plan)
    if (not assign_parts):
        self._gather_parts_for_balance_forced(assign_parts, start)
