Example #1
0
    def start_schedule(self, instance, external_schedule):
        check.inst_param(instance, "instance", DagsterInstance)
        check.inst_param(external_schedule, "external_schedule",
                         ExternalSchedule)
        schedule_origin_id = external_schedule.get_origin_id()

        # If the cron job already exists, remove it. This prevents duplicate entries.
        # Then, add a new cron job to the cron tab.
        if self.running_schedule_count(instance,
                                       external_schedule.get_origin_id()) > 0:
            self._end_cron_job(instance, schedule_origin_id)

        self._start_cron_job(instance, external_schedule)

        # Verify that the cron job is running
        running_schedule_count = self.running_schedule_count(
            instance, schedule_origin_id)
        if running_schedule_count == 0:
            raise DagsterSchedulerError(
                "Attempted to write cron job for schedule "
                "{schedule_name}, but failed. "
                "The scheduler is not running {schedule_name}.".format(
                    schedule_name=external_schedule.name))
        elif running_schedule_count > 1:
            raise DagsterSchedulerError(
                "Attempted to write cron job for schedule "
                "{schedule_name}, but duplicate cron jobs were found. "
                "There are {running_schedule_count} jobs running for the schedule."
                "To resolve, run `dagster schedule up`, or edit the cron tab to "
                "remove duplicate schedules".format(
                    schedule_name=external_schedule.name,
                    running_schedule_count=running_schedule_count,
                ))
Example #2
0
    def start_schedule(self, instance, repository_name, schedule_name):
        check.inst_param(instance, 'instance', DagsterInstance)
        check.str_param(repository_name, 'repository_name')
        check.str_param(schedule_name, 'schedule_name')

        schedule = self._get_schedule_by_name(instance, repository_name, schedule_name)

        # If the cron job already exists, remove it. This prevents duplicate entries.
        # Then, add a new cron job to the cron tab.
        if self.running_schedule_count(repository_name, schedule.name) > 0:
            self._end_cron_job(instance, repository_name, schedule)

        self._start_cron_job(instance, repository_name, schedule)

        # Verify that the cron job is running
        running_schedule_count = self.running_schedule_count(repository_name, schedule.name)
        if running_schedule_count == 0:
            raise DagsterSchedulerError(
                "Attempted to write cron job for schedule "
                "{schedule_name}, but failed. "
                "The scheduler is not running {schedule_name}.".format(schedule_name=schedule.name)
            )
        elif running_schedule_count > 1:
            raise DagsterSchedulerError(
                "Attempted to write cron job for schedule "
                "{schedule_name}, but duplicate cron jobs were found. "
                "There are {running_schedule_count} jobs running for the schedule."
                "To resolve, run `dagster schedule up`, or edit the cron tab to "
                "remove duplicate schedules".format(
                    schedule_name=schedule.name, running_schedule_count=running_schedule_count
                )
            )
Example #3
0
    def wipe(self, instance):
        # Note: This method deletes schedules from ALL repositories
        check.inst_param(instance, 'instance', DagsterInstance)

        self._api.delete_collection_namespaced_cron_job(namespace=self._namespace)
        time.sleep(self.grace_period_seconds)

        # Verify that no cron jobs are running
        running_cron_job_count = len(self.get_all_cron_jobs())
        if running_cron_job_count != 0:
            raise DagsterSchedulerError(
                'Attempted to delete all K8s CronJobs but failed. There are '
                'still {} running schedules'.format(running_cron_job_count)
            )
Example #4
0
    def stop_schedule(self, instance, schedule_origin_id):
        check.inst_param(instance, "instance", DagsterInstance)
        check.str_param(schedule_origin_id, "schedule_origin_id")

        if self.get_cron_job(schedule_origin_id):
            self._end_cron_job(schedule_origin_id=schedule_origin_id)

        cron_job = self.get_cron_job(schedule_origin_id)
        if cron_job:
            schedule = self._get_schedule_state(instance, schedule_origin_id)

            raise DagsterSchedulerError(
                "Attempted to remove existing K8s CronJob for schedule "
                "{schedule_name}, but failed. Schedule is still running.".
                format(schedule_name=schedule.name))
Example #5
0
    def start_schedule(self, instance, external_schedule):
        check.inst_param(instance, "instance", DagsterInstance)
        check.inst_param(external_schedule, "external_schedule", ExternalSchedule)

        self._start_cron_job(external_schedule)

        # Verify that the cron job is running
        cron_job = self.get_cron_job(schedule_origin_id=external_schedule.get_external_origin_id())
        if not cron_job:
            raise DagsterSchedulerError(
                "Attempted to add K8s CronJob for schedule {schedule_name}, but failed. "
                "The schedule {schedule_name} is not running.".format(
                    schedule_name=external_schedule.name
                )
            )
        return
Example #6
0
    def stop_schedule(self, instance, schedule_origin_id):
        check.inst_param(instance, "instance", DagsterInstance)
        check.str_param(schedule_origin_id, "schedule_origin_id")

        schedule = self._get_schedule_state(instance, schedule_origin_id)

        self._end_cron_job(instance, schedule_origin_id)

        # Verify that the cron job has been removed
        running_schedule_count = self.running_schedule_count(
            instance, schedule_origin_id)
        if running_schedule_count > 0:
            raise DagsterSchedulerError(
                "Attempted to remove existing cron job for schedule "
                "{schedule_name}, but failed. "
                "There are still {running_schedule_count} jobs running for the schedule."
                .format(schedule_name=schedule.name,
                        running_schedule_count=running_schedule_count))
Example #7
0
    def stop_schedule(self, instance, repository_name, schedule_name):
        check.inst_param(instance, 'instance', DagsterInstance)
        check.str_param(repository_name, 'repository_name')
        check.str_param(schedule_name, 'schedule_name')

        schedule = self._get_schedule_by_name(instance, repository_name, schedule_name)

        self._end_cron_job(instance, repository_name, schedule)

        # Verify that the cron job has been removed
        running_schedule_count = self.running_schedule_count(repository_name, schedule.name)
        if running_schedule_count > 0:
            raise DagsterSchedulerError(
                "Attempted to remove existing cron job for schedule "
                "{schedule_name}, but failed. "
                "There are still {running_schedule_count} jobs running for the schedule.".format(
                    schedule_name=schedule.name, running_schedule_count=running_schedule_count
                )
            )
Example #8
0
    def start_schedule(self, instance, external_schedule):
        check.inst_param(instance, 'instance', DagsterInstance)
        check.inst_param(external_schedule, 'external_schedule',
                         ExternalSchedule)

        schedule_origin_id = external_schedule.get_origin_id()
        should_patch_schedule = (True if self.get_cron_job(
            schedule_origin_id=schedule_origin_id) else False)

        self._start_cron_job(external_schedule, should_patch_schedule)

        # Verify that the cron job is running
        cron_job = self.get_cron_job(schedule_origin_id)
        if not cron_job:
            raise DagsterSchedulerError(
                "Attempted to add K8s CronJob for schedule {schedule_name}, but failed. "
                "The schedule {schedule_name} is not running.".format(
                    schedule_name=external_schedule.name))
        return