Example #1
0
    def get_task_status_json(cls):
        def create_task_events(start_time):
            """Create a list of task events, tracing the task from pending to assigned to running"""
            return [
                TaskEvent(timestamp=start_time,
                          status=0,
                          message="looking for a host"),
                TaskEvent(timestamp=start_time + 10,
                          status=9,
                          message="found a host"),
                TaskEvent(timestamp=start_time + 20,
                          status=2,
                          message="running")
            ]

        def create_scheduled_task(instance, start_time):
            task = ScheduledTask(assignedTask=AssignedTask(
                taskId="task_%s" % instance,
                slaveId="random_machine_id",
                slaveHost="junk.nothing",
                task=TaskConfig(job=JobKey(role="nobody",
                                           environment="prod",
                                           name='flibber'),
                                owner=Identity(role="nobody"),
                                environment="prod",
                                jobName="flibber",
                                isService=False,
                                numCpus=2,
                                ramMb=2048,
                                diskMb=4096,
                                priority=7,
                                maxTaskFailures=3,
                                production=False,
                                requestedPorts=["http"]),
                assignedPorts={"http": 1001},
                instanceId=instance),
                                 status=2,
                                 failureCount=instance + 4,
                                 taskEvents=create_task_events(start_time),
                                 ancestorId="random_task_ancestor%s" %
                                 instance)
            return task

        resp = cls.create_simple_success_response()
        scheduleStatus = ScheduleStatusResult()
        scheduleStatus.tasks = [
            create_scheduled_task(0, 123456),
            create_scheduled_task(1, 234567)
        ]
        resp.result = Result(scheduleStatusResult=scheduleStatus)
        return resp
Example #2
0
    def get_task_status_json(cls):
        def create_task_events(start_time):
            """Create a list of task events, tracing the task from pending to assigned to running"""
            return [
                TaskEvent(timestamp=start_time,
                          status=0,
                          message="looking for a host"),
                TaskEvent(timestamp=start_time + 10,
                          status=9,
                          message="found a host"),
                TaskEvent(timestamp=start_time + 20,
                          status=2,
                          message="running")
            ]

        def create_scheduled_task(instance, start_time):
            task = ScheduledTask()
            task.assignedTask = AssignedTask()
            task.assignedTask.taskId = "task_%s" % instance
            task.assignedTask.slaveId = "random_machine_id"
            task.assignedTask.slaveHost = "junk.nothing"
            task.assignedTask.task = TaskConfig()
            task.assignedTask.task.owner = Identity(role="nobody")
            task.assignedTask.task.environment = "prod"
            task.assignedTask.task.jobName = "flibber"
            task.assignedTask.task.isService = False
            task.assignedTask.task.numCpus = 2
            task.assignedTask.task.ramMb = 2048
            task.assignedTask.task.diskMb = 4096
            task.assignedTask.task.priority = 7
            task.assignedTask.task.maxTaskFailures = 3
            task.assignedTask.task.production = False
            task.assignedTask.task.requestedPorts = ["http"]
            task.assignedTask.assignedPorts = {"http": 1001}
            task.assignedTask.instanceId = 0
            task.status = 2
            task.failureCount = instance + 4
            task.taskEvents = create_task_events(start_time)
            task.ancestorId = "random_task_ancestor%s" % instance
            return task

        resp = cls.create_simple_success_response()
        scheduleStatus = ScheduleStatusResult()
        scheduleStatus.tasks = [
            create_scheduled_task(0, 123456),
            create_scheduled_task(1, 234567)
        ]
        resp.result.scheduleStatusResult = scheduleStatus
        return resp
 def mock_scheduler(cls, response_code=None):
   scheduler = Mock()
   response_code = ResponseCode.OK if response_code is None else response_code
   resp = Response(responseCode=response_code, messageDEPRECATED='test')
   resp.result = Result(scheduleStatusResult=ScheduleStatusResult(tasks=cls.create_tasks()))
   scheduler.getTasksWithoutConfigs.return_value = resp
   return scheduler
Example #4
0
    def test_kill_job_with_empty_instances_batched(self):
        """Test kill client-side API logic."""
        mock_context = FakeAuroraCommandContext()
        with contextlib.nested(
                patch('apache.aurora.client.cli.jobs.Job.create_context',
                      return_value=mock_context),
                patch('apache.aurora.client.factory.CLUSTERS',
                      new=self.TEST_CLUSTERS)):
            api = mock_context.get_api('west')
            # set up an empty instance list in the getTasksWithoutConfigs response
            status_response = self.create_simple_success_response()
            status_response.result = Result(
                scheduleStatusResult=ScheduleStatusResult(tasks=[]))
            mock_context.add_expected_query_result(status_response)
            api.kill_job.return_value = self.create_simple_success_response()

            with temporary_file() as fp:
                fp.write(self.get_valid_config())
                fp.flush()
                cmd = AuroraCommandLine()
                cmd.execute([
                    'job', 'kill',
                    '--config=%s' % fp.name,
                    self.get_instance_spec('0,2,4-13')
                ])

            assert api.kill_job.call_count == 0
Example #5
0
 def create_mock_status_query_result(cls, scheduleStatus):
   query_result = cls.create_simple_success_response()
   query_result.result = Result(scheduleStatusResult=ScheduleStatusResult(tasks=[
       cls.create_scheduled_task(0, initial_time=1000, status=scheduleStatus),
       cls.create_scheduled_task(1, initial_time=1004, status=scheduleStatus)
   ]))
   return query_result
 def mock_get_tasks(self, tasks, response_code=None):
     response_code = ResponseCode.OK if response_code is None else response_code
     resp = Response(responseCode=response_code,
                     details=[ResponseDetail(message='test')])
     resp.result = Result(scheduleStatusResult=ScheduleStatusResult(
         tasks=tasks))
     self._scheduler.getTasksWithoutConfigs.return_value = resp
Example #7
0
    def setup_get_tasks_status_calls(cls, scheduler):
        status_response = cls.create_simple_success_response()
        scheduler.getTasksStatus.return_value = status_response
        scheduler.getTasksWithoutConfigs.return_value = status_response
        task_config = TaskConfig(numCpus=1.0,
                                 ramMb=10,
                                 diskMb=1,
                                 job=JobKey(role='bozo',
                                            environment='test',
                                            name='hello'))

        # This should be a list of ScheduledTask's.
        tasks = []
        for i in range(20):
            task_status = create_autospec(spec=ScheduledTask, instance=True)
            task_status.assignedTask = create_autospec(spec=AssignedTask,
                                                       instance=True)
            task_status.assignedTask.instanceId = i
            task_status.assignedTask.taskId = "Task%s" % i
            task_status.assignedTask.slaveId = "Slave%s" % i
            task_status.slaveHost = "Slave%s" % i
            task_status.assignedTask.task = task_config
            tasks.append(task_status)
        status_response.result = Result(
            scheduleStatusResult=ScheduleStatusResult(tasks=tasks))
Example #8
0
 def expect_get_tasks(self, tasks, ignore_ids=None, response_code=ResponseCode.OK):
   scheduled = []
   for index, task in enumerate(tasks):
     if not ignore_ids or index not in ignore_ids:
       scheduled.append(ScheduledTask(assignedTask=AssignedTask(task=task, instanceId=index)))
   response = make_response(response_code)
   response.result = Result(scheduleStatusResult=ScheduleStatusResult(tasks=scheduled))
   query = TaskQuery(jobKeys=[self._job_key], statuses=ACTIVE_STATES)
   self._scheduler.getTasksStatus(query).AndReturn(response)
Example #9
0
 def mock_status_active_tasks(self, instance_ids):
   tasks = []
   for i in instance_ids:
     tasks.append(ScheduledTask(
         status=ScheduleStatus.RUNNING,
         assignedTask=AssignedTask(task=TaskConfig(), instanceId=i)
     ))
   response = make_response(result=Result(scheduleStatusResult=ScheduleStatusResult(tasks=tasks)))
   self.mock_scheduler.getTasksWithoutConfigs(IgnoreArg()).AndReturn(response)
Example #10
0
 def mock_scheduler(cls, response_code=None):
     scheduler = create_autospec(spec=SchedulerThriftApiSpec, instance=True)
     response_code = ResponseCode.OK if response_code is None else response_code
     resp = Response(responseCode=response_code,
                     details=[ResponseDetail(message='test')])
     resp.result = Result(scheduleStatusResult=ScheduleStatusResult(
         tasks=cls.create_tasks()))
     scheduler.getTasksWithoutConfigs.return_value = resp
     return scheduler
Example #11
0
  def get_task_status_json(cls):
    def create_task_events(start_time):
      """Create a list of task events, tracing the task from pending to assigned to running"""
      return [
          TaskEvent(timestamp=start_time, status=0, message="looking for a host"),
          TaskEvent(timestamp=start_time + 10, status=9, message="found a host"),
          TaskEvent(timestamp=start_time + 20, status=2, message="running")
      ]

    def create_scheduled_task(instance, start_time):
      task = ScheduledTask(
        assignedTask=AssignedTask(
          taskId="task_%s" % instance,
          slaveId="random_machine_id",
          slaveHost="junk.nothing",
          task=TaskConfig(
            job=JobKey(role="nobody", environment="prod", name='flibber'),
            owner=Identity(role="nobody"),
            environment="prod",
            jobName="flibber",
            isService=False,
            numCpus=2,
            ramMb=2048,
            diskMb=4096,
            priority=7,
            maxTaskFailures=3,
            production=False,
            requestedPorts=["http"]),
          assignedPorts={"http": 1001},
          instanceId=instance),
        status=2,
        failureCount=instance + 4,
        taskEvents=create_task_events(start_time),
        ancestorId="random_task_ancestor%s" % instance)
      return task

    resp = cls.create_simple_success_response()
    scheduleStatus = ScheduleStatusResult()
    scheduleStatus.tasks = [
      create_scheduled_task(0, 123456),
      create_scheduled_task(1, 234567)
    ]
    resp.result.scheduleStatusResult = scheduleStatus
    return resp
Example #12
0
  def get_task_status_json(cls):
    def create_task_events(start_time):
      """Create a list of task events, tracing the task from pending to assigned to running"""
      return [
          TaskEvent(timestamp=start_time, status=0, message="looking for a host"),
          TaskEvent(timestamp=start_time + 10, status=9, message="found a host"),
          TaskEvent(timestamp=start_time + 20, status=2, message="running")
      ]

    def create_scheduled_task(instance, start_time):
      task = ScheduledTask()
      task.assignedTask = AssignedTask()
      task.assignedTask.taskId = "task_%s" % instance
      task.assignedTask.slaveId = "random_machine_id"
      task.assignedTask.slaveHost = "junk.nothing"
      task.assignedTask.task = TaskConfig()
      task.assignedTask.task.owner = Identity(role="nobody")
      task.assignedTask.task.environment = "prod"
      task.assignedTask.task.jobName = "flibber"
      task.assignedTask.task.isService = False
      task.assignedTask.task.numCpus = 2
      task.assignedTask.task.ramMb = 2048
      task.assignedTask.task.diskMb = 4096
      task.assignedTask.task.priority = 7
      task.assignedTask.task.maxTaskFailures = 3
      task.assignedTask.task.production = False
      task.assignedTask.task.requestedPorts = ["http"]
      task.assignedTask.assignedPorts = {"http": 1001}
      task.assignedTask.instanceId = 0
      task.status = 2
      task.failureCount = instance + 4
      task.taskEvents = create_task_events(start_time)
      task.ancestorId = "random_task_ancestor%s" % instance
      return task

    resp = cls.create_simple_success_response()
    scheduleStatus = ScheduleStatusResult()
    scheduleStatus.tasks = [
      create_scheduled_task(0, 123456),
      create_scheduled_task(1, 234567)
    ]
    resp.result.scheduleStatusResult = scheduleStatus
    return resp
Example #13
0
 def create_mock_status_query_result(cls, scheduleStatus):
   mock_query_result = cls.create_simple_success_response()
   if scheduleStatus == ScheduleStatus.INIT:
     # status query result for before job is launched.
     tasks = []
   else:
     mock_task_one = cls.create_scheduled_task(0, initial_time=1000, status=scheduleStatus)
     mock_task_two = cls.create_scheduled_task(1, initial_time=1004, status=scheduleStatus)
     tasks = [mock_task_one, mock_task_two]
   mock_query_result.result = Result(scheduleStatusResult=ScheduleStatusResult(tasks=tasks))
   return mock_query_result
Example #14
0
    def expect_get_statuses(self,
                            instance_ids=WATCH_INSTANCES,
                            num_calls=EXPECTED_CYCLES):
        tasks = [self.create_task(instance_id) for instance_id in instance_ids]
        response = Response(responseCode=ResponseCode.OK,
                            messageDEPRECATED='test')
        response.result = Result()
        response.result.scheduleStatusResult = ScheduleStatusResult(
            tasks=tasks)

        query = self.get_tasks_status_query(instance_ids)
        for x in range(int(num_calls)):
            self._scheduler.getTasksWithoutConfigs(query).AndReturn(response)
Example #15
0
    def expect_get_statuses(self,
                            instance_ids=WATCH_INSTANCES,
                            num_calls=EXPECTED_CYCLES):
        tasks = [self.create_task(instance_id) for instance_id in instance_ids]
        response = Response(
            responseCode=ResponseCode.OK,
            details=[ResponseDetail(message='test')],
            result=Result(scheduleStatusResult=ScheduleStatusResult(
                tasks=tasks)))

        query = self.get_tasks_status_query(instance_ids)
        for _ in range(int(num_calls)):
            self._scheduler.getTasksWithoutConfigs(
                query, retry=True).AndReturn(response)
Example #16
0
    def mock_status_active_tasks(self, instance_ids):
        tasks = []
        for i in instance_ids:
            tasks.append(
                ScheduledTask(status=ScheduleStatus.RUNNING,
                              assignedTask=AssignedTask(task=TaskConfig(),
                                                        instanceId=i)))
        response = Response(responseCode=ResponseCode.OK,
                            messageDEPRECATED='test')
        response.result = Result()
        response.result.scheduleStatusResult = ScheduleStatusResult(
            tasks=tasks)

        self.mock_scheduler.getTasksWithoutConfigs(
            IgnoreArg()).AndReturn(response)
Example #17
0
 def expect_get_tasks(self, tasks, ignore_ids=None, response_code=None):
     response_code = ResponseCode.OK if response_code is None else response_code
     response = Response(responseCode=response_code,
                         messageDEPRECATED='test')
     scheduled = []
     for index, task in enumerate(tasks):
         if not ignore_ids or index not in ignore_ids:
             scheduled.append(
                 ScheduledTask(assignedTask=AssignedTask(task=task,
                                                         instanceId=index)))
     response.result = Result(scheduleStatusResult=ScheduleStatusResult(
         tasks=scheduled))
     query = TaskQuery(owner=Identity(role=self._job_key.role),
                       environment=self._job_key.environment,
                       jobName=self._job_key.name,
                       statuses=ACTIVE_STATES)
     self._scheduler.getTasksStatus(query).AndReturn(response)
Example #18
0
    def test_kill_job_with_empty_instances_batched(self):
        """Test kill client-side API logic."""
        mock_context = FakeAuroraCommandContext()
        with contextlib.nested(
                patch('apache.aurora.client.cli.jobs.Job.create_context',
                      return_value=mock_context)):
            api = mock_context.get_api('west')
            mock_context.add_expected_query_result(
                self.create_query_call_result(), job_key=self.TEST_JOBKEY)
            # set up an empty instance list in the getTasksWithoutConfigs response
            status_response = self.create_simple_success_response()
            status_response.result = Result(
                scheduleStatusResult=ScheduleStatusResult(tasks=[]))
            mock_context.add_expected_query_result(status_response)
            api.kill_job.return_value = self.create_simple_success_response()
            cmd = AuroraCommandLine()
            cmd.execute(['job', 'kill', self.get_instance_spec('0,2,4-13')])

            assert api.kill_job.call_count == 0
            self.assert_query(api, times=2)
Example #19
0
 def create_response(cls, tasks, response_code=None):
     response_code = ResponseCode.OK if response_code is None else response_code
     resp = Response(responseCode=response_code, messageDEPRECATED='test')
     resp.result = Result(scheduleStatusResult=ScheduleStatusResult(
         tasks=tasks))
     return resp
Example #20
0
 def create_nojob_status_response(cls):
     resp = cls.create_simple_success_response()
     resp.result.scheduleStatusResult = ScheduleStatusResult()
     resp.result.scheduleStatusResult.tasks = []
     return resp
Example #21
0
 def create_response(cls, tasks, response_code=ResponseCode.OK):
     return Response(
         responseCode=response_code,
         details=[ResponseDetail(message='test')],
         result=Result(scheduleStatusResult=ScheduleStatusResult(
             tasks=tasks)))
Example #22
0
 def create_empty_status(cls):
     resp = cls.create_simple_success_response()
     resp.result = Result(scheduleStatusResult=ScheduleStatusResult(
         tasks=None))
     return resp
Example #23
0
 def create_status_response(cls):
     resp = cls.create_simple_success_response()
     resp.result = Result(scheduleStatusResult=ScheduleStatusResult(
         tasks=cls.create_scheduled_tasks()))
     return resp
Example #24
0
 def create_empty_task_result(cls):
     status_response = cls.create_simple_success_response()
     status_response.result = Result(
         scheduleStatusResult=ScheduleStatusResult(tasks=[]))
     return status_response
Example #25
0
 def create_status_with_metadata(cls):
     resp = cls.create_simple_success_response()
     resp.result = Result(scheduleStatusResult=ScheduleStatusResult(
         tasks=set(cls.create_mock_scheduled_task_with_metadata())))
     return resp