|
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 |
|