'Process the object information to be updated and update.
:param update_path: path to pickled object update file
:param device: path to device
:param policy: storage policy of object update'

def process_object_update(self, update_path, device, policy):

    try:
        update = pickle.load(open(update_path, 'rb'))
    except Exception:
        self.logger.exception(_('ERROR    Pickle    problem,    quarantining    %s'), update_path)
        self.logger.increment('quarantines')
        target_path = os.path.join(device, 'quarantined', 'objects', os.path.basename(update_path))
        renamer(update_path, target_path, fsync=False)
        return
    successes = update.get('successes', [])
    (part, nodes) = self.get_container_ring().get_nodes(update['account'], update['container'])
    obj = ('/%s/%s/%s' % (update['account'], update['container'], update['obj']))
    headers_out = HeaderKeyDict(update['headers'])
    headers_out['user-agent'] = ('object-updater    %s' % os.getpid())
    headers_out.setdefault('X-Backend-Storage-Policy-Index', str(int(policy)))
    events = [spawn(self.object_update, node, part, update['op'], obj, headers_out) for node in nodes if (node['id'] not in successes)]
    success = True
    new_successes = False
    for event in events:
        (event_success, node_id) = event.wait()
        if (event_success is True):
            successes.append(node_id)
            new_successes = True
        else:
            success = False
    if success:
        self.successes += 1
        self.logger.increment('successes')
        self.logger.debug('Update    sent    for    %(obj)s    %(path)s', {'obj': obj, 'path': update_path})
        self.logger.increment('unlinks')
        os.unlink(update_path)
    else:
        self.failures += 1
        self.logger.increment('failures')
        self.logger.debug('Update    failed    for    %(obj)s    %(path)s', {'obj': obj, 'path': update_path})
        if new_successes:
            update['successes'] = successes
            write_pickle(update, update_path, os.path.join(device, get_tmp_dir(policy)))
