Ejemplo n.º 1
0
  def post(self):
    key_id = self.request.get('task_id', '')
    try:
      key = task_pack.unpack_result_summary_key(key_id)
    except ValueError:
      self.abort_with_error(400, error='Invalid key')
    redirect_to = self.request.get('redirect_to', '')

    task_scheduler.cancel_task(key)
    if redirect_to == 'listing':
      self.redirect('/user/tasks')
    else:
      self.redirect('/user/task/%s' % key_id)
Ejemplo n.º 2
0
    def post(self):
        key_id = self.request.get("task_id", "")
        try:
            key = task_pack.unpack_result_summary_key(key_id)
        except ValueError:
            self.abort_with_error(400, error="Invalid key")
        redirect_to = self.request.get("redirect_to", "")

        task_scheduler.cancel_task(key)
        if redirect_to == "listing":
            self.redirect("/user/tasks")
        else:
            self.redirect("/user/task/%s" % key_id)
Ejemplo n.º 3
0
  def post(self):
    key_id = self.request.get('task_id', '')
    try:
      key = task_pack.unpack_result_summary_key(key_id)
    except ValueError:
      self.abort_with_error(400, error='Invalid key')
    redirect_to = self.request.get('redirect_to', '')

    task_scheduler.cancel_task(key)
    if redirect_to == 'listing':
      self.redirect('/user/tasks')
    else:
      self.redirect('/user/task/%s' % key_id)
Ejemplo n.º 4
0
 def post(self):
     payload = json.loads(self.request.body)
     logging.info('Cancelling tasks with ids: %s', payload['tasks'])
     kill_running = payload['kill_running']
     # TODO(maruel): Parallelize.
     for task_id in payload['tasks']:
         if not task_id:
             logging.error('Cannot cancel a blank task')
             continue
         request_key, result_key = task_pack.get_request_and_result_keys(
             task_id)
         if not request_key or not result_key:
             logging.error(
                 'Cannot search for a falsey key. Request: %s Result: %s',
                 request_key, result_key)
             continue
         request_obj = request_key.get()
         if not request_obj:
             logging.error('Request for %s was not found.',
                           request_key.id())
             continue
         ok, was_running = task_scheduler.cancel_task(
             request_obj, result_key, kill_running)
         logging.info('task %s canceled: %s was running: %s', task_id, ok,
                      was_running)
Ejemplo n.º 5
0
  def cancel(self, request):
    """Cancels a task.

    If a bot was running the task, the bot will forcibly cancel the task.
    """
    logging.info('%s', request)
    summary_key = task_pack.unpack_result_summary_key(request.task_id)
    ok, was_running = task_scheduler.cancel_task(summary_key)
    return swarming_rpcs.CancelResponse(ok=ok, was_running=was_running)
Ejemplo n.º 6
0
  def cancel(self, request):
    """Cancels a task.

    If a bot was running the task, the bot will forcibly cancel the task.
    """
    logging.info('%s', request)
    summary_key = task_pack.unpack_result_summary_key(request.task_id)
    ok, was_running = task_scheduler.cancel_task(summary_key)
    return swarming_rpcs.CancelResponse(ok=ok, was_running=was_running)
Ejemplo n.º 7
0
 def test_cancel_task(self):
   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)
   ok, was_running = task_scheduler.cancel_task(result_summary.key)
   self.assertEqual(True, ok)
   self.assertEqual(False, was_running)
   result_summary = result_summary.key.get()
   self.assertEqual(task_result.State.CANCELED, result_summary.state)
Ejemplo n.º 8
0
 def test_cancel_task(self):
     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)
     ok, was_running = task_scheduler.cancel_task(result_summary.key)
     self.assertEqual(True, ok)
     self.assertEqual(False, was_running)
     result_summary = result_summary.key.get()
     self.assertEqual(task_result.State.CANCELED, result_summary.state)
Ejemplo n.º 9
0
 def post(self, task_id):
   request, result = self.get_request_and_result(task_id)
   if not task_scheduler.cancel_task(request, result.key)[0]:
     self.abort(400, 'Task cancelation error')
   # The cancel button appears at both the /tasks and /task pages. Redirect to
   # the right place.
   if self.request.get('redirect_to', '') == 'listing':
     self.redirect('/user/tasks')
   else:
     self.redirect('/user/task/%s' % task_id)
Ejemplo n.º 10
0
  def post(self):
    request = self.parse_body()
    task_id = request.get('task_id')
    summary_key = task_pack.unpack_result_summary_key(task_id)

    ok, was_running = task_scheduler.cancel_task(summary_key)
    out = {
      'ok': ok,
      'was_running': was_running,
    }
    self.send_response(out)
Ejemplo n.º 11
0
  def post(self):
    request = self.parse_body()
    task_id = request.get('task_id')
    summary_key = task_pack.unpack_result_summary_key(task_id)

    ok, was_running = task_scheduler.cancel_task(summary_key)
    out = {
      'ok': ok,
      'was_running': was_running,
    }
    self.send_response(out)
Ejemplo n.º 12
0
    def cancel(self, request):
        """Cancels a task.

    If a bot was running the task, the bot will forcibly cancel the task.
    """
        logging.debug('%s', request)
        request_key, result_key = _to_keys(request.task_id)
        request_obj = _get_task_request_async(request.task_id, request_key,
                                              _EDIT).get_result()
        ok, was_running = task_scheduler.cancel_task(
            request_obj, result_key, request.kill_running or False)
        return swarming_rpcs.CancelResponse(ok=ok, was_running=was_running)
Ejemplo n.º 13
0
 def test_cancel_task_running(self):
   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)
   reaped_request, run_result = task_scheduler.bot_reap_task(
       {'OS': 'Windows-3.1.1'}, 'localhost', 'abc')
   ok, was_running = task_scheduler.cancel_task(result_summary.key)
   self.assertEqual(False, ok)
   self.assertEqual(True, was_running)
   result_summary = result_summary.key.get()
   self.assertEqual(task_result.State.RUNNING, result_summary.state)
Ejemplo n.º 14
0
 def test_cancel_task_running(self):
     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)
     reaped_request, run_result = task_scheduler.bot_reap_task(
         {'OS': 'Windows-3.1.1'}, 'localhost', 'abc')
     ok, was_running = task_scheduler.cancel_task(result_summary.key)
     self.assertEqual(False, ok)
     self.assertEqual(True, was_running)
     result_summary = result_summary.key.get()
     self.assertEqual(task_result.State.RUNNING, result_summary.state)
Ejemplo n.º 15
0
 def test_cancel_task(self):
   data = _gen_request(
       properties=dict(dimensions={u'OS': u'Windows-3.1.1'}),
       pubsub_topic='projects/abc/topics/def')
   pub_sub_calls = self.mock_pub_sub()
   request = task_request.make_request(data, True)
   result_summary = task_scheduler.schedule_request(request)
   ok, was_running = task_scheduler.cancel_task(result_summary.key)
   self.assertEqual(True, ok)
   self.assertEqual(False, was_running)
   result_summary = result_summary.key.get()
   self.assertEqual(task_result.State.CANCELED, result_summary.state)
   self.assertEqual(1, len(pub_sub_calls)) # sent completion notification
Ejemplo n.º 16
0
 def test_cancel_task_running(self):
   data = _gen_request(
       properties=dict(dimensions={u'OS': u'Windows-3.1.1'}),
       pubsub_topic='projects/abc/topics/def')
   pub_sub_calls = self.mock_pub_sub()
   request = task_request.make_request(data, True)
   result_summary = task_scheduler.schedule_request(request)
   reaped_request, run_result = task_scheduler.bot_reap_task(
       {'OS': 'Windows-3.1.1'}, 'localhost', 'abc')
   ok, was_running = task_scheduler.cancel_task(result_summary.key)
   self.assertEqual(False, ok)
   self.assertEqual(True, was_running)
   result_summary = result_summary.key.get()
   self.assertEqual(task_result.State.RUNNING, result_summary.state)
   self.assertEqual(0, len(pub_sub_calls)) # no notifications
Ejemplo n.º 17
0
 def post(self):
   # There's two ways to query, either with TaskToRun.queue_number or with
   # TaskResultSummary.state.
   canceled = 0
   was_running = 0
   q = task_result.TaskResultSummary.query(
       task_result.TaskResultSummary.state == task_result.State.PENDING)
   status = ''
   try:
     for result_key in q.iter(keys_only=True):
       request_obj = task_pack.result_summary_key_to_request_key(
           result_key).get()
       ok, wr = task_scheduler.cancel_task(request_obj, result_key)
       if ok:
         canceled += 1
       if wr:
         was_running += 1
     status = 'Success'
   except runtime.DeadlineExceededError:
     status = 'Deadline exceeded'
   self.response.write(
       'Canceled %d tasks.\n%d tasks were running.\n%s' %
       (canceled, was_running, status))
Ejemplo n.º 18
0
 def cancel(self, request):
   """Cancels a task and indicate success."""
   summary_key = task_pack.unpack_result_summary_key(request.task_id)
   ok, was_running = task_scheduler.cancel_task(summary_key)
   return swarming_rpcs.CancelResponse(ok=ok, was_running=was_running)
Ejemplo n.º 19
0
 def cancel(self, request):
     """Cancels a task and indicate success."""
     summary_key = task_pack.unpack_result_summary_key(request.task_id)
     ok, was_running = task_scheduler.cancel_task(summary_key)
     return swarming_rpcs.CancelResponse(ok=ok, was_running=was_running)