def test_cron_abort_expired_task_to_run(self): self.mock(random, 'getrandbits', lambda _: 0x88) data = _gen_request_data( properties=dict(dimensions={u'OS': u'Windows-3.1.1'})) request = task_request.make_request(data) result_summary = task_scheduler.schedule_request(request) abandoned_ts = self.mock_now(self.now, data['scheduling_expiration_secs']+1) self.assertEqual(1, task_scheduler.cron_abort_expired_task_to_run()) self.assertEqual([], task_result.TaskRunResult.query().fetch()) expected = { 'abandoned_ts': abandoned_ts, 'bot_id': None, 'bot_version': None, 'children_task_ids': [], 'completed_ts': None, 'costs_usd': [], 'cost_saved_usd': None, 'created_ts': self.now, 'deduped_from': None, 'durations': [], 'exit_codes': [], 'failure': False, 'id': '1d69b9f088008810', 'internal_failure': False, 'modified_ts': abandoned_ts, 'name': u'Request name', 'properties_hash': None, 'server_versions': [], 'started_ts': None, 'state': task_result.State.EXPIRED, 'try_number': None, 'user': u'Jesus', } self.assertEqual(expected, result_summary.key.get().to_dict())
def test_cron_abort_expired_task_to_run(self): self.mock(random, 'getrandbits', lambda _: 0x88) data = _gen_request_data(properties=dict( dimensions={u'OS': u'Windows-3.1.1'})) request = task_request.make_request(data) result_summary = task_scheduler.schedule_request(request) abandoned_ts = self.mock_now(self.now, data['scheduling_expiration_secs'] + 1) self.assertEqual(1, task_scheduler.cron_abort_expired_task_to_run()) self.assertEqual([], task_result.TaskRunResult.query().fetch()) expected = { 'abandoned_ts': abandoned_ts, 'bot_id': None, 'bot_version': None, 'children_task_ids': [], 'completed_ts': None, 'costs_usd': [], 'cost_saved_usd': None, 'created_ts': self.now, 'deduped_from': None, 'durations': [], 'exit_codes': [], 'failure': False, 'id': '1d69b9f088008810', 'internal_failure': False, 'modified_ts': abandoned_ts, 'name': u'Request name', 'properties_hash': None, 'server_versions': [], 'started_ts': None, 'state': task_result.State.EXPIRED, 'try_number': None, 'user': u'Jesus', } self.assertEqual(expected, result_summary.key.get().to_dict())
def test_cron_abort_expired_task_to_run_retry(self): self.mock(random, 'getrandbits', lambda _: 0x88) now = utils.utcnow() data = _gen_request( properties=dict(dimensions={u'OS': u'Windows-3.1.1'}), created_ts=now, expiration_ts=now+datetime.timedelta(seconds=600)) request = task_request.make_request(data, True) result_summary = task_scheduler.schedule_request(request) # Fake first try bot died. bot_dimensions = { u'OS': [u'Windows', u'Windows-3.1.1'], u'hostname': u'localhost', u'foo': u'bar', } _request, run_result = task_scheduler.bot_reap_task( bot_dimensions, 'localhost', 'abc') now_1 = self.mock_now(self.now + task_result.BOT_PING_TOLERANCE, 1) self.assertEqual((0, 1, 0), task_scheduler.cron_handle_bot_died()) self.assertEqual(task_result.State.BOT_DIED, run_result.key.get().state) self.assertEqual( task_result.State.PENDING, run_result.result_summary_key.get().state) # BOT_DIED is kept instead of EXPIRED. abandoned_ts = self.mock_now(self.now, request.expiration_secs+1) self.assertEqual(1, task_scheduler.cron_abort_expired_task_to_run()) self.assertEqual(1, len(task_result.TaskRunResult.query().fetch())) expected = { 'abandoned_ts': abandoned_ts, 'bot_dimensions': bot_dimensions, 'bot_id': u'localhost', 'bot_version': u'abc', 'children_task_ids': [], 'completed_ts': None, 'costs_usd': [0.], 'cost_saved_usd': None, 'created_ts': self.now, 'deduped_from': None, 'durations': [], 'exit_codes': [], 'failure': False, 'id': '1d69b9f088008810', 'internal_failure': True, 'modified_ts': abandoned_ts, 'name': u'Request name', 'outputs_ref': None, 'properties_hash': None, 'server_versions': [u'v1a'], 'started_ts': self.now, 'state': task_result.State.BOT_DIED, 'tags': [u'OS:Windows-3.1.1', u'priority:50', u'tag:1', u'user:Jesus'], 'try_number': 1, 'user': u'Jesus', } self.assertEqual(expected, result_summary.key.get().to_dict())
def test_cron_abort_expired_task_to_run(self): self.mock(random, 'getrandbits', lambda _: 0x88) request = task_request.make_request( _gen_request( properties={'dimensions': {u'OS': u'Windows-3.1.1'}}, pubsub_topic='projects/abc/topics/def'), True) pub_sub_calls = self.mock_pub_sub() result_summary = task_scheduler.schedule_request(request) abandoned_ts = self.mock_now(self.now, request.expiration_secs+1) self.assertEqual( ['1d69b9f088008810'], task_scheduler.cron_abort_expired_task_to_run('f.local')) self.assertEqual([], task_result.TaskRunResult.query().fetch()) expected = { 'abandoned_ts': abandoned_ts, 'bot_dimensions': None, 'bot_id': None, 'bot_version': None, 'children_task_ids': [], 'completed_ts': None, 'costs_usd': [], 'cost_saved_usd': None, 'created_ts': self.now, 'deduped_from': None, 'durations': [], 'exit_codes': [], 'failure': False, 'id': '1d69b9f088008810', 'internal_failure': False, 'modified_ts': abandoned_ts, 'name': u'Request name', 'outputs_ref': None, 'properties_hash': None, 'server_versions': [], 'started_ts': None, 'state': task_result.State.EXPIRED, 'tags': [u'OS:Windows-3.1.1', u'priority:50', u'tag:1', u'user:Jesus'], 'try_number': None, 'user': u'Jesus', } self.assertEqual(expected, result_summary.key.get().to_dict()) self.assertEqual(1, len(pub_sub_calls)) # pubsub completion notification
def get(self): task_scheduler.cron_abort_expired_task_to_run(self.request.host_url) self.response.headers['Content-Type'] = 'text/plain; charset=utf-8' self.response.out.write('Success.')
def get(self): ndb.get_context().set_cache_policy(lambda _: False) task_scheduler.cron_abort_expired_task_to_run(self.request.host_url) self.response.headers['Content-Type'] = 'text/plain; charset=utf-8' self.response.out.write('Success.')
def get(self): task_scheduler.cron_abort_expired_task_to_run() self.response.headers['Content-Type'] = 'text/plain; charset=utf-8' self.response.out.write('Success.')
def run_cron(self): task_scheduler.cron_abort_expired_task_to_run()