def check_resource(self, cnxt, resource_id, current_traversal, data, is_update, adopt_stack_data): """Process a node in the dependency graph. The node may be associated with either an update or a cleanup of its associated resource. """ 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) if current_traversal != stack.current_traversal: LOG.debug('[%s] Traversal cancelled; re-trigerring.', current_traversal) self._retrigger_replaced(is_update, rsrc, stack, msg_queue) else: cr = check_resource.CheckResource(self.engine_id, self._rpc_client, self.thread_group_mgr, msg_queue, in_data) 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)
def check_resource(self, cnxt, resource_id, current_traversal, data, is_update, adopt_stack_data): """Process a node in the dependency graph. The node may be associated with either an update or a cleanup of its associated resource. """ 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, is_update) if rsrc is None: return msg_queue = eventlet.queue.LightQueue() try: self.thread_group_mgr.add_msg_queue(stack.id, msg_queue) if current_traversal != stack.current_traversal: LOG.debug('[%s] Traversal cancelled; re-trigerring.', current_traversal) self._retrigger_replaced(is_update, rsrc, stack, msg_queue) else: cr = check_resource.CheckResource(self.engine_id, self._rpc_client, self.thread_group_mgr, msg_queue, in_data) 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)