'Process a SYNC job.'

def _sync(self, job, begin):

    self.logger.increment(('partition.update.count.%s' % (job['local_dev']['device'],)))
    dest_nodes = itertools.chain(job['sync_to'], [n for n in job['policy'].object_ring.get_part_nodes(job['partition']) if ((n['id'] != job['local_dev']['id']) and (n['id'] not in (m['id'] for m in job['sync_to'])))])
    syncd_with = 0
    for node in dest_nodes:
        if (syncd_with >= len(job['sync_to'])):
            break
        try:
            suffixes = self._get_suffixes_to_sync(job, node)
        except SuffixSyncError:
            continue
        if (not suffixes):
            syncd_with += 1
            continue
        (success, _) = ssync_sender(self, node, job, suffixes)()
        self.rehash_remote(node, job, suffixes)
        self.suffix_sync += len(suffixes)
        self.logger.update_stats('suffix.syncs', len(suffixes))
        if success:
            syncd_with += 1
    self.logger.timing_since('partition.update.timing', begin)
