def test_fire_queries_doesnt_loop(self): querier = Querier() mock_query_state_1 = QueryContext( uuid.uuid4().hex, uuid.uuid4().hex, 'mistral_v2', { 'mistral': { 'workflow_name': 'st2ci.st2_pkg_e2e_test', 'execution_id': '6d624534-42ca-425c-aa3a-ccc676386fb2' } }) mock_query_state_2 = QueryContext( uuid.uuid4().hex, uuid.uuid4().hex, 'mistral_v2', { 'mistral': { 'workflow_name': 'st2ci.st2_pkg_e2e_test', 'execution_id': '6d624534-42ca-425c-aa3a-ccc676386fb3' } }) mock_query_state_3 = QueryContext( uuid.uuid4().hex, uuid.uuid4().hex, 'mistral_v2', { 'mistral': { 'workflow_name': 'st2ci.st2_pkg_e2e_test', 'execution_id': '6d624534-42ca-425c-aa3a-ccc676386fb4' } }) now = time.time() query_contexts = six.moves.queue.Queue() query_contexts.put((now + 100000, mock_query_state_1)), query_contexts.put((now + 100001, mock_query_state_2)), query_contexts.put((now - 200000, mock_query_state_3)), querier._query_contexts = query_contexts querier._fire_queries() self.assertEqual(querier._query_contexts.qsize(), 2)
def test_query_rescheduled(self): querier = Querier() mock_query_state_1 = QueryContext( uuid.uuid4().hex, uuid.uuid4().hex, 'mistral_v2', { 'mistral': { 'workflow_name': 'st2ci.st2_pkg_e2e_test', 'execution_id': '6d624534-42ca-425c-aa3a-ccc676386fb2' } }) now = time.time() query_contexts = six.moves.queue.Queue() query_contexts.put((now - 200000, mock_query_state_1)), querier._query_contexts = query_contexts querier._fire_queries(blocking=True) self.assertFalse(Querier._delete_state_object.called) self.assertEqual(querier._query_contexts.qsize(), 1)
def _bootstrap(self): all_states = ActionExecutionState.get_all() LOG.info('Found %d pending states in db.' % len(all_states)) query_contexts_dict = defaultdict(list) for state_db in all_states: try: context = QueryContext.from_model(state_db) except: LOG.exception('Invalid state object: %s', state_db) continue query_module_name = state_db.query_module querier = self.get_querier(query_module_name) if querier is not None: query_contexts_dict[querier].append(context) for querier, contexts in six.iteritems(query_contexts_dict): LOG.info('Found %d pending actions for query module %s', len(contexts), querier) querier.add_queries(query_contexts=contexts)
def test_query_completed(self): querier = Querier() mock_query_state_1 = QueryContext( uuid.uuid4().hex, uuid.uuid4().hex, 'dummy_runner', { 'dummy': { 'workflow_name': 'st2ci.st2_pkg_e2e_test', 'execution_id': '6d624534-42ca-425c-aa3a-ccc676386fb2' } }) now = time.time() query_contexts = six.moves.queue.Queue() query_contexts.put((now - 200000, mock_query_state_1)), querier._query_contexts = query_contexts querier._fire_queries(blocking=True) self.assertTrue(runners_utils.invoke_post_run.called) self.assertTrue(Querier._delete_state_object.called) self.assertEqual(querier._query_contexts.qsize(), 0)
def process(self, query_context): querier = self.get_querier(query_context.query_module) context = QueryContext.from_model(query_context) querier.add_queries(query_contexts=[context]) return