Project

General

Profile

Autre #18419

UnreadablePostError: error during read(65536) on wsgi.input

Added by Frédéric Péters over 5 years ago. Updated about 5 years ago.

Status:
Nouveau
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
04 September 2017
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:

Description

À investiguer, peut-être normal, genre interruption par le client.

Internal Server Error: /tmp-upload
...
  File "/usr/lib/python2.7/dist-packages/django/http/request.py", line 261, in _load_post_and_files
    self._post, self._files = self.parse_file_upload(self.META, data)
  File "/usr/lib/python2.7/dist-packages/django/http/request.py", line 226, in parse_file_upload
    return parser.parse()
  File "/usr/lib/python2.7/dist-packages/django/http/multipartparser.py", line 209, in parse
    for chunk in field_stream:
  File "/usr/lib/python2.7/dist-packages/django/utils/six.py", line 558, in next
    return type(self).__next__(self)
  File "/usr/lib/python2.7/dist-packages/django/http/multipartparser.py", line 356, in __next__
    output = next(self._producer)
  File "/usr/lib/python2.7/dist-packages/django/utils/six.py", line 558, in next
    return type(self).__next__(self)
  File "/usr/lib/python2.7/dist-packages/django/http/multipartparser.py", line 487, in __next__
    for bytes in stream:
  File "/usr/lib/python2.7/dist-packages/django/utils/six.py", line 558, in next
    return type(self).__next__(self)
  File "/usr/lib/python2.7/dist-packages/django/http/multipartparser.py", line 356, in __next__
    output = next(self._producer)
  File "/usr/lib/python2.7/dist-packages/django/utils/six.py", line 558, in next
    return type(self).__next__(self)
  File "/usr/lib/python2.7/dist-packages/django/http/multipartparser.py", line 418, in __next__
    data = self.flo.read(self.chunk_size)
  File "/usr/lib/python2.7/dist-packages/django/http/request.py", line 295, in read
    six.reraise(UnreadablePostError, UnreadablePostError(*e.args), sys.exc_info()[2])
  File "/usr/lib/python2.7/dist-packages/django/http/request.py", line 293, in read
    return self._stream.read(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 57, in read
    result = self.buffer + self._read_limited(size - len(self.buffer))
  File "/usr/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 45, in _read_limited
    result = self.stream.read(size)
UnreadablePostError: error during read(65536) on wsgi.input

Related issues

Related to Hobo - Bug #21423: logging: considérer les erreurs UnreadablePostError en warning seulementNouveau25 January 2018

Actions

History

#1

Updated by Thomas Noël over 5 years ago

A priori c'est ça, code "499" signalé par nginx :

176.x.x.x - - [04/Sep/2017:10:05:20 +0200] "POST /tmp-upload HTTP/1.1" 499 0 "https://demarches.chateauroux-metropole.fr/piscine-a-vagues/inscription-aquagym-piscine-a-vagues-1/" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0" 
#2

Updated by Thomas Noël over 5 years ago

Juste pour ajouter du contexte, la trace complète est vue dans le journal de wcs :

oct. 10 13:39:59 auquo uwsgi[23594]: [uwsgi-body-read] Error reading 40960 bytes. Content-Length: 897426 consumed: 155648 left: 741778 message: Clie
nt closed connection
oct. 10 13:39:59 auquo uwsgi[27700]: wcs ERROR - 89.88.135.182 - r:7F2BD6922390 Internal Server Error: /tmp-upload
                                     Traceback (most recent call last):
                                       File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 108, in get_response
                                         response = middleware_method(request)
                                       File "/usr/lib/python2.7/dist-packages/wcs/middleware.py", line 46, in process_request
                                         pub.parse_request(compat_request)
                                       File "/usr/lib/pymodules/python2.7/quixote/publish.py", line 113, in parse_request
...
oct. 10 13:40:00 auquo uwsgi[23594]: Tue Oct 10 13:40:00 2017 - SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request /tmp-upload (ip 0.0.0.0) !!!
oct. 10 13:40:00 auquo uwsgi[23594]: Tue Oct 10 13:40:00 2017 - uwsgi_response_writev_headers_and_body_do(): Broken pipe [core/writer.c line 287] during POST /tmp-upload (0.0.0.0)
oct. 10 13:40:00 auquo uwsgi[23594]: IOError: write error
oct. 10 13:40:00 auquo uwsgi[23594]: [pid: 27700|app: 0|req: 81140/591362] 0.0.0.0 () {52 vars in 1168 bytes} [Tue Oct 10 13:39:59 2017] POST /tmp-upload => generated 0 bytes in 801 msecs (HTTP/1.0 500) 1 headers in 0 bytes (0 switches on core 0)
#3

Updated by Thomas Noël about 5 years ago

Un peu d'investigation, c'est en fait totalement "normal" : https://docs.djangoproject.com/fr/2.0/ref/exceptions/#unreadableposterror

Reste à savoir si on veut juste :
#4

Updated by Benjamin Dauvergne about 5 years ago

Je serai pour faire effectivement un filtre au niveau des logs et convertir ça en simple warning.

#5

Updated by Thomas Noël about 5 years ago

Benjamin Dauvergne a écrit :

Je serai pour faire effectivement un filtre au niveau des logs et convertir ça en simple warning.

Je vois très bien comment filtrer (ne rien faire de ces erreurs) mais pour la conversion, dans un logging.Filter ça m'a l'air délicat de changer le record.level, c'est peut-être un peu trop tard et ça peut rendre le routage du message incohérent, je pense (la doc semble dire que faut éviter, https://docs.python.org/2/library/logging.html#filter-objects " Obviously changing the LogRecord needs to be done with some care, ...")

Tu vois une autre idée ? (filtrer simplement ne me poserait pas de gros gros soucis, on a déjà des warning sur nginx et uwsgi)

#6

Updated by Benjamin Dauvergne about 5 years ago

Thomas Noël a écrit :

Benjamin Dauvergne a écrit :

Je serai pour faire effectivement un filtre au niveau des logs et convertir ça en simple warning.

Je vois très bien comment filtrer (ne rien faire de ces erreurs) mais pour la conversion, dans un logging.Filter ça m'a l'air délicat de changer le record.level, c'est peut-être un peu trop tard et ça peut rendre le routage du message incohérent, je pense (la doc semble dire que faut éviter, https://docs.python.org/2/library/logging.html#filter-objects " Obviously changing the LogRecord needs to be done with some care, ...")

Je le fais déjà sur authentic: http://git.entrouvert.org/authentic.git/tree/src/authentic2/log_filters.py#n31

Filtrer au niveau du logger c'est sans souci, c'est fait avant la prise en charge du record par le reste de la machinerie dans logging.

Tu vois une autre idée ? (filtrer simplement ne me poserait pas de gros gros soucis, on a déjà des warning sur nginx et uwsgi)

Comme tu veux.

#7

Updated by Thomas Noël about 5 years ago

  • Related to Bug #21423: logging: considérer les erreurs UnreadablePostError en warning seulement added

Also available in: Atom PDF