[Kimchi-devel] [PATCH] AsyncTask: Propagate cherrypy request information to worker threads
Aline Manera
alinefm at linux.vnet.ibm.com
Tue Apr 1 19:13:01 UTC 2014
Reviewed-by: Aline Manera <alinefm at linux.vnet.ibm.com>
On 04/01/2014 04:55 AM, zhshzhou at linux.vnet.ibm.com wrote:
> From: Zhou Zheng Sheng <zhshzhou at linux.vnet.ibm.com>
>
> cherrypy.request is a proxy for cherrypy.serving.request, and
> cherrypy.serving stores the request information on the thread local
> storage. When new threads created by Kimchi code, the related request
> information is not propagated to the new threads. The problem is that
> exception message translation code needs the Accept-Language header or
> session cookie to determine which language the user speaks. If the
> request information is missing, it assumes the language is English.
>
> Usually this is not a problem because most of the threads in Kimchi just
> run in background, and the exception message is written to log, so
> English in log is OK. However the AsyncTask catches the exception in
> thread and reports to the front-end, and this is not friendly to the
> user without proper translation.
>
> This patch propagates the request information to the new threads started
> by the AsyncTask, so exception message gets translated according to the
> request header or session cookie.
>
> Signed-off-by: Zhou Zheng Sheng <zhshzhou at linux.vnet.ibm.com>
> ---
> src/kimchi/asynctask.py | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/src/kimchi/asynctask.py b/src/kimchi/asynctask.py
> index 8f0d96c..b54f143 100644
> --- a/src/kimchi/asynctask.py
> +++ b/src/kimchi/asynctask.py
> @@ -37,6 +37,7 @@ class AsyncTask(object):
> self.status = 'running'
> self.message = 'OK'
> self._save_helper()
> + self._cp_request = cherrypy.serving.request
> self.thread = threading.Thread(target=self._run_helper,
> args=(opaque, self._status_cb))
> self.thread.setDaemon(True)
> @@ -63,6 +64,7 @@ class AsyncTask(object):
> session.store('task', self.id, obj)
>
> def _run_helper(self, opaque, cb):
> + cherrypy.serving.request = self._cp_request
> try:
> self.fn(cb, opaque)
> except Exception, e:
More information about the Kimchi-devel
mailing list