'Deletes the given object by issuing a delete request to each node for
the object. The format of the delete request is such that each object
server will update a corresponding container server, removing the
object from the container\'s listing.
This function returns nothing and should raise no exception but only
update various self.stats_* values for what occurs.
:param account: The name of the account for the object.
:param container: The name of the container for the object.
:param container_partition: The partition for the container on the
container ring.
:param container_nodes: The primary node dicts for the container.
:param obj: The name of the object to delete.
:param policy_index: The storage policy index of the object\'s container
* See also: :func:`swift.common.ring.Ring.get_nodes` for a description
of the container node dicts.'

def reap_object(self, account, container, container_partition, container_nodes, obj, policy_index):

    cnodes = itertools.cycle(container_nodes)
    try:
        ring = self.get_object_ring(policy_index)
    except PolicyError:
        self.stats_objects_remaining += 1
        self.logger.increment('objects_remaining')
        return
    (part, nodes) = ring.get_nodes(account, container, obj)
    successes = 0
    failures = 0
    timestamp = Timestamp.now()
    for node in nodes:
        cnode = next(cnodes)
        try:
            direct_delete_object(node, part, account, container, obj, conn_timeout=self.conn_timeout, response_timeout=self.node_timeout, headers={'X-Container-Host': ('%(ip)s:%(port)s' % cnode), 'X-Container-Partition': str(container_partition), 'X-Container-Device': cnode['device'], 'X-Backend-Storage-Policy-Index': policy_index, 'X-Timestamp': timestamp.internal})
            successes += 1
            self.stats_return_codes[2] = (self.stats_return_codes.get(2, 0) + 1)
            self.logger.increment('return_codes.2')
        except ClientException as err:
            if (self.logger.getEffectiveLevel() <= DEBUG):
                self.logger.exception(_('Exception    with    %(ip)s:%(port)s/%(device)s'), node)
            failures += 1
            self.logger.increment('objects_failures')
            self.stats_return_codes[(err.http_status // 100)] = (self.stats_return_codes.get((err.http_status // 100), 0) + 1)
            self.logger.increment(('return_codes.%d' % ((err.http_status // 100),)))
        except (Timeout, socket.error) as err:
            failures += 1
            self.logger.increment('objects_failures')
            self.logger.error(_('Timeout    Exception    with    %(ip)s:%(port)s/%(device)s'), node)
        if (successes > failures):
            self.stats_objects_deleted += 1
            self.logger.increment('objects_deleted')
        elif (not successes):
            self.stats_objects_remaining += 1
            self.logger.increment('objects_remaining')
        else:
            self.stats_objects_possibly_remaining += 1
            self.logger.increment('objects_possibly_remaining')
