Exemple #1
0
    def handle_task(self):
        flag = self.find_flag()
        if flag:
            failed = False
            try:
                self.handle_flag(flag)
            except MuleTaskFailed:
                failed = True
            finally:
                self.unlock_flag(flag)
                self.remove_logger()
                self.task_completed()
            if failed:
                return True

            if flag.name in SINGLE_SHOT_FLAGS:
                ApplicationFlag.objects(application=flag.application,
                                        name=flag.name,
                                        pending=False).delete()
            else:
                flag.update(pull__pending_backends=self.backend)
                ApplicationFlag.objects(application=flag.application,
                                        name=flag.name,
                                        pending_backends__size=0).delete()
            self.cleanup()
            return True

        return False
Exemple #2
0
 def reset_pending_state(self, lock):
     if lock.flag in SINGLE_SHOT_FLAGS:
         ApplicationFlag.objects(
             application=lock.application, name=lock.flag,
             pending=False).update_one(set__pending=True)
     else:
         ApplicationFlag.objects(
             application=lock.application, name=lock.flag,
             pending_backends__ne=lock.backend).update_one(
                 add_to_set__pending_backends=lock.backend)
 def handle_task(self):
     task_handled = super(Command, self).handle_task()
     if task_handled:
         return task_handled
     if self.last_app_check and self.last_app_check >= (
             datetime.now() - timedelta(seconds=60)):
         return False
     self.last_app_check = datetime.now()
     for app in ApplicationRunPlan.objects(
             backends__backend=self.backend).distinct('application'):
         if app.flags:
             continue
         if not self.is_application_running(app):
             log.info(_("Application {name} is not running, "
                        "starting").format(name=app.name))
             ApplicationFlag.objects(
                 application=app, name=IsStartingFlag.name).update_one(
                     add_to_set__pending_backends=self.backend, upsert=True)
         elif not self.is_vassal_config_valid(app):
             log.info(_("Application {name} vassal config is invalid, "
                        "restarting").format(name=app.name))
             ApplicationFlag.objects(
                 application=app, name=NeedsRestartFlag.name).update_one(
                     add_to_set__pending_backends=self.backend, upsert=True)
         else:
             run_plan = app.run_plan
             if run_plan and not run_plan.is_valid():
                 log.info(_("Application {name} run plan is invalid, "
                            "rescheduling").format(name=app.name))
                 ApplicationFlag.objects(
                     application=app,
                     name=NeedsReschedulingFlag.name).update_one(
                         unset__pending=True, upsert=True)
Exemple #4
0
 def flag_filter(self):
     single_shot_flags = []
     multi_show_flags = []
     for flag in self.mule_flags:
         if flag in SINGLE_SHOT_FLAGS:
             single_shot_flags.append(flag)
         else:
             multi_show_flags.append(flag)
     return ApplicationFlag.objects(
         (
             Q(pending__ne=False) &
             Q(name__in=single_shot_flags) &
             Q(application__nin=FlagLock.objects(
                 flag__in=single_shot_flags).distinct('application'))
         ) | (
             Q(pending_backends=self.backend) &
             Q(name__in=multi_show_flags) &
             Q(application__nin=FlagLock.objects(
                 flag__in=multi_show_flags,
                 backend=self.backend).distinct('application'))
         )
     )