Switch to unified view

a/Allura/allura/command/taskd.py b/Allura/allura/command/taskd.py
...
...
29
        self.keep_running = True
29
        self.keep_running = True
30
        self.restart_when_done = False
30
        self.restart_when_done = False
31
        base.log.info('Starting taskd, pid %s' % os.getpid())
31
        base.log.info('Starting taskd, pid %s' % os.getpid())
32
        signal.signal(signal.SIGUSR1, self.graceful_restart)
32
        signal.signal(signal.SIGUSR1, self.graceful_restart)
33
        signal.signal(signal.SIGUSR2, self.graceful_stop)
33
        signal.signal(signal.SIGUSR2, self.graceful_stop)
34
        signal.signal(signal.SIGTRAP, self.log_current_task)
34
        self.worker()
35
        self.worker()
35
36
36
    def graceful_restart(self, signum, frame):
37
    def graceful_restart(self, signum, frame):
37
        base.log.info('taskd pid %s recieved signal %s preparing to do a graceful restart' % (os.getpid(), signum))
38
        base.log.info('taskd pid %s recieved signal %s preparing to do a graceful restart' % (os.getpid(), signum))
38
        self.keep_running = False
39
        self.keep_running = False
39
        self.restart_when_done = True
40
        self.restart_when_done = True
40
41
41
    def graceful_stop(self, signum, frame):
42
    def graceful_stop(self, signum, frame):
42
        base.log.info('taskd pid %s recieved signal %s preparing to do a graceful stop' % (os.getpid(), signum))
43
        base.log.info('taskd pid %s recieved signal %s preparing to do a graceful stop' % (os.getpid(), signum))
43
        self.keep_running = False
44
        self.keep_running = False
45
46
    def log_current_task(self, signum, frame):
47
        base.log.info('taskd pid %s is currently handling task %s' % (os.getpid(), getattr(self, 'task', None)))
44
48
45
    def worker(self):
49
    def worker(self):
46
        from allura import model as M
50
        from allura import model as M
47
        name = '%s pid %s' % (os.uname()[1], os.getpid())
51
        name = '%s pid %s' % (os.uname()[1], os.getpid())
48
        wsgi_app = loadapp('config:%s#task' % self.args[0],relative_to=os.getcwd())
52
        wsgi_app = loadapp('config:%s#task' % self.args[0],relative_to=os.getcwd())
...
...
80
        while self.keep_running:
84
        while self.keep_running:
81
            if pylons.g.amq_conn:
85
            if pylons.g.amq_conn:
82
                pylons.g.amq_conn.reset()
86
                pylons.g.amq_conn.reset()
83
            try:
87
            try:
84
                while self.keep_running:
88
                while self.keep_running:
85
                    task = M.MonQTask.get(
89
                    self.task = M.MonQTask.get(
86
                            process=name,
90
                            process=name,
87
                            waitfunc=waitfunc,
91
                            waitfunc=waitfunc,
88
                            only=only,
92
                            only=only,
89
                            exclude=exclude)
93
                            exclude=exclude)
90
                    if task:
94
                    if self.task:
91
                        # Build the (fake) request
95
                        # Build the (fake) request
92
                        r = Request.blank('/--%s--/' % task.task_name, dict(task=task))
96
                        r = Request.blank('/--%s--/' % self.task.task_name, dict(task=self.task))
93
                        list(wsgi_app(r.environ, start_response))
97
                        list(wsgi_app(r.environ, start_response))
98
                        self.task = None
94
            except Exception:
99
            except Exception:
95
                base.log.exception('taskd error; pausing for 10s before taking more tasks')
100
                base.log.exception('taskd error; pausing for 10s before taking more tasks')
96
                time.sleep(10)
101
                time.sleep(10)
97
        base.log.info('taskd pid %s stopping gracefully.' % os.getpid())
102
        base.log.info('taskd pid %s stopping gracefully.' % os.getpid())
98
103