)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"84c2c9a1e6db21a8dec85d8ca80afa36d1c1a609","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1fa45bcc_d3de2dd4","updated":"2022-09-09 07:24:45.000000000","message":"I also got this backtrace when restarting the health-manager while 2 amphorae where running:\n\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]: INFO octavia.amphorae.drivers.health.heartbeat_tcp [-] attempting to listen on 192.168.0.86 TCP port 5555\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]: Process HM_listener_tcp:\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]: Traceback (most recent call last):\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]:   File \"/usr/lib64/python3.9/multiprocessing/process.py\", line 315, in _bootstrap\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]:     self.run()\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]:   File \"/usr/lib64/python3.9/multiprocessing/process.py\", line 108, in run\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]:     self._target(*self._args, **self._kwargs)\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]:   File \"/opt/stack/octavia/octavia/cmd/health_manager.py\", line 62, in hm_listener_tcp\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]:     tcp_getter \u003d heartbeat_tcp.TCPStatusGetter()\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]:   File \"/opt/stack/octavia/octavia/amphorae/drivers/health/heartbeat_tcp.py\", line 46, in __init__\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]:     self.update(self.key, self.ip, self.port)\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]:   File \"/opt/stack/octavia/octavia/amphorae/drivers/health/heartbeat_tcp.py\", line 64, in update\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]:     self.sock.bind(self.sockaddr)\nSep 09 09:23:31 devstack1 octavia-health-manager[1550824]: OSError: [Errno 98] Address already in use\n","commit_id":"4666115e92ad2173b8259ef5f436b5e3d84b5587"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"bfa2cf8354911d1a2cf3dae8e6b550c49b925b5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"55176089_53fc8957","updated":"2022-09-09 07:15:15.000000000","message":"Some notes after a first quick review:\n- we need to update the lb-health-mgr-sec-grp security group and the firewall rules (in devstack/plugin.sh) to allow tcp 5555 (some docs also describe the required SG/FW rules)\n- release note is missing, it should describe the new feature/option, and it should contain a mention in the upgrades section that the user would have to rebuild the image to get this feature","commit_id":"4666115e92ad2173b8259ef5f436b5e3d84b5587"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"0d5c071f38d7ea650dc5e902fb7d1121da0813be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"34020074_4921e768","updated":"2022-08-08 11:05:04.000000000","message":"recheck","commit_id":"4666115e92ad2173b8259ef5f436b5e3d84b5587"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"98b6f9032072546c058b19720481c0087acad427","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8919434d_c51ba3db","updated":"2022-08-08 08:02:22.000000000","message":"recheck","commit_id":"4666115e92ad2173b8259ef5f436b5e3d84b5587"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"215793c9d5ad91c872fb307c478b99972b234fd7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ad581ffc_e5e2493f","updated":"2022-11-14 11:31:24.000000000","message":"Tested in devstack.","commit_id":"d9a8c88628d0a8d051bee011e8a2e72ec6ae7bd5"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"8de236974e0d65ae60a60768f48cd28c668751a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a7ca758a_8e011f01","updated":"2023-02-13 10:29:52.000000000","message":"Note that this patch needs to be rebased.","commit_id":"f1d6124e40b51ead3ff8fd31defb5db9b82787f7"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"94a0e9a6af781f0a2308d035e140719ca590d5a8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"059a7cef_7fb5c91b","updated":"2024-02-14 10:46:46.000000000","message":"Patch set 11 is a rebase and follows code changes made in master for heartbeat_udp.py that had to be applied to the new heartbeat_base.py instead","commit_id":"1691d538a40590caf0eeaaca3d6596c9d0e37c7e"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"fe5db79dad64e70d3ea508e274bbb056e41ae835","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"0f2bc6d5_53cb681f","updated":"2025-03-12 16:47:35.000000000","message":"@b.petermann@syseleven.de hi, could you please rebase this commit? I met the same issue and would like to help with review","commit_id":"66f2e04535bc71d0a51d124eb9a3a373aaab38f0"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"9cc8894e68e5e4a68855e9cc24374a8c85358930","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"a55a7af7_d15db2a9","updated":"2025-03-13 12:06:29.000000000","message":"recheck","commit_id":"1e8e89d1ffc0e78d0c3126c5df4443c7227e433b"},{"author":{"_account_id":37685,"name":"Konstantin","display_name":"Konstantin Eremin","email":"k0dt@k0dt.ru","username":"k0dt"},"change_message_id":"1751247ac5e887f79c496258953c4b3d0c84dfeb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"70656f7b_81173038","updated":"2025-10-03 18:14:31.000000000","message":"recheck Segfault in tests","commit_id":"27ef4a5f410247cbcb4285ed37da475dae1f5e36"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"450e16ac00672fb46f271273ec032b8c07331830","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":19,"id":"b19cdc20_b5533686","updated":"2025-12-04 12:41:52.000000000","message":"I haven\u0027t completely tested the changes but I found 1 or 2 issues and a few suggestions","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"328491f7742667616fcbb4e34c25717f5fe51449","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"0420a3f2_a9f08169","updated":"2025-12-04 09:56:48.000000000","message":"looks good overall\nsome detail needs to be addressed.\n\nI put Backport-Candidate -2 because we don\u0027t backport feature patches","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"a29095e81005e0df49d32cfdf122110b9e1e2ee4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"191ff01a_954c0280","in_reply_to":"b19cdc20_b5533686","updated":"2025-12-11 15:00:24.000000000","message":"Done","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"07032f8cd8ed0f77e5e9e57aa9db68bf8e454ec6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"7f663223_a6734fcf","updated":"2025-12-15 12:20:57.000000000","message":"Tested on devstack, TCP health messages working as expected","commit_id":"df4a10bf1b9b3b743dd42f1b83f872f04f81806c"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"24265c6a3a7bfa94ae81d15b4e5f44c838be90a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"02f2bd3d_57036626","updated":"2025-12-09 14:39:06.000000000","message":"recheck","commit_id":"df4a10bf1b9b3b743dd42f1b83f872f04f81806c"}],"devstack/plugin.sh":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"328491f7742667616fcbb4e34c25717f5fe51449","unresolved":true,"context_lines":[{"line_number":418,"context_line":"        # devstack for testing."},{"line_number":419,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" counter log drop"},{"line_number":420,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" meta l4proto ipv6-icmp counter accept"},{"line_number":421,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" udp dport $OCTAVIA_HM_LISTEN_PORT counter accept"},{"line_number":422,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" udp dport $OCTAVIA_AMP_LOG_ADMIN_PORT counter accept"},{"line_number":423,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" udp dport $OCTAVIA_AMP_LOG_TENANT_PORT counter accept"},{"line_number":424,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" ct state related,established accept"}],"source_content_type":"text/x-sh","patch_set":19,"id":"b976290a_ff1abf84","line":421,"range":{"start_line":421,"start_character":8,"end_line":421,"end_character":121},"updated":"2025-12-04 09:56:48.000000000","message":"we need a similar rule for tcp","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"45de32950394b5066498b0fc36145ec80ecf53b4","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        # devstack for testing."},{"line_number":419,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" counter log drop"},{"line_number":420,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" meta l4proto ipv6-icmp counter accept"},{"line_number":421,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" udp dport $OCTAVIA_HM_LISTEN_PORT counter accept"},{"line_number":422,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" udp dport $OCTAVIA_AMP_LOG_ADMIN_PORT counter accept"},{"line_number":423,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" udp dport $OCTAVIA_AMP_LOG_TENANT_PORT counter accept"},{"line_number":424,"context_line":"        sudo nft insert rule inet octavia o-hm0-incoming iifname \"o-hm0\" ct state related,established accept"}],"source_content_type":"text/x-sh","patch_set":19,"id":"5f96723a_939eaecd","line":421,"range":{"start_line":421,"start_character":8,"end_line":421,"end_character":121},"in_reply_to":"b976290a_ff1abf84","updated":"2025-12-09 11:25:13.000000000","message":"Done","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"328491f7742667616fcbb4e34c25717f5fe51449","unresolved":true,"context_lines":[{"line_number":426,"context_line":"        if [ $SERVICE_IP_VERSION \u003d\u003d \u00276\u0027 ] ; then"},{"line_number":427,"context_line":"            # Allow the required IPv6 ICMP messages"},{"line_number":428,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p ipv6-icmp -j ACCEPT"},{"line_number":429,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_HM_LISTEN_PORT -j ACCEPT"},{"line_number":430,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_ADMIN_PORT -j ACCEPT"},{"line_number":431,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_TENANT_PORT -j ACCEPT"},{"line_number":432,"context_line":"        else"}],"source_content_type":"text/x-sh","patch_set":19,"id":"379a3d1a_da063f2f","line":429,"range":{"start_line":429,"start_character":12,"end_line":429,"end_character":93},"updated":"2025-12-04 09:56:48.000000000","message":"we need a similar rule for tcp","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"45de32950394b5066498b0fc36145ec80ecf53b4","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        if [ $SERVICE_IP_VERSION \u003d\u003d \u00276\u0027 ] ; then"},{"line_number":427,"context_line":"            # Allow the required IPv6 ICMP messages"},{"line_number":428,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p ipv6-icmp -j ACCEPT"},{"line_number":429,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_HM_LISTEN_PORT -j ACCEPT"},{"line_number":430,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_ADMIN_PORT -j ACCEPT"},{"line_number":431,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_TENANT_PORT -j ACCEPT"},{"line_number":432,"context_line":"        else"}],"source_content_type":"text/x-sh","patch_set":19,"id":"b3fabaea_776d3b90","line":429,"range":{"start_line":429,"start_character":12,"end_line":429,"end_character":93},"in_reply_to":"379a3d1a_da063f2f","updated":"2025-12-09 11:25:13.000000000","message":"Done","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"328491f7742667616fcbb4e34c25717f5fe51449","unresolved":true,"context_lines":[{"line_number":430,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_ADMIN_PORT -j ACCEPT"},{"line_number":431,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_TENANT_PORT -j ACCEPT"},{"line_number":432,"context_line":"        else"},{"line_number":433,"context_line":"            sudo iptables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_HM_LISTEN_PORT -j ACCEPT"},{"line_number":434,"context_line":"            sudo iptables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_ADMIN_PORT -j ACCEPT"},{"line_number":435,"context_line":"            sudo iptables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_TENANT_PORT -j ACCEPT"},{"line_number":436,"context_line":"        fi"}],"source_content_type":"text/x-sh","patch_set":19,"id":"032a3396_efdf0f24","line":433,"range":{"start_line":433,"start_character":12,"end_line":433,"end_character":92},"updated":"2025-12-04 09:56:48.000000000","message":"we need a similar rule for tcp","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"45de32950394b5066498b0fc36145ec80ecf53b4","unresolved":false,"context_lines":[{"line_number":430,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_ADMIN_PORT -j ACCEPT"},{"line_number":431,"context_line":"            sudo ip6tables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_TENANT_PORT -j ACCEPT"},{"line_number":432,"context_line":"        else"},{"line_number":433,"context_line":"            sudo iptables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_HM_LISTEN_PORT -j ACCEPT"},{"line_number":434,"context_line":"            sudo iptables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_ADMIN_PORT -j ACCEPT"},{"line_number":435,"context_line":"            sudo iptables -I INPUT -i o-hm0 -p udp --dport $OCTAVIA_AMP_LOG_TENANT_PORT -j ACCEPT"},{"line_number":436,"context_line":"        fi"}],"source_content_type":"text/x-sh","patch_set":19,"id":"7124b272_3bddb510","line":433,"range":{"start_line":433,"start_character":12,"end_line":433,"end_character":92},"in_reply_to":"032a3396_efdf0f24","updated":"2025-12-09 11:25:13.000000000","message":"Done","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"}],"doc/source/admin/amphora-tcp-heartbeat.rst":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"215793c9d5ad91c872fb307c478b99972b234fd7","unresolved":true,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":".. code-block:: ini"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"   [haproxy_amphora]"},{"line_number":19,"context_line":"   ..."},{"line_number":20,"context_line":"   heartbeat_use_tcp_threshold \u003d 8000"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"fb6efbd1_3dd6cfea","line":18,"range":{"start_line":18,"start_character":4,"end_line":18,"end_character":19},"updated":"2022-11-14 11:31:24.000000000","message":"This is wrong. It should be in the health_manager section.","commit_id":"d9a8c88628d0a8d051bee011e8a2e72ec6ae7bd5"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4de75e69418c6efaed24cc42601114716a37489b","unresolved":true,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":".. code-block:: ini"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"   [haproxy_amphora]"},{"line_number":19,"context_line":"   ..."},{"line_number":20,"context_line":"   heartbeat_use_tcp_threshold \u003d 8000"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"e366de71_77702a7c","line":18,"range":{"start_line":18,"start_character":4,"end_line":18,"end_character":19},"in_reply_to":"7bd6d83e_745eae1a","updated":"2022-11-14 15:31:27.000000000","message":"Ok, my point is that they way it is implemented in config.py right now it expects it in [health_manager]. So if it should be in [haproxy_amphora] config.py needs to be updated.","commit_id":"d9a8c88628d0a8d051bee011e8a2e72ec6ae7bd5"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"424a7c75bb7726ed8fb1dd3419551b245542127e","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":".. code-block:: ini"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"   [haproxy_amphora]"},{"line_number":19,"context_line":"   ..."},{"line_number":20,"context_line":"   heartbeat_use_tcp_threshold \u003d 8000"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"684d025e_7c72bf1b","line":18,"range":{"start_line":18,"start_character":4,"end_line":18,"end_character":19},"in_reply_to":"e366de71_77702a7c","updated":"2022-11-14 15:50:50.000000000","message":"I see. Sorry, my mistake. I fixed the rst file.","commit_id":"d9a8c88628d0a8d051bee011e8a2e72ec6ae7bd5"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"97739a0e1fde121698462fb36f7300c9f5505c78","unresolved":true,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":".. code-block:: ini"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"   [haproxy_amphora]"},{"line_number":19,"context_line":"   ..."},{"line_number":20,"context_line":"   heartbeat_use_tcp_threshold \u003d 8000"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7bd6d83e_745eae1a","line":18,"range":{"start_line":18,"start_character":4,"end_line":18,"end_character":19},"in_reply_to":"fb6efbd1_3dd6cfea","updated":"2022-11-14 15:24:20.000000000","message":"I placed the setting in the haproxy_amphora group so they are next to the other settings relating the heartbeat connection. controller_ip_port_list and heartbeat_interval (i.e. how to reach the controller and how often) are configured there, so I\u0027d say the setting when to use TCP should be in that section too.","commit_id":"d9a8c88628d0a8d051bee011e8a2e72ec6ae7bd5"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"450e16ac00672fb46f271273ec032b8c07331830","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Heartbeat messages with 8000 bytes or more will then be sent via TCP, smaller"},{"line_number":23,"context_line":"messages will be sent in a UDP packet. The TCP port number is the same as the"},{"line_number":24,"context_line":"UDP port (default is port 5555)."},{"line_number":25,"context_line":"The default value for ``heartbeat_use_tcp_threshold`` is -1, which disables"},{"line_number":26,"context_line":"TCP transport for the heartbeat completely."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"c2036ac9_ab8b8a25","line":24,"updated":"2025-12-04 12:41:52.000000000","message":"Should we give the option of setting a custom TCP port that is different to the UDP port number? In case there isn\u0027t an open TCP/UDP pair of ports that the customer is able to use","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"570f7d8d7901a0e735855f7b4d2375be222c078e","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Heartbeat messages with 8000 bytes or more will then be sent via TCP, smaller"},{"line_number":23,"context_line":"messages will be sent in a UDP packet. The TCP port number is the same as the"},{"line_number":24,"context_line":"UDP port (default is port 5555)."},{"line_number":25,"context_line":"The default value for ``heartbeat_use_tcp_threshold`` is -1, which disables"},{"line_number":26,"context_line":"TCP transport for the heartbeat completely."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"b613be2c_d6090c4e","line":24,"in_reply_to":"0c650d01_0a9e264a","updated":"2025-12-09 14:46:53.000000000","message":"That\u0027s good for me","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"45de32950394b5066498b0fc36145ec80ecf53b4","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Heartbeat messages with 8000 bytes or more will then be sent via TCP, smaller"},{"line_number":23,"context_line":"messages will be sent in a UDP packet. The TCP port number is the same as the"},{"line_number":24,"context_line":"UDP port (default is port 5555)."},{"line_number":25,"context_line":"The default value for ``heartbeat_use_tcp_threshold`` is -1, which disables"},{"line_number":26,"context_line":"TCP transport for the heartbeat completely."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"0c650d01_0a9e264a","line":24,"in_reply_to":"c2036ac9_ab8b8a25","updated":"2025-12-09 11:25:13.000000000","message":"Having different ports for UDP and TCP will complicate the configuration on the amphora (`controller_ip_port_list`), so I\u0027d prefer to keep the same ports","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"}],"octavia/amphorae/backends/health_daemon/health_sender.py":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"215793c9d5ad91c872fb307c478b99972b234fd7","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def _send_msg(self, dest, msg):"},{"line_number":104,"context_line":"        with socket.socket(dest[0], socket.SOCK_STREAM) as sock:"},{"line_number":105,"context_line":"            sock.settimeout(1)"},{"line_number":106,"context_line":"            sock.connect(dest[4])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            # Add header to convey the length of the message"}],"source_content_type":"text/x-python","patch_set":7,"id":"f4b51fdd_ee892344","line":105,"range":{"start_line":105,"start_character":28,"end_line":105,"end_character":29},"updated":"2022-11-14 11:31:24.000000000","message":"1 second timeout seems a bit low to me.","commit_id":"d9a8c88628d0a8d051bee011e8a2e72ec6ae7bd5"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"97739a0e1fde121698462fb36f7300c9f5505c78","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def _send_msg(self, dest, msg):"},{"line_number":104,"context_line":"        with socket.socket(dest[0], socket.SOCK_STREAM) as sock:"},{"line_number":105,"context_line":"            sock.settimeout(1)"},{"line_number":106,"context_line":"            sock.connect(dest[4])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            # Add header to convey the length of the message"}],"source_content_type":"text/x-python","patch_set":7,"id":"32ecd4af_6f78628e","line":105,"range":{"start_line":105,"start_character":28,"end_line":105,"end_character":29},"in_reply_to":"f4b51fdd_ee892344","updated":"2022-11-14 15:24:20.000000000","message":"changed it to 5 s","commit_id":"d9a8c88628d0a8d051bee011e8a2e72ec6ae7bd5"},{"author":{"_account_id":36795,"name":"Gabriel Hartmann","display_name":"Gabriel Hartmann","email":"gabriel.hartmann@netways.de","username":"ghartmann"},"change_message_id":"7d9c8d17f4327189b77b9e2e287999bba72fc11c","unresolved":true,"context_lines":[{"line_number":109,"context_line":"            header \u003d struct.pack(\"\u003eII\", constants.AMP_HEARTBEAT_HEADER,"},{"line_number":110,"context_line":"                                 len(msg) + 8)"},{"line_number":111,"context_line":"            sock.send(header)"},{"line_number":112,"context_line":"            sock.send(msg)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class StatusSender:"}],"source_content_type":"text/x-python","patch_set":10,"id":"0c309637_b77f7c70","line":112,"updated":"2024-02-13 08:27:00.000000000","message":"I ran into a problem here. Messages were not always transferred completely. I\u0027m not sure why, but it only happened with a large LB (len(msg) \u003e\u003d 106857 bytes). Using sock.sendall(msg) instead of sock.send(msg) fixed this for me. The documentation for socket.send() states that you should do your own verification that all data was successfully sent.","commit_id":"755b42567e03f9e05a3178ff763d978272562068"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"737ce56848404b8c1217365123ce778d53626b9a","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            header \u003d struct.pack(\"\u003eII\", constants.AMP_HEARTBEAT_HEADER,"},{"line_number":110,"context_line":"                                 len(msg) + 8)"},{"line_number":111,"context_line":"            sock.send(header)"},{"line_number":112,"context_line":"            sock.send(msg)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class StatusSender:"}],"source_content_type":"text/x-python","patch_set":10,"id":"b93f33cc_840651f8","line":112,"in_reply_to":"0c309637_b77f7c70","updated":"2024-02-14 10:40:12.000000000","message":"I changed it to use sendall. Thank you for the hint.","commit_id":"755b42567e03f9e05a3178ff763d978272562068"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"328491f7742667616fcbb4e34c25717f5fe51449","unresolved":true,"context_lines":[{"line_number":110,"context_line":"            # Add header to convey the length of the message"},{"line_number":111,"context_line":"            header \u003d struct.pack(\"\u003eII\", constants.AMP_HEARTBEAT_HEADER,"},{"line_number":112,"context_line":"                                 len(msg) + 8)"},{"line_number":113,"context_line":"            sock.sendall(header)"},{"line_number":114,"context_line":"            sock.sendall(msg)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"class StatusSender:"}],"source_content_type":"text/x-python","patch_set":19,"id":"71c8b331_2c2ce31e","line":114,"range":{"start_line":113,"start_character":0,"end_line":114,"end_character":29},"updated":"2025-12-04 09:56:48.000000000","message":"I\u0027m wondering if we can use only one sendall for each status message\n\ntcpdump clearly shows 2 packets with payload:\n\n```\n09:06:09.906498 IP 192.168.0.182.30183 \u003e 192.168.0.18.5555: Flags [P.], seq 1:9, ack 1, win 22, options [nop,nop,TS val 2043368244 ecr 790680589], length 8\n09:06:09.906541 IP 192.168.0.18.5555 \u003e 192.168.0.182.30183: Flags [.], ack 9, win 511, options [nop,nop,TS val 790680590 ecr 2043368244], length 0\n09:06:09.906501 IP 192.168.0.182.30183 \u003e 192.168.0.18.5555: Flags [FP.], seq 9:1194, ack 1, win 22, options [nop,nop,TS val 2043368244 ecr 790680589], length 1185\n09:06:09.906555 IP 192.168.0.18.5555 \u003e 192.168.0.182.30183: Flags [.], ack 1195, win 533, options [nop,nop,TS val 790680590 ecr 2043368244], length 0\n```\n\ncalling sendall once would reduce the overhead of using tcp","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"45de32950394b5066498b0fc36145ec80ecf53b4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            # Add header to convey the length of the message"},{"line_number":111,"context_line":"            header \u003d struct.pack(\"\u003eII\", constants.AMP_HEARTBEAT_HEADER,"},{"line_number":112,"context_line":"                                 len(msg) + 8)"},{"line_number":113,"context_line":"            sock.sendall(header)"},{"line_number":114,"context_line":"            sock.sendall(msg)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"class StatusSender:"}],"source_content_type":"text/x-python","patch_set":19,"id":"e2839462_1f4c68df","line":114,"range":{"start_line":113,"start_character":0,"end_line":114,"end_character":29},"in_reply_to":"71c8b331_2c2ce31e","updated":"2025-12-09 11:25:13.000000000","message":"Done","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"}],"octavia/amphorae/drivers/health/heartbeat_base.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"450e16ac00672fb46f271273ec032b8c07331830","unresolved":true,"context_lines":[{"line_number":38,"context_line":"class BaseStatusGetter:"},{"line_number":39,"context_line":"    \"\"\"This class defines methods that will gather heartbeats"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    The heartbeats are transmitted via UDP and this class will bind to a port"},{"line_number":42,"context_line":"    and absorb them"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"c524e0d0_ba24de8e","line":41,"updated":"2025-12-04 12:41:52.000000000","message":"Typo, shouldn\u0027t mention UDP","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"45de32950394b5066498b0fc36145ec80ecf53b4","unresolved":false,"context_lines":[{"line_number":38,"context_line":"class BaseStatusGetter:"},{"line_number":39,"context_line":"    \"\"\"This class defines methods that will gather heartbeats"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    The heartbeats are transmitted via UDP and this class will bind to a port"},{"line_number":42,"context_line":"    and absorb them"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"6159ab66_a5e28ac2","line":41,"in_reply_to":"c524e0d0_ba24de8e","updated":"2025-12-09 11:25:13.000000000","message":"Done","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"}],"octavia/amphorae/drivers/health/heartbeat_tcp.py":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"215793c9d5ad91c872fb307c478b99972b234fd7","unresolved":true,"context_lines":[{"line_number":95,"context_line":"                 heartbeat."},{"line_number":96,"context_line":"        \"\"\""},{"line_number":97,"context_line":"        (sock, srcaddr) \u003d self.sock.accept()"},{"line_number":98,"context_line":"        sock.settimeout(1)"},{"line_number":99,"context_line":"        LOG.debug(\u0027Accepted connection from %s\u0027, srcaddr)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        msglen \u003d self.read_header(sock)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3506122c_bdacece0","line":98,"range":{"start_line":98,"start_character":24,"end_line":98,"end_character":25},"updated":"2022-11-14 11:31:24.000000000","message":"Again, I think 1 second may not be enough for congested networks.","commit_id":"d9a8c88628d0a8d051bee011e8a2e72ec6ae7bd5"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"97739a0e1fde121698462fb36f7300c9f5505c78","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                 heartbeat."},{"line_number":96,"context_line":"        \"\"\""},{"line_number":97,"context_line":"        (sock, srcaddr) \u003d self.sock.accept()"},{"line_number":98,"context_line":"        sock.settimeout(1)"},{"line_number":99,"context_line":"        LOG.debug(\u0027Accepted connection from %s\u0027, srcaddr)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        msglen \u003d self.read_header(sock)"}],"source_content_type":"text/x-python","patch_set":7,"id":"262b43c5_7a8050c4","line":98,"range":{"start_line":98,"start_character":24,"end_line":98,"end_character":25},"in_reply_to":"3506122c_bdacece0","updated":"2022-11-14 15:24:20.000000000","message":"changed it to 5 s","commit_id":"d9a8c88628d0a8d051bee011e8a2e72ec6ae7bd5"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"328491f7742667616fcbb4e34c25717f5fe51449","unresolved":true,"context_lines":[{"line_number":60,"context_line":"            if self.sock is not None:"},{"line_number":61,"context_line":"                self.sock.close()"},{"line_number":62,"context_line":"            self.sock \u003d socket.socket(ai_family, socket.SOCK_STREAM)"},{"line_number":63,"context_line":"            self.sock.settimeout(1)"},{"line_number":64,"context_line":"            self.sock.bind(self.sockaddr)"},{"line_number":65,"context_line":"            self.sock.listen(TCP_LISTEN_BACKLOG)"},{"line_number":66,"context_line":"            break  # just used the first addr getaddrinfo finds"}],"source_content_type":"text/x-python","patch_set":19,"id":"34d7a6f1_c8411ebb","line":63,"range":{"start_line":63,"start_character":12,"end_line":63,"end_character":35},"updated":"2025-12-04 09:56:48.000000000","message":"I wonder if we need a higher value for the timeout, especially when dealing with very loaded env.\nHave you made some tests with a lot of LBs/amphorae and members?","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"a3f8f2b3dda995314c34a1c7efd74dfbf88f3d8f","unresolved":true,"context_lines":[{"line_number":60,"context_line":"            if self.sock is not None:"},{"line_number":61,"context_line":"                self.sock.close()"},{"line_number":62,"context_line":"            self.sock \u003d socket.socket(ai_family, socket.SOCK_STREAM)"},{"line_number":63,"context_line":"            self.sock.settimeout(1)"},{"line_number":64,"context_line":"            self.sock.bind(self.sockaddr)"},{"line_number":65,"context_line":"            self.sock.listen(TCP_LISTEN_BACKLOG)"},{"line_number":66,"context_line":"            break  # just used the first addr getaddrinfo finds"}],"source_content_type":"text/x-python","patch_set":19,"id":"0004cca4_036f8247","line":63,"range":{"start_line":63,"start_character":12,"end_line":63,"end_character":35},"in_reply_to":"34d7a6f1_c8411ebb","updated":"2025-12-09 16:00:17.000000000","message":"this 1 sec timeout here is for the listen socket, basically letting the accept() call in line 97 block for up to 1 sec waiting for an incoming connection. That similar to the settimeout(1) for the UDP variant. The timeout for reading from an accepted TCP connection is 5 sec (in `docrecv`).\nIn most cases TCP transport isn\u0027t even needed. In our deployment we set the message size threshold for switching to TCP to 8000 bytes and most of the 1000 LBs don\u0027t reach that. Only if an LB has more than 320 members or so.","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"}],"octavia/amphorae/drivers/health/heartbeat_udp.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"328491f7742667616fcbb4e34c25717f5fe51449","unresolved":true,"context_lines":[{"line_number":34,"context_line":"    and absorb them"},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        super().__init__()"},{"line_number":38,"context_line":"        self.key \u003d cfg.CONF.health_manager.heartbeat_key"},{"line_number":39,"context_line":"        self.ip \u003d cfg.CONF.health_manager.bind_ip"},{"line_number":40,"context_line":"        self.port \u003d cfg.CONF.health_manager.bind_port"}],"source_content_type":"text/x-python","patch_set":19,"id":"09cc9c20_22e7f5a9","line":37,"range":{"start_line":37,"start_character":7,"end_line":37,"end_character":26},"updated":"2025-12-04 09:56:48.000000000","message":"probably not needed, __init__ func of the parent class is always called.","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"45de32950394b5066498b0fc36145ec80ecf53b4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    and absorb them"},{"line_number":35,"context_line":"    \"\"\""},{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        super().__init__()"},{"line_number":38,"context_line":"        self.key \u003d cfg.CONF.health_manager.heartbeat_key"},{"line_number":39,"context_line":"        self.ip \u003d cfg.CONF.health_manager.bind_ip"},{"line_number":40,"context_line":"        self.port \u003d cfg.CONF.health_manager.bind_port"}],"source_content_type":"text/x-python","patch_set":19,"id":"dc27429a_fb49ac88","line":37,"range":{"start_line":37,"start_character":7,"end_line":37,"end_character":26},"in_reply_to":"09cc9c20_22e7f5a9","updated":"2025-12-09 11:25:13.000000000","message":"Without the super init the parent class init won\u0027t be called. I tested that with a simple example.","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"}],"octavia/cmd/health_manager.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"450e16ac00672fb46f271273ec032b8c07331830","unresolved":true,"context_lines":[{"line_number":101,"context_line":"    LOG.info(\"Health Manager received HUP signal, mutating config.\")"},{"line_number":102,"context_line":"    _mutate_config()"},{"line_number":103,"context_line":"    os.kill(listener_udp_proc_pid, signal.SIGHUP)"},{"line_number":104,"context_line":"    os.kill(listener_tcp_proc_pid, signal.SIGHUP)"},{"line_number":105,"context_line":"    os.kill(check_proc_pid, signal.SIGHUP)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"80fee213_f6913552","line":104,"updated":"2025-12-04 12:41:52.000000000","message":"This will generate an exception when the tcp_proc_pid is None, which is the case when the TCP health check isn\u0027t used. It should probably be checked for None before the os.kill:\n\n```suggestion\n    if listener_tcp_proc_pid is not None:\n        os.kill(listener_tcp_proc_pid, signal.SIGHUP)\n```","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"45de32950394b5066498b0fc36145ec80ecf53b4","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    LOG.info(\"Health Manager received HUP signal, mutating config.\")"},{"line_number":102,"context_line":"    _mutate_config()"},{"line_number":103,"context_line":"    os.kill(listener_udp_proc_pid, signal.SIGHUP)"},{"line_number":104,"context_line":"    os.kill(listener_tcp_proc_pid, signal.SIGHUP)"},{"line_number":105,"context_line":"    os.kill(check_proc_pid, signal.SIGHUP)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"41cbf366_3beb5d8d","line":104,"in_reply_to":"80fee213_f6913552","updated":"2025-12-09 11:25:13.000000000","message":"I solved this differently. Instead of 3 arguments into `_handle_mutate_config` it\u0027s a list of pids now.","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"}],"octavia/common/config.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"328491f7742667616fcbb4e34c25717f5fe51449","unresolved":true,"context_lines":[{"line_number":316,"context_line":"                default\u003d[]),"},{"line_number":317,"context_line":"    cfg.IntOpt(\u0027heartbeat_use_tcp_threshold\u0027,"},{"line_number":318,"context_line":"               help\u003d_(\u0027Send the heartbeat message via TCP instead of UDP \u0027"},{"line_number":319,"context_line":"                      \u0027if it is larger than the configured value. \u0027"},{"line_number":320,"context_line":"                      \u0027Set to -1 (default) to always use UDP. \u0027"},{"line_number":321,"context_line":"                      \u0027Set to 0 to always use TCP. \u0027),"},{"line_number":322,"context_line":"               mutable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f919425_717ec950","line":319,"range":{"start_line":319,"start_character":26,"end_line":319,"end_character":28},"updated":"2025-12-04 09:56:48.000000000","message":"I would suggest to replace \"it\" with \"the payload\" (to ensure that the operator understands that it doesn\u0027t include the headers)","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"45de32950394b5066498b0fc36145ec80ecf53b4","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                default\u003d[]),"},{"line_number":317,"context_line":"    cfg.IntOpt(\u0027heartbeat_use_tcp_threshold\u0027,"},{"line_number":318,"context_line":"               help\u003d_(\u0027Send the heartbeat message via TCP instead of UDP \u0027"},{"line_number":319,"context_line":"                      \u0027if it is larger than the configured value. \u0027"},{"line_number":320,"context_line":"                      \u0027Set to -1 (default) to always use UDP. \u0027"},{"line_number":321,"context_line":"                      \u0027Set to 0 to always use TCP. \u0027),"},{"line_number":322,"context_line":"               mutable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":19,"id":"19975499_ba920d07","line":319,"range":{"start_line":319,"start_character":26,"end_line":319,"end_character":28},"in_reply_to":"5f919425_717ec950","updated":"2025-12-09 11:25:13.000000000","message":"Done","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"}],"octavia/tests/unit/cmd/test_health_manager.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"450e16ac00672fb46f271273ec032b8c07331830","unresolved":true,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        calls \u003d ["},{"line_number":130,"context_line":"            mock.call(1, signal.SIGHUP),"},{"line_number":131,"context_line":"            mock.call(2, signal.SIGHUP),"},{"line_number":132,"context_line":"            mock.call(3, signal.SIGHUP),"},{"line_number":133,"context_line":"        ]"},{"line_number":134,"context_line":"        mock_kill.assert_has_calls(calls)"}],"source_content_type":"text/x-python","patch_set":19,"id":"04a4876e_a0f93cf0","line":131,"updated":"2025-12-04 12:41:52.000000000","message":"Since there may be no TCP PID, then there should be a test passing None to ensure it doesn\u0027t cause issues","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"},{"author":{"_account_id":31976,"name":"Bodo Petermann","email":"b.petermann@syseleven.de","username":"bpetermann"},"change_message_id":"45de32950394b5066498b0fc36145ec80ecf53b4","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        calls \u003d ["},{"line_number":130,"context_line":"            mock.call(1, signal.SIGHUP),"},{"line_number":131,"context_line":"            mock.call(2, signal.SIGHUP),"},{"line_number":132,"context_line":"            mock.call(3, signal.SIGHUP),"},{"line_number":133,"context_line":"        ]"},{"line_number":134,"context_line":"        mock_kill.assert_has_calls(calls)"}],"source_content_type":"text/x-python","patch_set":19,"id":"06058bf6_f57ae818","line":131,"in_reply_to":"04a4876e_a0f93cf0","updated":"2025-12-09 11:25:13.000000000","message":"adapted the test (`_handle_mutate_config` takes a list of pids now)","commit_id":"14834069fcdc0dd5846dfdb8bdcd3a0241815263"}]}
