- uWSGI 1.9.13
- Bugfixes
- New features
- PyPy performance and features improvents
- Chunked input api
- Toward better third-party plugins management: the –dot-h option
- setmethod, seturi and setpathinfo routing action
- UWSGI_INCLUDES
- Improved set_user_harakiri api function
- –add-cache-item [cache ]KEY=VALUE
- the router_xmldir plugin
- Implement call for @spool* decorators
- the uwsgi[lq] routing var
- –use-abort
- Availability
uWSGI 1.9.13
Changelog [20130622]
Bugfixes
- Fixed a corner case bug when response offloading is enabled, but no request plugin is loaded
- Fixed harakiri routing when multiple rules are in place (return NEXT instead of CONTINUE)
- Fixed curl crashing master on slow dns responses (Łukasz Mierzwa)
- Removed PTRACE check in uwsgi.h (it is no more needed since uWSGI 1.0)
- Fixed –print-sym
- Added a newline in –cflags
- Improved python3 detection and compilation
- Fixed Coro::AnyEvent loop engine (John Berthels)
- Rack api functions are now static
- Better fastcgi handling of big uploads
- Improved GCC usage on Darwin for Python non-apple builds
- Fixed XCLIENT usage in rawrouter
- Use the clang preprocessor instead of hardcoded ‘cpp’ when CC=clang is used
- Set 16bit options to 65535 when higher values are requested
- Fixed virtualhosting (it is now compatible with 1.4 configurations)
New features
PyPy performance and features improvents
The PyPy plugin has been improved a lot. The amount of C code has been reduced by 70%, so, now, the vast majority of the plugin iswritten in python. The c helpers have been removed allowing the python part to directly call native uWSGI functions via cffi.
Support for PyPy continulets (and their greenlet abstraction) has been added (while waiting for a solid gevent port for pypy) and a chat example is already available(using the uwsgi async api):
https://github.com/unbit/uwsgi/tree/master/t/pypy
https://github.com/unbit/uwsgi/blob/master/contrib/pypy/uwsgi_pypy_greenlets.py
The pypy uwsgi api has been improved and now you can use the uwsgidecorators module (even if the spooler subsystem is still missing)
Chunked input api
In the last days there have been a bunch of discussions on how to correctly manage chunked input. As basically noneof the available standards support it in a “definitive” way, we have defined a low-level api (so we can easily adapt itin the feature).
The api exposes two functions:
uwsgi.chunked_read()
and
uwsgi.chunked_read_nb()
A non blocking chat example:
- import uwsgi
- def application(e, sr):
- while True:
- uwsgi.wait_fd_read(uwsgi.connection_fd())
- uwsgi.suspend()
- msg = uwsgi.chunked_read_nb()
- if msg: print "core %d" % e['uwsgi.core'], msg
Toward better third-party plugins management: the –dot-h option
As the –cflags option shows the CFLAGS used to build the server, the –dot-h option shows the content of uwsgi.h
This means the content of uwsgi.h is now embedded in the binary (compressed where available).
It could look a bizarre choice but the objective is to allow easy compilation of plugins out of the uwsgi sources(somethign that will be available in 2.0 for sure)
setmethod, seturi and setpathinfo routing action
we continue extending the routing api.
Three new actions have been added to dinamically modify the request
UWSGI_INCLUDES
You can now ovverride the include search path (while building uWSGI) with this environment variable.
Improved set_user_harakiri api function
Now the uwsgi.set_user_harakiri automatically recognize mules and spoolers. It has been added to the ruby/rack, pypy and perl/psgi plugins
–add-cache-item [cache ]KEY=VALUE
this is a commodity option (mainly useful for testing) allowing you to store an item in a uWSGI cache during startup
the router_xmldir plugin
This is a proof of concept plugin aimed at stressing the transformation api.
It basically generates an xml representation of a directory. This could be useful toimplement apache-style directoryindex:
Check this example using xslt:
https://github.com/unbit/uwsgi/issues/271#issuecomment-19820204
Implement call for @spool* decorators
Thanks to ‘anaconda’, you can now directly call functions mapped to the spooler, so instead of
- myfunc.spool(args)
you can directly do:
- myfunc(args)
the old way is obviously supported
the uwsgi[lq] routing var
this routing var exports the current size of the listen_queue:
- [uwsgi]
- ...
- route-if = higher:${uwsgi[lq]};70 break:503 Server Overload
- ...
–use-abort
On some system the SEGV signal handler cannot be correctly restored after the uWSGI backtrace.
If you want to generate a core file, you may want to trigger a SIGABRT soon after the backtrace.
Availability
uWSGI 1.9.13 will be available 22th June 2013 at this url: