Exemplo n.º 1
0
    def test_determine_error(self):
        """Tests that a pre-task successfully determines the correct error"""

        scale_errors = [
            ScaleDatabaseError(),
            ScaleIOError(),
            ScaleOperationalError(),
            MissingSetting('')
        ]

        for scale_error in scale_errors:
            config = ExecutionConfiguration()
            config.create_tasks(['pre'])
            config.set_task_ids(self.job_exe.get_cluster_id())
            task = PreTask('agent_1', self.job_exe, self.job_exe.job_type,
                           config)
            update = job_test_utils.create_task_status_update(
                task.id, task.agent_id, TaskStatusUpdate.RUNNING, now())
            task.update(update)
            update = job_test_utils.create_task_status_update(
                task.id,
                task.agent_id,
                TaskStatusUpdate.FAILED,
                now(),
                exit_code=scale_error.exit_code)
            error = task.determine_error(update)
            self.assertEqual(scale_error.error_name, error.name)
Exemplo n.º 2
0
Arquivo: apps.py Projeto: Fizz11/scale
    def ready(self):
        """Registers components related to jobs"""

        # Register job errors
        from error.exceptions import register_error
        from job.configuration.exceptions import MissingMount, MissingSetting
        from job.configuration.results.exceptions import InvalidResultsManifest, MissingRequiredOutput

        register_error(InvalidResultsManifest(''))
        register_error(MissingMount(''))
        register_error(MissingRequiredOutput(''))
        register_error(MissingSetting(''))

        # Register job message types
        from job.messages.blocked_jobs import BlockedJobs
        from job.messages.failed_jobs import FailedJobs
        from job.messages.job_exe_end import CreateJobExecutionEnd
        from job.messages.pending_jobs import PendingJobs
        from job.messages.running_jobs import RunningJobs
        from messaging.messages.factory import add_message_type

        add_message_type(BlockedJobs)
        add_message_type(FailedJobs)
        add_message_type(CreateJobExecutionEnd)
        add_message_type(PendingJobs)
        add_message_type(RunningJobs)
Exemplo n.º 3
0
    def validate_populated_settings(self, exe_configuration):
        """Ensures that all required settings are defined in the execution configuration

        :param exe_configuration: The execution configuration
        :type exe_configuration: :class:`job.configuration.json.execution.exe_config.ExecutionConfiguration`
        """

        for name, value in exe_configuration.get_settings('main').items():
            if value is None:
                raise MissingSetting('Required setting %s was not provided' % name)
Exemplo n.º 4
0
    def ready(self):
        """Registers job errors"""
        from error.exceptions import register_error
        from job.configuration.exceptions import MissingMount, MissingSetting
        from job.configuration.results.exceptions import InvalidResultsManifest, MissingRequiredOutput

        register_error(InvalidResultsManifest(''))
        register_error(MissingMount(''))
        register_error(MissingRequiredOutput(''))
        register_error(MissingSetting(''))
Exemplo n.º 5
0
    def validate_populated_settings(self, exe_configuration):
        """Ensures that all required settings are defined in the execution configuration

        :param exe_configuration: The execution configuration
        :type exe_configuration: :class:`job.configuration.json.execution.exe_config.ExecutionConfiguration`
        """

        interface_settings = self.definition['settings']
        config_setting_names = [
            setting.name
            for setting in exe_configuration.get_job_task_settings()
        ]

        for setting in interface_settings:
            setting_name = setting['name']
            setting_is_required = setting['required']

            if setting_is_required:
                if setting_name not in config_setting_names:
                    raise MissingSetting(
                        'Required setting %s was not provided' % setting_name)
Exemplo n.º 6
0
    def test_determine_error(self):
        """Tests that a pre-task successfully determines the correct error"""

        scale_errors = [
            ScaleDatabaseError(),
            ScaleIOError(),
            ScaleOperationalError(),
            MissingSetting('')
        ]

        for scale_error in scale_errors:
            task = PreTask(self.job_exe)
            update = job_test_utils.create_task_status_update(
                task.id, task.agent_id, TaskStatusUpdate.RUNNING, now())
            task.update(update)
            update = job_test_utils.create_task_status_update(
                task.id,
                task.agent_id,
                TaskStatusUpdate.FAILED,
                now(),
                exit_code=scale_error.exit_code)
            error = task.determine_error(update)
            self.assertEqual(scale_error.error_name, error.name)
Exemplo n.º 7
0
    def validate_populated_settings(self, job_exe, job_configuration):
        """Ensures that all required settings are defined in the job_configuration

        :param job_exe: The job execution model with related job and job_type fields
        :type job_exe: :class:`job.models.JobExecution`
        :param job_configuration: The job configuration
        :type job_configuration: :class:`job.configuration.json.execution.exe_config.ExecutionConfiguration`
        """

        interface_settings = self.definition['settings']
        config_setting_names = [
            setting.name
            for setting in job_configuration.get_job_task_settings()
        ]

        for setting in interface_settings:
            setting_name = setting['name']
            setting_required = setting['required']

            if setting_required:
                if setting_name not in config_setting_names:
                    raise MissingSetting(
                        'Required setting %s was not provided' % setting_name)