Project

General

Profile

Actions

Feature #36357

closed

Upgrade Puma to 6.x

Added by Evgeni Golov 12 months ago. Updated 11 months ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Packaging
Target version:
-
Difficulty:
Triaged:
Yes
Fixed in Releases:
Found in Releases:

Description

Upgrade to Puma 6+ to achieve better performance and keep the dependency up to date. Puma 6 touts greater performance than previous versions, Foreman should take advantage of this and test it for our scenarios.

See https://github.com/puma/puma/blob/master/6.0-Upgrade.md for upgrade info

Actions #1

Updated by Evgeni Golov 12 months ago

Checking the upgrade checklist from https://github.com/puma/puma/blob/master/6.0-Upgrade.md:

  • Configuration constants like DefaultRackup removed, see #2928 for the full list.
    • We do not use any of these constants
  • We have changed the names of the following environment variables: DISABLE_SSL is now PUMA_DISABLE_SSL, MAKE_WARNINGS_INTO_ERRORS is now PUMA_MAKE_WARNINGS_INTO_ERRORS, and WAIT_FOR_LESS_BUSY_WORKERS is now PUMA_WAIT_FOR_LESS_BUSY_WORKERS.
    • We do not use any of these environment variables.
  • Nakayoshi GC (nakayoshi_fork option in config) has been removed without replacement.
    • We do not use nakayoshi_fork
  • wait_for_less_busy_worker is now on by default. If you don't want to use this feature, you must add wait_for_less_busy_worker false in your config.
    • Cool
  • We've removed the following public methods on Puma::Server: Puma::Server#min_threads, Puma::Server#max_threads. Instead, you can pass in configuration as an option to Puma::Server#new. This might make certain gems break (capybara for example).
  • We've removed the following constants: Puma::StateFile::FIELDS, Puma::CLI::KEYS_NOT_TO_PERSIST_IN_STATE and Puma::Launcher::KEYS_NOT_TO_PERSIST_IN_STATE, and Puma::ControlCLI::COMMANDS.
    • We do not use any of these constats
  • We no longer support Ruby 2.2, 2.3, or JRuby on Java 1.7 or below.
    • We only need 2.7+
  • The behavior of remote_addr has changed. When using the set_remote_address header: "header_name" functionality, if the header is not passed, REMOTE_ADDR is now set to the physical peeraddr instead of always being set to 127.0.0.1. When an error occurs preventing the physical peeraddr from being fetched, REMOTE_ADDR is now set to the unspecified source address ('0.0.0.0') instead of to '127.0.0.1'
    • This shouldn't affect us, as we do not use set_remote_address (and thus default to its "socket" value)
  • Previously, Puma supported anything as an HTTP method and passed it to the app. We now only accept the 8 HTTP methods defined in RFC 9110.
    • I don't think we use any non-standard HTTP vers
Actions #2

Updated by The Foreman Bot 12 months ago

  • Status changed from New to Ready For Testing
  • Pull request https://github.com/theforeman/foreman/pull/9699 added
Actions #3

Updated by Evgeni Golov 12 months ago

puma-status still works:

[root@centos8-stream-katello-nightly ~]# rpm -q rubygem-puma
rubygem-puma-6.2.2-1.el8.x86_64

[root@centos8-stream-katello-nightly ~]# foreman-puma-status 
3995 (/usr/share/foreman/tmp/puma.state) Uptime:  0m17s | Phase: 0 | Load: 0[░░░░░░░░░░░░░░░]15 | Req: 0
 └  4031 CPU:   0.0% Mem:  363 MB Uptime:  0m16s | Load: 0[░░░░░]5 | Req: 0
 └  4032 CPU:   0.0% Mem:  363 MB Uptime:  0m16s | Load: 0[░░░░░]5 | Req: 0
 └  4033 CPU:   0.0% Mem:  362 MB Uptime:  0m16s | Load: 0[░░░░░]5 | Req: 0
Actions #4

Updated by The Foreman Bot 12 months ago

  • Fixed in Releases 3.7.0 added
Actions #5

Updated by Evgeni Golov 12 months ago

  • Status changed from Ready For Testing to Closed
Actions #6

Updated by Ewoud Kohl van Wijngaarden 11 months ago

  • Category changed from Rails to Packaging
  • Triaged changed from No to Yes
Actions

Also available in: Atom PDF