Bug#894512: gunicorn3: can't serve large files

2018-04-01 Thread Chris Lamb
Hi Lars,

> gunicorn3: can't serve large files

Please see upstream's comment / request here via log output:

  https://github.com/benoitc/gunicorn/issues/1736#issuecomment-30685

:)


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-



Bug#894512: gunicorn3: can't serve large files

2018-03-31 Thread Chris Lamb
forwarded 894512 https://github.com/benoitc/gunicorn/issues/1736
thanks

Dear Lars,

Thank you for the detailed bug report with testcase! I've forwarded
this upstream here for the time being:

  https://github.com/benoitc/gunicorn/issues/1736

(I'm generally «au fait» with WSGI stuff, but the streaming/chunked parts
of it are not.)


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-



Bug#894512: gunicorn3: can't serve large files

2018-03-31 Thread Lars Wirzenius
Package: gunicorn3
Version: 19.6.0-10+deb9u1
Severity: normal

Dear Maintainer,

I'm writing a web application that needs to server fairly large files,
in the terabyte range. I am using python3-bottle for my code, and it
works just fine. However, when I run my application with gunicorn3 it
doesn't work.

I've distilled this into a small test case. The application code,
saved as file foo.py:

import bottle

def blob(*args, **kwargs):
return bottle.static_file('blob', '.')

app = bottle.Bottle()
app.route(path='/blob', callback=blob)

This is the script that starts it, saved as file start.sh:

#!/bin/sh

set -eu

truncate -s 1G blob
gunicorn3 --bind 0.0.0.0:12765 foo:app

To test, run "sh +x start.sh", and then from another host run:

curl http://195.201.99.89:12765/blob > blob

This always fails for me: curl complains:

 curl: (18) transfer closed with 611469105 bytes remaining to read

It seems to always work over localhost. It always works when the blob
is sufficiently small, such as 1024 bytes, even between hosts.

If I don't use gunicorn, and use the Bottle built-in HTTP server, it
always works. Like this:

import bottle

def blob(*args, **kwargs):
return bottle.static_file('blob', '.')

app = bottle.Bottle()
app.route(path='/blob', callback=blob)

if __name__ == '__main__':
app.run(host='0.0.0.0', port=12765)

I ran that on one machine, and ran curl on a different host and it
worked 10 times in a row.

-- System Information:
Debian Release: 9.4
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'unstable'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 4.9.0-6-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages gunicorn3 depends on:
ii  python3   3.5.3-1
ii  python3-gunicorn  19.6.0-10+deb9u1

gunicorn3 recommends no packages.

Versions of packages gunicorn3 suggests:
pn  gunicorn-examples 
pn  python3-pastedeploy   
pn  python3-setproctitle  
pn  python3-tornado   

-- no debconf information