'Process a node in the dependency graph.
The node may be associated with either an update or a cleanup of its
associated resource.'

@context.request_context
@log_exceptions
def check_resource(self, cnxt, resource_id, current_traversal, data, is_update, adopt_stack_data):

    in_data = sync_point.deserialize_input_data(data)
    resource_data = node_data.load_resources_data((in_data if is_update else {}))
    (rsrc, rsrc_owning_stack, stack) = check_resource.load_resource(cnxt, resource_id, resource_data, current_traversal, is_update)
    if (rsrc is None):
        return
    msg_queue = eventlet.queue.LightQueue()
    try:
        self.thread_group_mgr.add_msg_queue(stack.id, msg_queue)
        cr = check_resource.CheckResource(self.engine_id, self._rpc_client, self.thread_group_mgr, msg_queue, in_data)
        if (current_traversal != stack.current_traversal):
            LOG.debug('[%s]    Traversal    cancelled;    re-trigerring.', current_traversal)
            self._retrigger_replaced(is_update, rsrc, stack, cr)
        else:
            cr.check(cnxt, resource_id, current_traversal, resource_data, is_update, adopt_stack_data, rsrc, stack)
    finally:
        self.thread_group_mgr.remove_msg_queue(None, stack.id, msg_queue)
