)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5bd5cb2caf1bdd1975549f9faaa6b63d693e507a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"44253b87_c63f3d6d","updated":"2025-02-05 17:44:31.000000000","message":"Just two nits, and want to make sure Terry is good with this change","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"}],"neutron/db/ovn_hash_ring_db.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"470e246f3332abcd46b4cbf2318dcd1c5b612ee4","unresolved":true,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@db_api.CONTEXT_WRITER"},{"line_number":114,"context_line":"def touch_host_nodes(context, host, updated_at\u003dNone):"},{"line_number":115,"context_line":"    # NOTE(ralonsoh): there are several mechanisms to update the node OVN hash"},{"line_number":116,"context_line":"    # ring register. This method does not retry the DB operation in case of"},{"line_number":117,"context_line":"    # failure but relies on the success of later calls. That will prevent from"}],"source_content_type":"text/x-python","patch_set":10,"id":"c0736948_a4f5c496","line":114,"updated":"2025-01-31 22:08:26.000000000","message":"Are we sure that having 1 worker update for other workers is safe?\n\nScenario: 4 workers. Worker 3 dies, and uwsgi restarts it but it keeps dying so it\u0027s never actually able to process events, so 25% of all ovsdb events get dropped forever.\n\nIf workers update for themselves, they actually know they\u0027re up.","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b123eec281743580922e7a7c6c63b7fb68dd6f42","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@db_api.CONTEXT_WRITER"},{"line_number":114,"context_line":"def touch_host_nodes(context, host, updated_at\u003dNone):"},{"line_number":115,"context_line":"    # NOTE(ralonsoh): there are several mechanisms to update the node OVN hash"},{"line_number":116,"context_line":"    # ring register. This method does not retry the DB operation in case of"},{"line_number":117,"context_line":"    # failure but relies on the success of later calls. That will prevent from"}],"source_content_type":"text/x-python","patch_set":10,"id":"826c39ea_b0ca7923","line":114,"in_reply_to":"19a71553_76266334","updated":"2025-02-07 14:53:57.000000000","message":"Now I understand you... that was solved but in other patch [1]. Let me push a patch under this one. Thanks for your detailed testing! Much appreciated.\n\n[1]https://review.opendev.org/c/openstack/neutron/+/940140/3/neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py#372","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"3ee212e8aeb1e368d539632efe6ae6e77804f210","unresolved":true,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@db_api.CONTEXT_WRITER"},{"line_number":114,"context_line":"def touch_host_nodes(context, host, updated_at\u003dNone):"},{"line_number":115,"context_line":"    # NOTE(ralonsoh): there are several mechanisms to update the node OVN hash"},{"line_number":116,"context_line":"    # ring register. This method does not retry the DB operation in case of"},{"line_number":117,"context_line":"    # failure but relies on the success of later calls. That will prevent from"}],"source_content_type":"text/x-python","patch_set":10,"id":"19a71553_76266334","line":114,"in_reply_to":"2ac9eb91_27d2d16c","updated":"2025-02-07 14:42:16.000000000","message":"\u003e The presence of rotten hash ring registers is also considered. This is why the hash ring manager reads the refresh time\n\nOn my test system, all of these bogus entries \u0027updated_at\u0027 times are continually being updated and match. Example from letting it sit overnight:\n```\nvagrant@ubuntu2404:/opt/stack$ mysql -D neutron -u root -e \"select * from ovn_hash_ring;\"\n+--------------------------------------+------------------+------------+---------------------+---------------------+\n| node_uuid                            | group_name       | hostname   | created_at          | updated_at          |\n+--------------------------------------+------------------+------------+---------------------+---------------------+\n| 29a2bc2e-499f-4672-bf02-08617dd5c286 | mechanism_driver | ubuntu2404 | 2025-02-07 03:25:19 | 2025-02-07 14:41:15 |\n| 366edfb7-8259-4b39-9a42-1167dfae78bd | mechanism_driver | ubuntu2404 | 2025-02-07 03:25:19 | 2025-02-07 14:41:15 |\n| 41981b5a-9271-441a-ae5a-5324495a9e6c | mechanism_driver | ubuntu2404 | 2025-02-07 03:25:19 | 2025-02-07 14:41:15 |\n| 50fafc57-2065-4fda-abae-078ff4a291d9 | mechanism_driver | ubuntu2404 | 2025-02-07 03:25:19 | 2025-02-07 14:41:15 |\n| 7da2c125-465e-4b9a-80ea-eff79c8663d4 | mechanism_driver | ubuntu2404 | 2025-02-07 03:25:19 | 2025-02-07 14:41:18 |\n| 7f03d0b6-6ff2-4a23-b192-8ab03fa7a412 | mechanism_driver | ubuntu2404 | 2025-02-07 03:25:19 | 2025-02-07 14:41:15 |\n| c206f949-60eb-4da1-8a9c-b8687a60c598 | mechanism_driver | ubuntu2404 | 2025-02-07 03:25:19 | 2025-02-07 14:41:15 |\n| e9fd3ba7-a39d-4c28-bd5a-3258d9cb30a1 | mechanism_driver | ubuntu2404 | 2025-02-07 03:25:19 | 2025-02-07 14:41:15 |\n| edfc5d99-06da-4517-9c00-558ab0d111f1 | mechanism_driver | ubuntu2404 | 2025-02-07 03:25:19 | 2025-02-07 14:41:15 |\n| f7f21e22-81ca-4cec-b8d9-0d44257242f4 | mechanism_driver | ubuntu2404 | 2025-02-07 03:25:19 | 2025-02-07 14:41:15 |\n+--------------------------------------+------------------+------------+---------------------+---------------------+\n```","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fb39efd6ca1c66adc9072500d089e435917deda0","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@db_api.CONTEXT_WRITER"},{"line_number":114,"context_line":"def touch_host_nodes(context, host, updated_at\u003dNone):"},{"line_number":115,"context_line":"    # NOTE(ralonsoh): there are several mechanisms to update the node OVN hash"},{"line_number":116,"context_line":"    # ring register. This method does not retry the DB operation in case of"},{"line_number":117,"context_line":"    # failure but relies on the success of later calls. That will prevent from"}],"source_content_type":"text/x-python","patch_set":10,"id":"85e4cf59_4aa6d097","line":114,"in_reply_to":"403706c6_8eeb3166","updated":"2025-02-05 15:21:41.000000000","message":"Config files are read at init time, when oslo.config is loaded. All workers will fail at the same time if that happens.\n\nThis proposal is the \"least bad\" solution for the WSGI + hash ring problem. The periodic method that should refresh the nodes is not executed if the API is idle. If we find a solution to keep a thread running even when the API is idle, we can change that again.","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"426deb49db337abb1a20aa38a5188a52e607ed22","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@db_api.CONTEXT_WRITER"},{"line_number":114,"context_line":"def touch_host_nodes(context, host, updated_at\u003dNone):"},{"line_number":115,"context_line":"    # NOTE(ralonsoh): there are several mechanisms to update the node OVN hash"},{"line_number":116,"context_line":"    # ring register. This method does not retry the DB operation in case of"},{"line_number":117,"context_line":"    # failure but relies on the success of later calls. That will prevent from"}],"source_content_type":"text/x-python","patch_set":10,"id":"e1c658b8_8ead1b39","line":114,"in_reply_to":"61765a83_3d129bd4","updated":"2025-02-07 06:48:29.000000000","message":"As mentioned before, this is a user error. The API, or any other service, is not expected to behave correctly with an error in the configuration. This case is cannot be consider as a normal operation. If the user/admin introduces an error in the configuration, it is expected this error is fixed before resuming the normal operation.\n\nThe presence of rotten hash ring registers is also considered. This is why the hash ring manager reads the refresh time. Other controllers (nodes) will build their own hash ring manager based on the presence of \"fresh\" hash ring nodes. Once these registers have not been refreshed in short period of time, the hash ring managers will skip them. This second concern is also present (and treated the same) with the current code.","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"daf7a88d4d2495e13f95dad6ef7620c8a14b549f","unresolved":true,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@db_api.CONTEXT_WRITER"},{"line_number":114,"context_line":"def touch_host_nodes(context, host, updated_at\u003dNone):"},{"line_number":115,"context_line":"    # NOTE(ralonsoh): there are several mechanisms to update the node OVN hash"},{"line_number":116,"context_line":"    # ring register. This method does not retry the DB operation in case of"},{"line_number":117,"context_line":"    # failure but relies on the success of later calls. That will prevent from"}],"source_content_type":"text/x-python","patch_set":10,"id":"61765a83_3d129bd4","line":114,"in_reply_to":"7682ce09_0f878e62","updated":"2025-02-07 03:30:22.000000000","message":"(and it happens similarly with the other patches in the series applied)","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"cbf21fcb9a36da262e8a91f126b42b7db8a41bc2","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@db_api.CONTEXT_WRITER"},{"line_number":114,"context_line":"def touch_host_nodes(context, host, updated_at\u003dNone):"},{"line_number":115,"context_line":"    # NOTE(ralonsoh): there are several mechanisms to update the node OVN hash"},{"line_number":116,"context_line":"    # ring register. This method does not retry the DB operation in case of"},{"line_number":117,"context_line":"    # failure but relies on the success of later calls. That will prevent from"}],"source_content_type":"text/x-python","patch_set":10,"id":"b7066305_775b372c","line":114,"in_reply_to":"85e4cf59_4aa6d097","updated":"2025-02-07 02:49:39.000000000","message":"This isn\u0027t what I\u0027m talking about.\n\nExample:\n1. Everything running normally\n2. Edit neutron.conf with an error, e.g. service plugin that doesn\u0027t exist (DO NOT RESTART SERVICES)\n3. Simulate a failure on a single worker with kill -9 $pid_of_worker\n4. Worker respawns,throws error about the issue, stays up but doesn\u0027t handle requests\n5. Other workers still up, handling requests. Requests fail when they hit the \"down\" worker.\n\nIn addition to this, in my testing every time you kill -9 a worker and it is replaced, you get a new ovn_hash_ring DB entry, and they are never cleaned up until you restart the actual service.\n\nExample:\n```vagrant@ubuntu2404:~/devstack$ for ((i\u003d0;i\u003c10;i++)); do pgrep -f \"neutron-apiuWSGI worker 2\"|xargs kill -9; sleep 5;done\nvagrant@ubuntu2404:~/devstack$ mysql -D neutron -u root -e \"select * from ovn_hash_ring; select count(*) from ovn_hash_ring;\"\n+--------------------------------------+------------------+------------+---------------------+---------------------+\n| node_uuid                            | group_name       | hostname   | created_at          | updated_at          |\n+--------------------------------------+------------------+------------+---------------------+---------------------+\n| 0f4ee6ed-ca66-4fb0-b1c3-b6762f008738 | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n| 12ebf402-0f09-44ec-92ea-c58cc89d544d | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n| 1f83299e-bd75-4440-8d13-10ce5cb73817 | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n| 2239c43c-dad9-4043-a973-7b15e480431d | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n| 5d036705-f10b-472d-9420-b785f3590a3e | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n| 6edb1703-fbcf-4b79-9278-428d740bc534 | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n| 76dbc257-deaa-4bd2-a47a-813cb6e72a59 | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n| 95d901e6-4bdb-40a4-bd17-6446bb1d1437 | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n| 9c137f52-9eb0-446a-b081-3f6b1abf7fe9 | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n| e1ed2336-3c63-4e00-908f-7f7c515af743 | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n| e2c9963f-c604-459a-885e-17ec12dc2709 | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n| e4d78035-ff5c-4a43-a9bb-7594184e7614 | mechanism_driver | ubuntu2404 | 2025-02-07 02:45:01 | 2025-02-07 02:48:36 |\n+--------------------------------------+------------------+------------+---------------------+---------------------+\n+----------+\n| count(*) |\n+----------+\n|       12 |\n+----------+\n```","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"35314be57aaa5f7c2f5a8dbf7fd24348b4f2c5b4","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@db_api.CONTEXT_WRITER"},{"line_number":114,"context_line":"def touch_host_nodes(context, host, updated_at\u003dNone):"},{"line_number":115,"context_line":"    # NOTE(ralonsoh): there are several mechanisms to update the node OVN hash"},{"line_number":116,"context_line":"    # ring register. This method does not retry the DB operation in case of"},{"line_number":117,"context_line":"    # failure but relies on the success of later calls. That will prevent from"}],"source_content_type":"text/x-python","patch_set":10,"id":"403706c6_8eeb3166","line":114,"in_reply_to":"a26cf156_2faaa8fb","updated":"2025-02-04 15:05:22.000000000","message":"One example that would cause the issue would be for a config file to get changed, with some error in it without services being restarted. Perhaps accidentally when someone was reading the file. If a worker dies, it would continually restart while the others would be fine.","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"7243713b2c683890e7fb2cd324c7cfbca86c734a","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@db_api.CONTEXT_WRITER"},{"line_number":114,"context_line":"def touch_host_nodes(context, host, updated_at\u003dNone):"},{"line_number":115,"context_line":"    # NOTE(ralonsoh): there are several mechanisms to update the node OVN hash"},{"line_number":116,"context_line":"    # ring register. This method does not retry the DB operation in case of"},{"line_number":117,"context_line":"    # failure but relies on the success of later calls. That will prevent from"}],"source_content_type":"text/x-python","patch_set":10,"id":"7682ce09_0f878e62","line":114,"in_reply_to":"b7066305_775b372c","updated":"2025-02-07 02:51:48.000000000","message":"To clarify, originally I was worried that my first example would lead to ovn_hash_ring entries that didn\u0027t get cleaned up. But in actuality, just killing the worker by itself doesn\u0027t clean up the db entry.","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"54028fcd1f355cd80d8430a9f310df3f4ddca8e5","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@db_api.CONTEXT_WRITER"},{"line_number":114,"context_line":"def touch_host_nodes(context, host, updated_at\u003dNone):"},{"line_number":115,"context_line":"    # NOTE(ralonsoh): there are several mechanisms to update the node OVN hash"},{"line_number":116,"context_line":"    # ring register. This method does not retry the DB operation in case of"},{"line_number":117,"context_line":"    # failure but relies on the success of later calls. That will prevent from"}],"source_content_type":"text/x-python","patch_set":10,"id":"a26cf156_2faaa8fb","line":114,"in_reply_to":"c0736948_a4f5c496","updated":"2025-02-03 09:29:22.000000000","message":"I know there are some drawbacks on this implementation but:\n* This situation is very unlikely. Having just one single worker dying repeatedly while the others are alive is an uncommon situation.\n* This update method is done when a notification is received. If all workers send a DB update to the same table at the same time, we most probably generate a lock in the DB. In any case, I\u0027m going to test that in an independent patch.\n* Related to the previous point, is is faster to update all registers in one txn rather than issuing one txn per register.\n* The local hash ring managers, instantiated in each worker, do no update the nodes at the same time. We should consider that all workers of the same node are alive at the same time; if we update the nodes independently and one of them is missing, we end is the previous situation: some hash ring nodes consider all workers are alive and other don\u0027t; that leads to missing events because each worker hashed the row in a different way.\n\nTo be honest, the hash ring should be event managed. Each time a new worker becomes alive (or dies), this should trigger an event received by all hash ring managers.","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5ce95d3ed14163479b837914e8b22598069cb034","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"@db_api.CONTEXT_WRITER"},{"line_number":114,"context_line":"def touch_host_nodes(context, host, updated_at\u003dNone):"},{"line_number":115,"context_line":"    # NOTE(ralonsoh): there are several mechanisms to update the node OVN hash"},{"line_number":116,"context_line":"    # ring register. This method does not retry the DB operation in case of"},{"line_number":117,"context_line":"    # failure but relies on the success of later calls. That will prevent from"}],"source_content_type":"text/x-python","patch_set":10,"id":"2ac9eb91_27d2d16c","line":114,"in_reply_to":"e1c658b8_8ead1b39","updated":"2025-02-07 06:50:02.000000000","message":"Until we find a better way, this is the most reliable way of dealing with the hash ring nodes I\u0027ve found. The current one is broken, as we can see in the CI.","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5bd5cb2caf1bdd1975549f9faaa6b63d693e507a","unresolved":true,"context_lines":[{"line_number":218,"context_line":"            LOG.warning(\u0027uWSGI is the only supported loader for the Neutron \u0027"},{"line_number":219,"context_line":"                        \u0027API; it provides, via ``uwsgi`` library, the worker \u0027"},{"line_number":220,"context_line":"                        \u0027ID. If other loader is used, a random hash ring node \u0027"},{"line_number":221,"context_line":"                        \u0027UUDI will be provided\u0027)"},{"line_number":222,"context_line":"            self._api_worker_id \u003d wsgi_utils.FIRST_WORKER_ID"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        LOG.debug(\u0027Neutron API worker ID: %s\u0027, self._api_worker_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"a258ac15_9359dba9","line":221,"range":{"start_line":221,"start_character":25,"end_line":221,"end_character":29},"updated":"2025-02-05 17:44:31.000000000","message":"nit: UUID","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"92b0f0e960950761bee740c3042f62ccd69c8457","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            LOG.warning(\u0027uWSGI is the only supported loader for the Neutron \u0027"},{"line_number":219,"context_line":"                        \u0027API; it provides, via ``uwsgi`` library, the worker \u0027"},{"line_number":220,"context_line":"                        \u0027ID. If other loader is used, a random hash ring node \u0027"},{"line_number":221,"context_line":"                        \u0027UUDI will be provided\u0027)"},{"line_number":222,"context_line":"            self._api_worker_id \u003d wsgi_utils.FIRST_WORKER_ID"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        LOG.debug(\u0027Neutron API worker ID: %s\u0027, self._api_worker_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"a6c44cea_9c8e93c4","line":221,"range":{"start_line":221,"start_character":25,"end_line":221,"end_character":29},"in_reply_to":"a258ac15_9359dba9","updated":"2025-02-06 08:03:28.000000000","message":"Done","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovsdb_monitor.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5bd5cb2caf1bdd1975549f9faaa6b63d693e507a","unresolved":true,"context_lines":[{"line_number":834,"context_line":"        self._host \u003d CONF.host"},{"line_number":835,"context_line":"        # This event prevent from calling the refresh method more than once"},{"line_number":836,"context_line":"        # at the same time, by worker 1, in case of multiple events received"},{"line_number":837,"context_line":"        # consecutively."},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"    def _refresh_host_nodes(self):"},{"line_number":840,"context_line":"        # This operation is only performed by the first API worker."}],"source_content_type":"text/x-python","patch_set":10,"id":"22866d8b_ff2d1845","line":837,"updated":"2025-02-05 17:44:31.000000000","message":"This comment seems out of place","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"92b0f0e960950761bee740c3042f62ccd69c8457","unresolved":false,"context_lines":[{"line_number":834,"context_line":"        self._host \u003d CONF.host"},{"line_number":835,"context_line":"        # This event prevent from calling the refresh method more than once"},{"line_number":836,"context_line":"        # at the same time, by worker 1, in case of multiple events received"},{"line_number":837,"context_line":"        # consecutively."},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"    def _refresh_host_nodes(self):"},{"line_number":840,"context_line":"        # This operation is only performed by the first API worker."}],"source_content_type":"text/x-python","patch_set":10,"id":"d5912bde_b5dfb7c7","line":837,"in_reply_to":"22866d8b_ff2d1845","updated":"2025-02-06 08:03:28.000000000","message":"A left over from a previous implementation where the lock was local, but needs to be a global variable for all threads in the worker.\nI\u0027ll remove it.","commit_id":"17611a963a4465e7e080cc86ff1ebd66ecb866be"}]}
