)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a61d9baa28b8841f3c2b21adbb45bd459f87c141","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3f9cf27c_cff4db40","updated":"2023-10-06 15:47:51.000000000","message":"First pass review, I think this looks pretty good to me.","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"56eb7db5e35b41523b08451c0f60e8cb41a948e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"77ab8b90_b9662750","updated":"2023-10-31 20:08:41.000000000","message":"recheck","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"}],"ironic/common/rpc_service.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12d0d80ccf310533c73f72a1ca508dfe6556fd68","unresolved":false,"context_lines":[{"line_number":140,"context_line":"               and not self._shutdown_timeout_reached(initial_time)):"},{"line_number":141,"context_line":"            LOG.info(\u0027Waiting for reserved nodes to clear on host %(host)s\u0027,"},{"line_number":142,"context_line":"                     {\u0027host\u0027: self.host})"},{"line_number":143,"context_line":"            time.sleep(CONF.conductor.heartbeat_interval)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        # Stop the keepalive heartbeat greenthread sending touch(online\u003dFalse)"},{"line_number":146,"context_line":"        self.manager.keepalive_halt()"}],"source_content_type":"text/x-python","patch_set":1,"id":"dcbd2ef7_82796703","line":143,"updated":"2023-11-06 16:30:22.000000000","message":"This is 10 seconds by default and may be increased significantly for rather stable environments. I\u0027d prefer we keep this small, maybe 1 seconds was not too bad.","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"d9eda1bdf4ddfc9361899c8e0be8dc6ad8161789","unresolved":true,"context_lines":[{"line_number":140,"context_line":"               and not self._shutdown_timeout_reached(initial_time)):"},{"line_number":141,"context_line":"            LOG.info(\u0027Waiting for reserved nodes to clear on host %(host)s\u0027,"},{"line_number":142,"context_line":"                     {\u0027host\u0027: self.host})"},{"line_number":143,"context_line":"            time.sleep(CONF.conductor.heartbeat_interval)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        # Stop the keepalive heartbeat greenthread sending touch(online\u003dFalse)"},{"line_number":146,"context_line":"        self.manager.keepalive_halt()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ea7e3527_feae6dda","line":143,"in_reply_to":"65dd1226_736b0c2f","updated":"2023-11-10 00:49:48.000000000","message":"We want the keepalive to run in this period, but in a way which removes this conductor from the hash ring, that is what touch(online\u003dFalse) does. Stopping the keepalive is for when it really actually is ready to shut down","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"62f9fb3851f13500ac4f6816177c6188c893aa58","unresolved":true,"context_lines":[{"line_number":140,"context_line":"               and not self._shutdown_timeout_reached(initial_time)):"},{"line_number":141,"context_line":"            LOG.info(\u0027Waiting for reserved nodes to clear on host %(host)s\u0027,"},{"line_number":142,"context_line":"                     {\u0027host\u0027: self.host})"},{"line_number":143,"context_line":"            time.sleep(CONF.conductor.heartbeat_interval)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        # Stop the keepalive heartbeat greenthread sending touch(online\u003dFalse)"},{"line_number":146,"context_line":"        self.manager.keepalive_halt()"}],"source_content_type":"text/x-python","patch_set":1,"id":"65dd1226_736b0c2f","line":143,"in_reply_to":"dcbd2ef7_82796703","updated":"2023-11-09 15:35:17.000000000","message":"This seems weirdly ordered, too? Shouldn\u0027t we stop sending keepalives first, *then* wait the heartbeat timeout to ensure the conductor is out of rotation so it doesn\u0027t get more queries? Or am I misunderstanding the flow?","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"d11e853305a681362ba0dd62de7b4beb3699d7a7","unresolved":false,"context_lines":[{"line_number":140,"context_line":"               and not self._shutdown_timeout_reached(initial_time)):"},{"line_number":141,"context_line":"            LOG.info(\u0027Waiting for reserved nodes to clear on host %(host)s\u0027,"},{"line_number":142,"context_line":"                     {\u0027host\u0027: self.host})"},{"line_number":143,"context_line":"            time.sleep(CONF.conductor.heartbeat_interval)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        # Stop the keepalive heartbeat greenthread sending touch(online\u003dFalse)"},{"line_number":146,"context_line":"        self.manager.keepalive_halt()"}],"source_content_type":"text/x-python","patch_set":1,"id":"c9167911_4384fa0a","line":143,"in_reply_to":"ea7e3527_feae6dda","updated":"2023-11-12 21:38:39.000000000","message":"Done","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"}],"releasenotes/notes/drain-5eafd17e0868e21a.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12d0d80ccf310533c73f72a1ca508dfe6556fd68","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    shutdown. This is similar to a ``SIGTERM`` graceful shutdown but the timeout"},{"line_number":6,"context_line":"    is determined by ``[DEFAULT]drain_shutdown_timeout`` which defaults to"},{"line_number":7,"context_line":"    ``1800`` seconds. This is enough time for running tasks on existing reserved"},{"line_number":8,"context_line":"    nodes to either complete or reach their own failure timeout."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    During the drain period the conductor needs to be removed from the hash ring"},{"line_number":11,"context_line":"    to prevent new tasks from starting. Other conductors also need to not fail"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"d3ed7717_298e30e7","line":8,"updated":"2023-11-06 16:30:22.000000000","message":"It\u0027s good to have such a detailed explanation here, but we really need to find a place in the docs, otherwise it\u0027s yet another bit of tribal secrets.","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"d11e853305a681362ba0dd62de7b4beb3699d7a7","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    shutdown. This is similar to a ``SIGTERM`` graceful shutdown but the timeout"},{"line_number":6,"context_line":"    is determined by ``[DEFAULT]drain_shutdown_timeout`` which defaults to"},{"line_number":7,"context_line":"    ``1800`` seconds. This is enough time for running tasks on existing reserved"},{"line_number":8,"context_line":"    nodes to either complete or reach their own failure timeout."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    During the drain period the conductor needs to be removed from the hash ring"},{"line_number":11,"context_line":"    to prevent new tasks from starting. Other conductors also need to not fail"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"b4a20b19_f88b8593","line":8,"in_reply_to":"1351da57_7e474458","updated":"2023-11-12 21:38:39.000000000","message":"Done","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"62f9fb3851f13500ac4f6816177c6188c893aa58","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    shutdown. This is similar to a ``SIGTERM`` graceful shutdown but the timeout"},{"line_number":6,"context_line":"    is determined by ``[DEFAULT]drain_shutdown_timeout`` which defaults to"},{"line_number":7,"context_line":"    ``1800`` seconds. This is enough time for running tasks on existing reserved"},{"line_number":8,"context_line":"    nodes to either complete or reach their own failure timeout."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    During the drain period the conductor needs to be removed from the hash ring"},{"line_number":11,"context_line":"    to prevent new tasks from starting. Other conductors also need to not fail"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"e35a93d9_bd2b1efd","line":8,"in_reply_to":"d3ed7717_298e30e7","updated":"2023-11-09 15:35:17.000000000","message":"++ Even if you know it\u0027s \"buried\" in the actual docs, somewhere in the administrator guide will at least show up in google versus release notes. Maybe just add a \"Signals Ironic understands\" section to our admin guide?","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"d9eda1bdf4ddfc9361899c8e0be8dc6ad8161789","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    shutdown. This is similar to a ``SIGTERM`` graceful shutdown but the timeout"},{"line_number":6,"context_line":"    is determined by ``[DEFAULT]drain_shutdown_timeout`` which defaults to"},{"line_number":7,"context_line":"    ``1800`` seconds. This is enough time for running tasks on existing reserved"},{"line_number":8,"context_line":"    nodes to either complete or reach their own failure timeout."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    During the drain period the conductor needs to be removed from the hash ring"},{"line_number":11,"context_line":"    to prevent new tasks from starting. Other conductors also need to not fail"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"1351da57_7e474458","line":8,"in_reply_to":"e35a93d9_bd2b1efd","updated":"2023-11-10 00:49:48.000000000","message":"We document graceful shutdown in the Admin guide, Upgrade section. I can add drain shutdown to that:\nhttps://docs.openstack.org/ironic/latest/admin/upgrade-guide.html#graceful-conductor-service-shutdown","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"12d0d80ccf310533c73f72a1ca508dfe6556fd68","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    ``1800`` seconds. This is enough time for running tasks on existing reserved"},{"line_number":8,"context_line":"    nodes to either complete or reach their own failure timeout."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    During the drain period the conductor needs to be removed from the hash ring"},{"line_number":11,"context_line":"    to prevent new tasks from starting. Other conductors also need to not fail"},{"line_number":12,"context_line":"    reserved nodes on the draining conductor which would appear to be orphaned."},{"line_number":13,"context_line":"    This is achieved by running the conductor keepalive heartbeat for this"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"5c008235_ef673a3d","line":10,"updated":"2023-11-06 16:30:22.000000000","message":"nit: \"needs\" here may sound like the operators have to do it.","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"d11e853305a681362ba0dd62de7b4beb3699d7a7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    ``1800`` seconds. This is enough time for running tasks on existing reserved"},{"line_number":8,"context_line":"    nodes to either complete or reach their own failure timeout."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    During the drain period the conductor needs to be removed from the hash ring"},{"line_number":11,"context_line":"    to prevent new tasks from starting. Other conductors also need to not fail"},{"line_number":12,"context_line":"    reserved nodes on the draining conductor which would appear to be orphaned."},{"line_number":13,"context_line":"    This is achieved by running the conductor keepalive heartbeat for this"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"6314270c_96aa6376","line":10,"in_reply_to":"5c008235_ef673a3d","updated":"2023-11-12 21:38:39.000000000","message":"Done","commit_id":"c47319b9575902d6c1c29a2483e1ffdff382a1c2"}]}
