Puma: v5.0.0 Release

Release date:
September 17, 2020
Previous version:
v5.0.0.beta2 (released September 5, 2020)
Magnitude:
1,982 Diff Delta
Contributors:
6 total committers
Data confidence:
Commits:

Top Contributors in v5.0.0

MSP-Greg
alexeevit
sumeka
JohnPhillips31416
nateberkopec
pavel-pavel-rosicky-easy-cz

Directory Browser for v5.0.0

We haven't yet finished calculating and confirming the files and directories changed in this release. Please check back soon.

Release Notes Published

5.0.0

Spoony_Bard

  • Features

    • Allow compiling without OpenSSL and dynamically load files needed for SSL, add 'no ssl' CI (#2305)
    • EXPERIMENTAL: Add fork_worker option and refork command for reduced memory usage by forking from a worker process instead of the master process. (#2099)
    • EXPERIMENTAL: Added wait_for_less_busy_worker config. This may reduce latency on MRI through inserting a small delay before re-listening on the socket if worker is busy (#2079).
    • EXPERIMENTAL: Added nakayoshi_fork option. Reduce memory usage in preloaded cluster-mode apps by GCing before fork and compacting, where available. (#2093, #2256)
    • Added pumactl thread-backtraces command to print thread backtraces (#2054)
    • Added incrementing requests_count to Puma.stats. (#2106)
    • Increased maximum URI path length from 2048 to 8192 bytes (#2167, #2344)
    • lowlevel_error_handler is now called during a forced threadpool shutdown, and if a callable with 3 arguments is set, we now also pass the status code (#2203)
    • Faster phased restart and worker timeout (#2220)
    • Added state_permission to config DSL to set state file permissions (#2238)
    • Added Puma.stats_hash, which returns a stats in Hash instead of a JSON string (#2086, #2253)
    • rack.multithread and rack.multiprocess now dynamically resolved by max_thread and workers respectively (#2288)
  • Deprecations, Removals and Breaking API Changes

    • --control has been removed. Use --control-url (#1487)
    • worker_directory has been removed. Use directory.
    • min_threads now set by environment variables PUMA_MIN_THREADS and MIN_THREADS. (#2143)
    • max_threads now set by environment variables PUMA_MAX_THREADS and MAX_THREADS. (#2143)
    • max_threads default to 5 in MRI or 16 for all other interpreters. (#2143)
    • preload by default if workers > 1 (#2143)
    • Puma::Plugin.workers_supported? has been removed. Use Puma.forkable? instead. (#2143)
    • tcp_mode has been removed without replacement. (#2169)
    • Daemonization has been removed without replacement. (#2170)
    • Changed #connected_port to #connected_ports (#2076)
    • Configuration: environment is read from RAILS_ENV, if RACK_ENV can't be found (#2022)
    • Log binding on http:// for TCP bindings to make it clickable
  • Bugfixes

    • Fix JSON loading issues on phased-restarts (#2269)
    • Improve shutdown reliability (#2312, #2338)
    • Close client http connections made to an ssl server with TLSv1.3 (#2116)
    • Do not set user_config to quiet by default to allow for file config (#2074)
    • Always close SSL connection in Puma::ControlCLI (#2211)
    • Windows update extconf.rb for use with ssp and varied Ruby/MSYS2 combinations (#2069)
    • Ensure control server Unix socket is closed on shutdown (#2112)
    • Preserve BUNDLE_GEMFILE env var when using prune_bundler (#1893)
    • Send 408 request timeout even when queue requests is disabled (#2119)
    • Rescue IO::WaitReadable instead of EAGAIN for blocking read (#2121)
    • Ensure BUNDLE_GEMFILE is unspecified in workers if unspecified in master when using prune_bundler (#2154)
    • Rescue and log exceptions in hooks defined by users (on_worker_boot, after_worker_fork etc) (#1551)
    • Read directly from the socket in #read_and_drop to avoid raising further SSL errors (#2198)
    • Set Connection: closed header when queue requests is disabled (#2216)
    • Pass queued requests to thread pool on server shutdown (#2122)
    • Fixed a few minor concurrency bugs in ThreadPool that may have affected non-GVL Rubies (#2220)
    • Fix out_of_band hook never executed if the number of worker threads is > 1 (#2177)
    • Fix ThreadPool#shutdown timeout accuracy (#2221)
    • Fix UserFileDefaultOptions#fetch to properly use default (#2233)
    • Improvements to out_of_band hook (#2234)
    • Prefer the rackup file specified by the CLI (#2225)
    • Fix for spawning subprocesses with fork_worker option (#2267)
    • Set CONTENT_LENGTH for chunked requests (#2287)
    • JRuby - Add Puma::MiniSSL::Engine#init? and #teardown methods, run all SSL tests (#2317)
    • Improve shutdown reliability (#2312)
    • Resolve issue with threadpool waiting counter decrement when thread is killed
    • Constrain rake-compiler version to 0.9.4 to fix ClassNotFound exception when using MiniSSL with Java8.
    • Fix recursive prune_bundler (#2319).
    • Ensure that TCP_CORK is usable
    • Fix corner case when request body is chunked (#2326)
    • Fix filehandle leak in MiniSSL (#2299)
  • Refactor

    • Remove unused loader argument from Plugin initializer (#2095)
    • Simplify Configuration.random_token and remove insecure fallback (#2102)
    • Simplify Runner#start_control URL parsing (#2111)
    • Removed the IOBuffer extension and replaced with Ruby (#1980)
    • Update Rack::Handler::Puma.run to use **options (#2189)
    • ThreadPool concurrency refactoring (#2220)
    • JSON parse cluster worker stats instead of regex (#2124)
    • Support parallel tests in verbose progress reporting (#2223)
    • Refactor error handling in server accept loop (#2239)