)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"577915e85e48102a88d64dd5d0dd5700c2f73879","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"98cacf12_b341678b","updated":"2023-11-07 21:27:00.000000000","message":"IMHO, this should be squashed with the parent commit - it\u0027s EXTREAMLY helpful.","commit_id":"c05c2f798d28258a60fa4e91ff2428c9c68dda81"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"2608049019fb6944fec202612e1b3a3f7738e185","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ba224199_a94c614b","in_reply_to":"98cacf12_b341678b","updated":"2023-11-08 17:43:56.000000000","message":"I was confused about the patch order here - this is a great pre-req commit.","commit_id":"c05c2f798d28258a60fa4e91ff2428c9c68dda81"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e29382a986efc3744e231acbea7092a4462ee11e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"49c77cd8_29bb8c08","updated":"2023-11-10 15:44:28.000000000","message":"zomgbbq!!~`1 this is greAT!","commit_id":"c94e1c15130ef3689ba99337fdab39a80bb3fb29"}],"doc/source/overview_wsgi_management.rst":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e29382a986efc3744e231acbea7092a4462ee11e","unresolved":true,"context_lines":[{"line_number":15,"context_line":"connection-handling ``GreenPool`` to complete, then exits. Each worker"},{"line_number":16,"context_line":"continues processing the current request, then closes the connection."},{"line_number":17,"context_line":"Note that clients will get connection errors if they try to re-use a"},{"line_number":18,"context_line":"connection for further requests."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Prior to the introduction of seamless reloads (see below), a common"},{"line_number":21,"context_line":"reload strategy was to perform a graceful shutdown followed by a fresh"}],"source_content_type":"text/x-rst","patch_set":3,"id":"199f69d7_4ade0a89","line":18,"updated":"2023-11-10 15:44:28.000000000","message":"this part is a helpful explination of the worker shutdown process.  I think it applies to seamless reloads as well as HUP.","commit_id":"c94e1c15130ef3689ba99337fdab39a80bb3fb29"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e29382a986efc3744e231acbea7092a4462ee11e","unresolved":true,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"2. Manager process forks. The new child knows about all the existing"},{"line_number":42,"context_line":"   workers and their listen sockets; it will be responsible for closing"},{"line_number":43,"context_line":"   the old worker listen sockets so they stop accepting new connections."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":".. image:: images/reload_process_tree_3.svg"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"e8416f40_27c95f29","line":43,"updated":"2023-11-10 15:44:28.000000000","message":"N.B. unlike th manager it forked from, it is not the old worker parent (if that wasn\u0027t obvious from the process tree diagram)","commit_id":"c94e1c15130ef3689ba99337fdab39a80bb3fb29"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e29382a986efc3744e231acbea7092a4462ee11e","unresolved":true,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"3. Manager process re-exec\u0027s itself. It picks up new configuration and"},{"line_number":48,"context_line":"   code while maintaining the same PID as the old manager process. At"},{"line_number":49,"context_line":"   this point only the socket-closer is tracking the old workers, but"},{"line_number":50,"context_line":"   everything (including old workers) remains a child of the new manager"},{"line_number":51,"context_line":"   process. As a result, old workers are *not* discoverable with"},{"line_number":52,"context_line":"   ``swift-orphans``; ``swift-oldies`` may be useful, but will also find"},{"line_number":53,"context_line":"   the manager process."},{"line_number":54,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5b64bf7b_4934e529","line":51,"range":{"start_line":49,"start_character":66,"end_line":51,"end_character":10},"updated":"2023-11-10 15:44:28.000000000","message":"key!  kudos!","commit_id":"c94e1c15130ef3689ba99337fdab39a80bb3fb29"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0897d311c43bc84f1513b45fe7f737218c28a156","unresolved":true,"context_lines":[{"line_number":81,"context_line":"2. Check that the config file used by that PID is currently valid,"},{"line_number":82,"context_line":"3. Send the ``USR1`` signal to initiate a reload, and"},{"line_number":83,"context_line":"4. Wait for the new workers to come up (indicating the reload is complete)"},{"line_number":84,"context_line":"   before exiting."}],"source_content_type":"text/x-rst","patch_set":3,"id":"0b1423e3_3705ef78","line":84,"updated":"2023-11-09 22:59:26.000000000","message":"Technically, it also waits for *the old worker sockets to be closed* today on master, but https://review.opendev.org/c/openstack/swift/+/837641 would change that slightly. At any rate, \"all new workers up and accepting connections\" is *my* mental model for when a reload should be considered \"complete\".","commit_id":"c94e1c15130ef3689ba99337fdab39a80bb3fb29"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e29382a986efc3744e231acbea7092a4462ee11e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"2. Check that the config file used by that PID is currently valid,"},{"line_number":82,"context_line":"3. Send the ``USR1`` signal to initiate a reload, and"},{"line_number":83,"context_line":"4. Wait for the new workers to come up (indicating the reload is complete)"},{"line_number":84,"context_line":"   before exiting."}],"source_content_type":"text/x-rst","patch_set":3,"id":"b3dcf98d_677aa4d5","line":84,"in_reply_to":"0b1423e3_3705ef78","updated":"2023-11-10 15:44:28.000000000","message":"interesting!  what you have written here is clear - kudos.","commit_id":"c94e1c15130ef3689ba99337fdab39a80bb3fb29"}],"doc/source/overview_wsgi_reload.rst":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"577915e85e48102a88d64dd5d0dd5700c2f73879","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"4. New manager process forks off new workers, each with its own listen"},{"line_number":31,"context_line":"   socket. Once all workers have started and can accept new connections,"},{"line_number":32,"context_line":"   it notifies the socket-closer via a pipe. It closes the old worker"},{"line_number":33,"context_line":"   listen sockets so they stop accepting new connections, then exits."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":".. image:: images/reload_process_tree_5.svg"}],"source_content_type":"text/x-rst","patch_set":2,"id":"2359fbf1_c7e3eb30","line":32,"updated":"2023-11-07 21:27:00.000000000","message":"in the previous sentence \"it\" was the new-manager process (signals the socket closer all new workers are up and listening).  I think in THIS sentece \"it\" is the socket-closer (who closes the old worker listen sockets so they stop accepting connections after having recieved notification the new workers are up and listening).\n\nIf I understood correctly I think it would be clearer to only use \"it\" to refer to one or the other of the forked processes w/i the same paragraph - or maybe try to mostly refer to them by name at least once in the sentance before callig them it.","commit_id":"c05c2f798d28258a60fa4e91ff2428c9c68dda81"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0897d311c43bc84f1513b45fe7f737218c28a156","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"4. New manager process forks off new workers, each with its own listen"},{"line_number":31,"context_line":"   socket. Once all workers have started and can accept new connections,"},{"line_number":32,"context_line":"   it notifies the socket-closer via a pipe. It closes the old worker"},{"line_number":33,"context_line":"   listen sockets so they stop accepting new connections, then exits."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":".. image:: images/reload_process_tree_5.svg"}],"source_content_type":"text/x-rst","patch_set":2,"id":"66b8a077_101f3a2e","line":32,"in_reply_to":"2359fbf1_c7e3eb30","updated":"2023-11-09 22:59:26.000000000","message":"Done","commit_id":"c05c2f798d28258a60fa4e91ff2428c9c68dda81"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"577915e85e48102a88d64dd5d0dd5700c2f73879","unresolved":true,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"5. Old workers continue servicing any in-progress connections, while new"},{"line_number":38,"context_line":"   connections are picked up by new workers. Once an old worker completes"},{"line_number":39,"context_line":"   all of its oustanding requests, it exits."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":".. image:: images/reload_process_tree_6.svg"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bc1ee8e1_b23333db","line":39,"updated":"2023-11-07 21:27:00.000000000","message":"this is a curious state - the socket closer has closed all the old worker sockets; but doesn\u0027t stick around to make sure they exit?","commit_id":"c05c2f798d28258a60fa4e91ff2428c9c68dda81"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0897d311c43bc84f1513b45fe7f737218c28a156","unresolved":true,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"5. Old workers continue servicing any in-progress connections, while new"},{"line_number":38,"context_line":"   connections are picked up by new workers. Once an old worker completes"},{"line_number":39,"context_line":"   all of its oustanding requests, it exits."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":".. image:: images/reload_process_tree_6.svg"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"6bd7948f_4073e899","line":39,"in_reply_to":"bc1ee8e1_b23333db","updated":"2023-11-09 22:59:26.000000000","message":"Nope; it\u0027s similar to what happens with `HUP`, where the manager closes listen sockets, then exits.\n\nIf we wanted it to hang around, note that it\u0027d need to poll old workers to see if they\u0027re still alive; it can\u0027t just `wait` for them, since it isn\u0027t the parent.","commit_id":"c05c2f798d28258a60fa4e91ff2428c9c68dda81"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"577915e85e48102a88d64dd5d0dd5700c2f73879","unresolved":true,"context_lines":[{"line_number":52,"context_line":"   process,"},{"line_number":53,"context_line":"2. Check that the config file used by that PID is currently valid,"},{"line_number":54,"context_line":"3. Send the ``USR1`` signal to initiate a reload, and"},{"line_number":55,"context_line":"4. Wait for the reload to complete before exiting."}],"source_content_type":"text/x-rst","patch_set":2,"id":"994b479d_727aab88","line":55,"updated":"2023-11-07 21:27:00.000000000","message":"At what point in the above sequence does swift-reload consider the reload \"complete\"?","commit_id":"c05c2f798d28258a60fa4e91ff2428c9c68dda81"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0897d311c43bc84f1513b45fe7f737218c28a156","unresolved":false,"context_lines":[{"line_number":52,"context_line":"   process,"},{"line_number":53,"context_line":"2. Check that the config file used by that PID is currently valid,"},{"line_number":54,"context_line":"3. Send the ``USR1`` signal to initiate a reload, and"},{"line_number":55,"context_line":"4. Wait for the reload to complete before exiting."}],"source_content_type":"text/x-rst","patch_set":2,"id":"eea3f21c_5f683d7b","line":55,"in_reply_to":"994b479d_727aab88","updated":"2023-11-09 22:59:26.000000000","message":"Done","commit_id":"c05c2f798d28258a60fa4e91ff2428c9c68dda81"}]}
