Projet

Général

Profil

Bug #18889

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Suite au ticket #18888 à Nanterre:

Le fonctionnement d'harakiri ne nous donne pas d'information sur l'origine du problème, je suggère quelque chose de ce genre en plus:

<pre>
diff --git a/wcs/compat.py b/wcs/compat.py
index 756818b..1e6f60f 100644
--- a/wcs/compat.py
+++ b/wcs/compat.py
@@ -16,6 +16,7 @@

import ConfigParser
import os
+import signal

from threading import Lock
from contextlib import contextmanager
@@ -211,9 +212,25 @@ class CompatWcsPublisher(WcsPublisher):
# the publisher instance can't be shared for concurrent requests.
quixote_lock = Lock()

+
+class Timeout(Exception):
+ pass
+
+
def quixote(request):
pub = get_publisher()
- return pub.process_request(pub.get_request())
+
+ def timeout(signal, frame):
+ raise Exception('timeout after 29 seconds')
+
+ signal.signal(signal.SIGALRM, timeout)
+ try:
+ signal.alarm(29)
+ resp = pub.process_request(pub.get_request())
+ signal.alarm(0)
+ except Timeout:
+ pass
+ return resp


@contextmanager
</pre>

L'idée c'est que si Timeout est raisé dans publisher ce sera choppé et une exception générée par le publisher, si on se trouve après le try_publish() l'exception remontera jusqu'à Django qui enverra un mail, je serai d'avis d'en plus tuer le worker uwsgi si on trouve comment faire parce qu'un process qui timeout c'est un process en potentiellement en vrac.

Retour