)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"99ff6680bb05291bb28664757012e2c64a0c9e6a","unresolved":true,"context_lines":[{"line_number":17,"context_line":"Closes-Bug: #2077152"},{"line_number":18,"context_line":"Change-Id: Ib04346eef7e88d01e6c6bda79e10708cac553321"},{"line_number":19,"context_line":"Signed-off-by: lajoskatona \u003clajos.katona@est.tech\u003e"},{"line_number":20,"context_line":"Signed-off-by: Nikita Kushnarenko \u003cNKushnarenko@itkey.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"0f363277_0be9cd21","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":58},"updated":"2026-04-30 11:51:41.000000000","message":"after discussing with colleagues, removing this signed-off-by","commit_id":"7f4b6c6f973a8f5f3e843c2807b104f9561d174f"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":36083,"name":"Nikita Kushnarenko","display_name":"Nikita Kushnarenko","email":"NKushnarenko@itkey.com","username":"NickKush"},"change_message_id":"e11aaa3fd65267a6474ffa1cc8be7e949ca73ee5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a8e2f499_a0dc91f7","updated":"2024-12-05 12:47:15.000000000","message":"Zuul raised 2 errors that are most likely unrelated to the patch. \nI\u0027m not sure what to do with them\n\ntempest-full-py3:\n```\n+ lib/horizon:init_horizon:167             :   django-admin compress --force\n/opt/stack/data/venv/lib/python3.12/site-packages/django/conf/__init__.py:267: RemovedInDjango50Warning: The USE_L10N setting is deprecated. Starting with Django 5.0, localized formatting of data will always be enabled. For example Django will display numbers and dates using the format of the current locale.\n  warnings.warn(USE_L10N_DEPRECATED_MSG, RemovedInDjango50Warning)\n/opt/stack/data/venv/lib/python3.12/site-packages/debreach/__init__.py:6: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.\n  version_info \u003d version.StrictVersion(__version__).version\nCompressing... CommandError: An error occurred during rendering serial_console.html: Syntax error: Found \u0027inline-blo\u0027 but expected one of ADD, ALPHA_FUNCTION, BANG_IMPORTANT, BAREWORD, COLOR, DOUBLE_QUOTE, FNCT, IF_FUNCTION, INTERP_START, LITERAL_FUNCTION, LPAR, NOT, NUM, SIGN, SINGLE_QUOTE, URL_FUNCTION, VAR\n+ lib/horizon:init_horizon:1               :   exit_trap\n+ ./stack.sh:exit_trap:543                 :   local r\u003d1\n++ ./stack.sh:exit_trap:544                 :   jobs -p\n+ ./stack.sh:exit_trap:544                 :   jobs\u003d46825\n+ ./stack.sh:exit_trap:547                 :   [[ -n 46825 ]]\n+ ./stack.sh:exit_trap:547                 :   [[ -n /opt/stack/logs/devstacklog.txt.2024-12-03-084734 ]]\n+ ./stack.sh:exit_trap:547                 :   [[ True \u003d\u003d \\T\\r\\u\\e ]]\n+ ./stack.sh:exit_trap:548                 :   echo \u0027exit_trap: cleaning up child processes\u0027\nexit_trap: cleaning up child processes\n```\n\noslo.messaging-tox-py310-func-scenario02:\n```\noslo_messaging.tests.functional.notify.test_logger.LoggingNotificationHandlerTestCase.test_logging(warn,messagingv2)\n--------------------------------------------------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n\n      File \"/home/zuul/src/opendev.org/openstack/oslo.messaging/oslo_messaging/tests/functional/notify/test_logger.py\", line 76, in test_logging\n    self.assertEqual(1, len(events))\n\n      File \"/home/zuul/src/opendev.org/openstack/oslo.messaging/.tox/py310-func-scenario02/lib/python3.10/site-packages/testtools/testcase.py\", line 419, in assertEqual\n    self.assertThat(observed, matcher, message)\n\n      File \"/home/zuul/src/opendev.org/openstack/oslo.messaging/.tox/py310-func-scenario02/lib/python3.10/site-packages/testtools/testcase.py\", line 509, in assertThat\n    raise mismatch_error\n\n    testtools.matchers._impl.MismatchError: 1 !\u003d 0\n```\n\n```\n------------------------------------------------------------------------------------------------------------------------  -----------\noslo_messaging.tests.functional.test_functional.CallTestCase.test_different_exchanges                                     23.249\noslo_messaging.tests.functional.notify.test_logger.LoggingNotificationHandlerTestCase.test_logging(error,messagingv2)     22.551\noslo_messaging.tests.functional.notify.test_logger.LoggingNotificationHandlerTestCase.test_logging(error,messaging)       22.550\noslo_messaging.tests.functional.notify.test_logger.LoggingNotificationHandlerTestCase.test_logging(warn,messaging)        22.531\noslo_messaging.tests.functional.notify.test_logger.LoggingNotificationHandlerTestCase.test_logging(critical,messaging)    22.531\noslo_messaging.tests.functional.notify.test_logger.LoggingNotificationHandlerTestCase.test_logging(info,messaging)        21.547\noslo_messaging.tests.functional.notify.test_logger.LoggingNotificationHandlerTestCase.test_logging(critical,messagingv2)  21.546\noslo_messaging.tests.functional.notify.test_logger.LoggingNotificationHandlerTestCase.test_logging(info,messagingv2)      21.545\noslo_messaging.tests.functional.notify.test_logger.LoggingNotificationHandlerTestCase.test_logging(debug,messagingv2)     21.544\noslo_messaging.tests.functional.notify.test_logger.LoggingNotificationHandlerTestCase.test_logging(warn,messagingv2)      21.540\nWARNING [pifpaf.util] `psutil.Popen(pid\u003d24091, status\u003d\u0027terminated\u0027, exitcode\u003d1, started\u003d\u002708:58:30\u0027)` is already gone, sending SIGKILL to its process group\nWARNING [pifpaf.util] `psutil.Popen(pid\u003d23400, status\u003d\u0027terminated\u0027, exitcode\u003d0, started\u003d\u002708:58:20\u0027)` is already gone, sending SIGKILL to its process group\nWARNING [pifpaf.util] `psutil.Popen(pid\u003d23351, status\u003d\u0027terminated\u0027, exitcode\u003d0, started\u003d\u002708:58:20\u0027)` is already gone, sending SIGKILL to its process group\nWARNING [pifpaf.util] `psutil.Popen(pid\u003d23256, status\u003d\u0027terminated\u0027, started\u003d\u002708:58:12\u0027)` is already gone, sending SIGKILL to its process group\n```","commit_id":"b434adad782963460852c24cb6a031f2b00127c1"},{"author":{"_account_id":36083,"name":"Nikita Kushnarenko","display_name":"Nikita Kushnarenko","email":"NKushnarenko@itkey.com","username":"NickKush"},"change_message_id":"bdde5a713d0239a43b2dddc0166f27d28886bb15","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"590c47a6_c6a27387","updated":"2024-12-03 10:21:59.000000000","message":"recheck","commit_id":"b434adad782963460852c24cb6a031f2b00127c1"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"b2adfaa41959795e5d1a3de0fde6bc16c513c8f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"fb5f39d8_60f419fa","updated":"2024-12-09 08:26:32.000000000","message":"recheck","commit_id":"b434adad782963460852c24cb6a031f2b00127c1"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"2e4eac7590d6bddce903cf1b6a42350e2b7de096","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1a06823d_ba94dc75","updated":"2026-04-29 11:23:21.000000000","message":"recheck\ntest_resize_volume_backed_server_confirm failure is not related","commit_id":"8d12df2ea60caf60bd2896a2f67652587cbc4292"}],"oslo_messaging/_drivers/impl_rabbit.py":[{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"b30011dee346b118897242965a1dd4b61345dd82","unresolved":true,"context_lines":[{"line_number":1457,"context_line":"                    self.connection.drain_events(timeout\u003dpoll_timeout)"},{"line_number":1458,"context_line":"                    return"},{"line_number":1459,"context_line":"                except socket.timeout:"},{"line_number":1460,"context_line":"                    if self._heartbeat_supported_and_enabled():"},{"line_number":1461,"context_line":"                        self._heartbeat_check()"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"                    poll_timeout \u003d timer.check_return("}],"source_content_type":"text/x-python","patch_set":2,"id":"0f6cafe9_62ee9206","line":1460,"updated":"2024-12-09 10:31:35.000000000","message":"Can you describe more about this change, why should we only check heartbeat when we get a timeout?\n\nA little bit up the code there is this comment which seems to indicate it should be run (twice every second) with that.\n\u003e      # NOTE(sileht): kombu recommend to run heartbeat_check every\n\u003e        # seconds, but we use a lock around the kombu connection\n\u003e        # so, to not lock to much this lock to most of the time do nothing\n\u003e        # expected waiting the events drain, we start heartbeat_check and\n\u003e        # retrieve the server heartbeat packet only two times more than\n\u003e        # the minimum required for the heartbeat works\n\u003e        # (heartbeat_timeout/heartbeat_rate/2.0, default kombu\n\u003e        # heartbeat_rate is 2)","commit_id":"b434adad782963460852c24cb6a031f2b00127c1"},{"author":{"_account_id":36083,"name":"Nikita Kushnarenko","display_name":"Nikita Kushnarenko","email":"NKushnarenko@itkey.com","username":"NickKush"},"change_message_id":"b9c4cdd13ec1f4f2642e1d083f3ca96e7dd1058c","unresolved":true,"context_lines":[{"line_number":1457,"context_line":"                    self.connection.drain_events(timeout\u003dpoll_timeout)"},{"line_number":1458,"context_line":"                    return"},{"line_number":1459,"context_line":"                except socket.timeout:"},{"line_number":1460,"context_line":"                    if self._heartbeat_supported_and_enabled():"},{"line_number":1461,"context_line":"                        self._heartbeat_check()"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"                    poll_timeout \u003d timer.check_return("}],"source_content_type":"text/x-python","patch_set":2,"id":"82d0bac2_3d3b6656","line":1460,"in_reply_to":"0f6cafe9_62ee9206","updated":"2024-12-09 12:41:15.000000000","message":"This is a Kombu recommendation (undocumented as far as I know). \nAs an example, in their ConsumerMixin implementation, the heartbeat_check will only be called on socket.timeout, otherwise the heartbeat check will be called for every message received.\n\nThe drain_events would not produce any heartbeats, unless there are messages to consume and acknowledge. If the queue is idle/empty then the connection would raise socket.timeout, so it seemed appropriate to me to do a heartbeat at that point.\n\n\nThe comment above refers to _heartbeat_wait_timeout, which is mostly used in _heartbeat_thread_job.\n\nThe heartbeat thread is used when connection is a producer.\n```\n# NOTE(sileht): if purpose is PURPOSE_LISTEN\n# the consume code does the heartbeat stuff\n# we don\u0027t need a thread\n```\n\nThe consumer in this case will have a poll_timeout equal to the minimum value of `timeout` from AMQPListener.poll and _heartbeat_wait_timeout. So, we do not exceed the recommended heartbeat interval.\n\nI can make this change as a separate change so as not to mix two issues into one. \nLet me know how best to proceed!","commit_id":"b434adad782963460852c24cb6a031f2b00127c1"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"d40dba4de267331b19324d8ead9e4b51c84d3805","unresolved":true,"context_lines":[{"line_number":1457,"context_line":"                    self.connection.drain_events(timeout\u003dpoll_timeout)"},{"line_number":1458,"context_line":"                    return"},{"line_number":1459,"context_line":"                except socket.timeout:"},{"line_number":1460,"context_line":"                    if self._heartbeat_supported_and_enabled():"},{"line_number":1461,"context_line":"                        self._heartbeat_check()"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"                    poll_timeout \u003d timer.check_return("}],"source_content_type":"text/x-python","patch_set":2,"id":"e0402f67_25a48351","line":1460,"in_reply_to":"82d0bac2_3d3b6656","updated":"2026-04-28 12:17:05.000000000","message":"Thanks Nikita for the detailed explanation.\nI updated the comment after rebase, @tobias.urdin@binero.com if please check if we can keep it in one patch or cut into pieces to make it cleaner and consumable.","commit_id":"b434adad782963460852c24cb6a031f2b00127c1"},{"author":{"_account_id":16137,"name":"Tobias Urdin","email":"tobias.urdin@binero.com","username":"tobasco"},"change_message_id":"9a1f5a353d835357c321b2a6be413163edd234af","unresolved":false,"context_lines":[{"line_number":1457,"context_line":"                    self.connection.drain_events(timeout\u003dpoll_timeout)"},{"line_number":1458,"context_line":"                    return"},{"line_number":1459,"context_line":"                except socket.timeout:"},{"line_number":1460,"context_line":"                    if self._heartbeat_supported_and_enabled():"},{"line_number":1461,"context_line":"                        self._heartbeat_check()"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"                    poll_timeout \u003d timer.check_return("}],"source_content_type":"text/x-python","patch_set":2,"id":"a61b46e4_7f6b0fe7","line":1460,"in_reply_to":"e0402f67_25a48351","updated":"2026-05-03 16:56:49.000000000","message":"LGTM","commit_id":"b434adad782963460852c24cb6a031f2b00127c1"}]}
