'High-level method that replicates a single partition that doesn\'t
belong on this node.
:param job: a dict containing info about the partition to be replicated'

def update_deleted(self, job):

    def tpool_get_suffixes(path):
        return [suff for suff in os.listdir(path) if ((len(suff) == 3) and isdir(join(path, suff)))]
    self.replication_count += 1
    self.logger.increment(('partition.delete.count.%s' % (job['device'],)))
    headers = dict(self.default_headers)
    headers['X-Backend-Storage-Policy-Index'] = int(job['policy'])
    failure_devs_info = set()
    begin = time.time()
    handoff_partition_deleted = False
    try:
        responses = []
        suffixes = tpool.execute(tpool_get_suffixes, job['path'])
        synced_remote_regions = {}
        delete_objs = None
        if suffixes:
            for node in job['nodes']:
                self.stats['rsync'] += 1
                kwargs = {}
                if ((node['region'] in synced_remote_regions) and (self.conf.get('sync_method', 'rsync') == 'ssync')):
                    kwargs['remote_check_objs'] = synced_remote_regions[node['region']]
                (success, candidates) = self.sync(node, job, suffixes, **kwargs)
                if success:
                    with Timeout(self.http_timeout):
                        conn = http_connect(node['replication_ip'], node['replication_port'], node['device'], job['partition'], 'REPLICATE', ('/' + '-'.join(suffixes)), headers=headers)
                        conn.getresponse().read()
                    if (node['region'] != job['region']):
                        synced_remote_regions[node['region']] = viewkeys(candidates)
                else:
                    failure_devs_info.add((node['replication_ip'], node['device']))
                responses.append(success)
            for cand_objs in synced_remote_regions.values():
                if (delete_objs is None):
                    delete_objs = cand_objs
                else:
                    delete_objs = (delete_objs & cand_objs)
        if self.handoff_delete:
            delete_handoff = (len([resp for resp in responses if resp]) >= self.handoff_delete)
        else:
            delete_handoff = ((len(responses) == len(job['nodes'])) and all(responses))
        if delete_handoff:
            self.stats['remove'] += 1
            if ((self.conf.get('sync_method', 'rsync') == 'ssync') and (delete_objs is not None)):
                self.logger.info(_('Removing    %s    objects'), len(delete_objs))
                (_junk, error_paths) = self.delete_handoff_objs(job, delete_objs)
                if error_paths:
                    failure_devs_info.update([(failure_dev['replication_ip'], failure_dev['device']) for failure_dev in job['nodes']])
            else:
                self.delete_partition(job['path'])
                handoff_partition_deleted = True
        elif (not suffixes):
            self.delete_partition(job['path'])
            handoff_partition_deleted = True
    except (Exception, Timeout):
        self.logger.exception(_('Error    syncing    handoff    partition'))
        self._add_failure_stats(failure_devs_info)
    finally:
        target_devs_info = set([(target_dev['replication_ip'], target_dev['device']) for target_dev in job['nodes']])
        self.stats['success'] += len((target_devs_info - failure_devs_info))
        if (not handoff_partition_deleted):
            self.handoffs_remaining += 1
        self.partition_times.append((time.time() - begin))
        self.logger.timing_since('partition.delete.timing', begin)
