def schedule_backup(self, **kwargs):

        try:
            backup = Backup()
            backup.created_date = date_now()
            backup.strategy = get_validate_arg(kwargs,
                                               "strategy",
                                               expected_type=BackupStrategy)
            backup.source = get_validate_arg(kwargs, "source", BackupSource)
            backup.target = get_validate_arg(kwargs, "target", BackupTarget)
            backup.priority = get_validate_arg(kwargs,
                                               "priority",
                                               expected_type=(int, long, float,
                                                              complex),
                                               required=False)
            backup.plan_occurrence = \
                get_validate_arg(kwargs, "plan_occurrence",
                                 expected_type=datetime,
                                 required=False)
            backup.plan = get_validate_arg(kwargs,
                                           "plan",
                                           expected_type=BackupPlan,
                                           required=False)

            backup.secondary_targets = get_validate_arg(kwargs,
                                                        "secondary_targets",
                                                        expected_type=list,
                                                        required=False)

            backup.change_state(State.SCHEDULED)
            # set tags
            tags = get_validate_arg(kwargs,
                                    "tags",
                                    expected_type=dict,
                                    required=False)

            backup.tags = tags

            bc = get_mbs().backup_collection
            try:
                # resolve tags

                self._resolve_task_tags(backup)
            except Exception, ex:
                self._task_failed_to_schedule(backup, bc, ex)

            backup_doc = backup.to_document()
            get_mbs().backup_collection.save_document(backup_doc)
            # set the backup id from the saved doc

            backup.id = backup_doc["_id"]

            self.info("Saved backup \n%s" % backup)

            if backup.state == State.FAILED:
                trigger_task_finished_event(backup, State.FAILED)

            return backup
Ejemplo n.º 2
0
    def worker_finished(self, state, message=None):

        # set end date
        self._task.end_date = date_now()
        self._task.state = state
        self.get_task_collection().update_task(
            self._task, properties=["state", "endDate", "nextRetryDate", "finalRetryDate", "cleanedUp"],
            event_name=EVENT_STATE_CHANGE, message=message)

        trigger_task_finished_event(self._task, state)
    def schedule_backup(self, **kwargs):

        try:
            backup = Backup()
            backup.created_date = date_now()
            backup.strategy = get_validate_arg(kwargs, "strategy",
                                               expected_type=BackupStrategy)
            backup.source = get_validate_arg(kwargs, "source", BackupSource)
            backup.target = get_validate_arg(kwargs, "target", BackupTarget)
            backup.priority = get_validate_arg(kwargs, "priority",
                                               expected_type=(int, long,
                                                              float, complex),
                                               required=False)
            backup.plan_occurrence = \
                get_validate_arg(kwargs, "plan_occurrence",
                                 expected_type=datetime,
                                 required=False)
            backup.plan = get_validate_arg(kwargs, "plan",
                                           expected_type=BackupPlan,
                                           required=False)

            backup.secondary_targets = get_validate_arg(kwargs,
                                                        "secondary_targets",
                                                        expected_type=list,
                                                        required=False)

            backup.change_state(State.SCHEDULED)
            # set tags
            tags = get_validate_arg(kwargs, "tags", expected_type=dict,
                                    required=False)

            backup.tags = tags

            bc = get_mbs().backup_collection
            try:
                # resolve tags

                self._resolve_task_tags(backup)
            except Exception, ex:
                self._task_failed_to_schedule(backup, bc, ex)

            self.set_custom_backup_props(backup)

            backup_doc = backup.to_document()
            get_mbs().backup_collection.save_document(backup_doc)
            # set the backup id from the saved doc

            backup.id = backup_doc["_id"]

            self.info("Saved backup \n%s" % backup)

            if backup.state == State.FAILED:
                trigger_task_finished_event(backup, State.FAILED)

            return backup
        if reset_try_count or force:
            backup.try_count = 0
            props.append("tryCount")
        # regenerate backup tags if backup belongs to a plan
        if backup.plan and backup.plan.tags:
            backup.tags = backup.plan.tags.copy()

        try:
            self._resolve_task_tags(backup)
        except Exception, ex:
            self._task_failed_to_schedule(backup, bc, ex)

        if backup.state == State.FAILED:
            if not get_mbs().event_queue:
                get_mbs().notifications.notify_task_reschedule_failed(backup)
            trigger_task_finished_event(backup, State.FAILED)

        bc.update_task(backup, properties=props,
                       event_name=EVENT_STATE_CHANGE,
                       message="Rescheduling")


    ###########################################################################
    def reschedule_restore(self, restore, force=False):
        """
            Reschedules the restore IF state is FAILED
        """
        if restore.state != State.FAILED:
            msg = ("Cannot reschedule restore ('%s', '%s'). Rescheduling is "
                   "only allowed for restores whose state is '%s'." %
                   (restore.id, restore.state, State.FAILED))