)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"8047f56c109d07632318cfa838aa1edc2168bf40","unresolved":true,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"* Set cpu_map setting so that HAProxy pins each of its worker threads to"},{"line_number":12,"context_line":"  one specific CPU (except CPU0, which remains reserved for other tasks)"},{"line_number":13,"context_line":"* If a HTTPS termination listener exists, it sets the tune.ssl.cachesize"},{"line_number":14,"context_line":"  setting to 500000 which allows for more resumed SSL sessions and"},{"line_number":15,"context_line":"  therefore less computationally expensive SSL handshakes."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ifbbe714c66117e57f96614534e6f20a9634c26eb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"68efa22f_6ce71a7c","line":16,"range":{"start_line":13,"start_character":2,"end_line":16,"end_character":0},"updated":"2022-08-17 07:38:58.000000000","message":"maybe it would fit better in a separate patch?","commit_id":"5e96a7ecb1e95068580962d841689a86d029b3f0"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4e9c16febf21f0e3f0789fe74c99a5d32819b037","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"* Set cpu_map setting so that HAProxy pins each of its worker threads to"},{"line_number":12,"context_line":"  one specific CPU (except CPU0, which remains reserved for other tasks)"},{"line_number":13,"context_line":"* If a HTTPS termination listener exists, it sets the tune.ssl.cachesize"},{"line_number":14,"context_line":"  setting to 500000 which allows for more resumed SSL sessions and"},{"line_number":15,"context_line":"  therefore less computationally expensive SSL handshakes."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ifbbe714c66117e57f96614534e6f20a9634c26eb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"6457a103_d5d54cc7","line":16,"range":{"start_line":13,"start_character":2,"end_line":16,"end_character":0},"in_reply_to":"68efa22f_6ce71a7c","updated":"2022-08-18 09:11:22.000000000","message":"Done","commit_id":"5e96a7ecb1e95068580962d841689a86d029b3f0"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"30e16313f0b5ee65fb5eba09b1f0ed4ccdc77e20","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":14,"id":"c24b529e_3bdd62f3","updated":"2022-08-08 10:59:28.000000000","message":"Note for myself: Once merged, remove \"cpu pinning\" from the roadmap\nin the wiki\nhttps://wiki.openstack.org/wiki/Octavia/Roadmap#Considerations_for_Octavia_8.0.2B","commit_id":"c3c102ad46a1924019f207898c92bd3e003de325"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"160366deff5f4b30d7ce012df4ccc5e565242aa1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"97880344_24c97baf","in_reply_to":"c24b529e_3bdd62f3","updated":"2023-02-09 14:59:23.000000000","message":"Done","commit_id":"c3c102ad46a1924019f207898c92bd3e003de325"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"9cbd2743c8aa0048e0ba6cdfb0f2c2b9896b06ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"282bd74e_32868577","updated":"2022-08-23 07:03:27.000000000","message":"recheck unrelated error","commit_id":"e2167dcfd405b2aef95a5dfbb5007fe170caacfe"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"e10be6276f4eddf7107f029818c5e194b7675883","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":25,"id":"dbe7b0b4_3eaac11c","updated":"2022-08-30 07:51:00.000000000","message":"I just found another issue. cpu-map was introduced with HAProxy 1.6. With versions before that the base template should remain as it was.","commit_id":"9ebba86664248b02826d2175fc8494ff5c1b0a7f"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"600c09afa30a590d99999c552d78145821547166","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":25,"id":"4f32b25b_2d38b9b2","updated":"2022-08-30 06:58:29.000000000","message":"It seems there\u0027s something wrong with the cpu-map directive from haproxy:\n\nwith a centos 9 stream amp and 3 vcpus, haproxy 2.4.17-9f97155\n\n$ openstack loadbalancer create --vip-subnet public-subnet --name lb1\n$ openstack loadbalancer listener create --protocol HTTP --protocol-port 80 --name listener1 lb1\n\nin the amp:\nbash-5.1# ps -o pid,psr,cmd -eL | grep \u0027[h]aproxy\u0027 | cut -c-70\n    979   0 /usr/sbin/haproxy -Ws -f /var/lib/octavia/1f82b730-2bee-42\n    981   1 /usr/sbin/haproxy -Ws -f /var/lib/octavia/1f82b730-2bee-42\n    981   2 /usr/sbin/haproxy -Ws -f /var/lib/octavia/1f82b730-2bee-42\n\nlooks ok, 2 workers on CPU 1 and 2\n\n$ openstack loadbalancer pool create --protocol HTTP --listener listener1 --lb-algorithm ROUND_ROBIN --name pool1\n$ openstack loadbalancer member create --address 172.24.4.1 --protocol-port 80 --name member1 pool1\n\nbash-5.1# ps -o pid,psr,cmd -eL | grep \u0027[h]aproxy\u0027 | cut -c-70\n    979   0 /usr/sbin/haproxy -sf 1124 -Ws -f /var/lib/octavia/1f82b73\n   1206   1 /usr/sbin/haproxy -sf 1124 -Ws -f /var/lib/octavia/1f82b73\n   1206   1 /usr/sbin/haproxy -sf 1124 -Ws -f /var/lib/octavia/1f82b73\n\nthe workers are now both on CPU 1\n\nadding a pool or a member triggers \"systemctl reload haproxy-*\"\nreloading haproxy randomly dispatches the threads on the CPUs:\n\nbash-5.1# systemctl reload haproxy-*\nbash-5.1# ps -o pid,psr,cmd -eL | grep \u0027[h]aproxy\u0027 | cut -c-70\n    979   0 /usr/sbin/haproxy -sf 1206 -Ws -f /var/lib/octavia/1f82b73\n   1242   2 /usr/sbin/haproxy -sf 1206 -Ws -f /var/lib/octavia/1f82b73\n   1242   1 /usr/sbin/haproxy -sf 1206 -Ws -f /var/lib/octavia/1f82b73\nbash-5.1# systemctl reload haproxy-*\nbash-5.1# ps -o pid,psr,cmd -eL | grep \u0027[h]aproxy\u0027 | cut -c-70\n    979   0 /usr/sbin/haproxy -sf 1242 -Ws -f /var/lib/octavia/1f82b73\n   1280   1 /usr/sbin/haproxy -sf 1242 -Ws -f /var/lib/octavia/1f82b73\n   1280   2 /usr/sbin/haproxy -sf 1242 -Ws -f /var/lib/octavia/1f82b73\nbash-5.1# systemctl reload haproxy-*\nbash-5.1# ps -o pid,psr,cmd -eL | grep \u0027[h]aproxy\u0027 | cut -c-70\n    979   0 /usr/sbin/haproxy -sf 1280 -Ws -f /var/lib/octavia/1f82b73\n   1294   2 /usr/sbin/haproxy -sf 1280 -Ws -f /var/lib/octavia/1f82b73\n   1294   1 /usr/sbin/haproxy -sf 1280 -Ws -f /var/lib/octavia/1f82b73\nbash-5.1# systemctl reload haproxy-*\nbash-5.1# ps -o pid,psr,cmd -eL | grep \u0027[h]aproxy\u0027 | cut -c-70\n    979   0 /usr/sbin/haproxy -sf 1294 -Ws -f /var/lib/octavia/1f82b73\n   1305   1 /usr/sbin/haproxy -sf 1294 -Ws -f /var/lib/octavia/1f82b73\n   1305   1 /usr/sbin/haproxy -sf 1294 -Ws -f /var/lib/octavia/1f82b73\n","commit_id":"9ebba86664248b02826d2175fc8494ff5c1b0a7f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4233381a309a201ffe72bd063852e2b261e9faa0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"c9c6ebab_b8f880c5","updated":"2022-08-23 13:51:24.000000000","message":"recheck \"E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 58665 (apt-get)\"","commit_id":"9ebba86664248b02826d2175fc8494ff5c1b0a7f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"59262a04c30801767b21c5fb798ae5862225a5c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"f78af173_8b5cf250","updated":"2022-08-23 15:30:11.000000000","message":"recheck random failure","commit_id":"9ebba86664248b02826d2175fc8494ff5c1b0a7f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"69df945a289456fdf132ca70f49a81612c33774c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"a24a5aca_845f19d8","in_reply_to":"0be5e564_9b298852","updated":"2022-08-30 11:27:23.000000000","message":"Done","commit_id":"9ebba86664248b02826d2175fc8494ff5c1b0a7f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"c0d631adbaf8c7b9ea9615305967dab505319df1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"a4a0849b_f5e9ab19","in_reply_to":"38e071db_8f215857","updated":"2022-08-31 09:14:45.000000000","message":"It turns the auto keyword needs to be used with cpu-map, which was not obvious to me when I read the documentation. I was able to verify that it fixes this issue with CentOS Stream 9 amps.","commit_id":"9ebba86664248b02826d2175fc8494ff5c1b0a7f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"da6d9402ffd5754f15f8b581d63a9af865e5033d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":25,"id":"a0d47d7a_58178dc3","in_reply_to":"4f32b25b_2d38b9b2","updated":"2022-08-30 08:00:07.000000000","message":"That is a very interesting observation. I will try to find a workaround and see if there is a HAProxy bugreport about this already.","commit_id":"9ebba86664248b02826d2175fc8494ff5c1b0a7f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"e1784fdc8593a4ed66640e0131fb1deba6c843b1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":25,"id":"38e071db_8f215857","in_reply_to":"a0d47d7a_58178dc3","updated":"2022-08-30 09:26:02.000000000","message":"I opened a HAProxy bugreport about it: https://github.com/haproxy/haproxy/issues/1844","commit_id":"9ebba86664248b02826d2175fc8494ff5c1b0a7f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"da6d9402ffd5754f15f8b581d63a9af865e5033d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":25,"id":"0be5e564_9b298852","in_reply_to":"dbe7b0b4_3eaac11c","updated":"2022-08-30 08:00:07.000000000","message":"Err. It seems it was introduced with HAProxy 1.5, not 1.6.","commit_id":"9ebba86664248b02826d2175fc8494ff5c1b0a7f"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"9964032fbbdf06ff2eb8205735d1d709f7945970","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"113864dc_311b2b51","updated":"2022-08-31 19:22:30.000000000","message":"I think the logic with the feature_compatibility is not required in this patch","commit_id":"b723feab3a49e0e114b2fca093995bcdf6c474aa"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"e93180a57751a7714054b0cbe603a27f7fbde76a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"5f7bfece_5e8e712f","updated":"2022-09-01 11:12:39.000000000","message":"Thanks for the update, LGTM\nI\u0027m setting W-1 to ensure we merge this commit at the same time we merge \"Add cpu-pinning element\", I will remove it once both are approved","commit_id":"ef2d9b17a3c254ffdd29f8f7764ec6d88f846cf2"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"a104ce257daad664ba7de5d6fd36bc140cb62f3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"37bbe824_9665ab47","updated":"2022-10-14 15:06:05.000000000","message":"Looks good to me","commit_id":"3752dbc0b0b5c6f3c8e817db0cadc89e97698ca7"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"067020e3675a3a8034f7ddec97125997806cf106","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":46,"id":"6fbdea90_f6ebff29","updated":"2022-11-02 11:58:22.000000000","message":"Tested, seems to work.","commit_id":"a85b78e5d78d1ebb01a94528edf98ee05c992cf6"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"58c01c4ad85eb98f9917e25de73f7b22433e4d64","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":46,"id":"35af532f_852ea350","updated":"2022-11-02 11:13:50.000000000","message":"WIP","commit_id":"a85b78e5d78d1ebb01a94528edf98ee05c992cf6"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"41344a0fbbc1f539385d162ea8a9dd7a55cfe8fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":46,"id":"1dc95968_41a65f01","updated":"2022-11-14 15:50:10.000000000","message":"however I have a quick question","commit_id":"a85b78e5d78d1ebb01a94528edf98ee05c992cf6"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"08cf294a2d82d8cc465c1d80774d7a3a16622bf4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"e4b1690c_ab618e89","updated":"2022-11-16 15:37:45.000000000","message":"Looks good to me","commit_id":"e2cfec242e1a136773f9710ee5d0754b23a0e103"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a4937668c271b1905466a1fd9c1f6618138c1f78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":54,"id":"b47da1ea_b70bfa5c","updated":"2022-12-07 20:23:22.000000000","message":"LGTM","commit_id":"42740484d96de20235e7d3ba6e924e1f0ac17a5c"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"a3c3929442c6c009bcb787df33d09385502da73f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":57,"id":"948ab82a_b277efbb","updated":"2022-12-09 16:56:48.000000000","message":"recheck tox issue should be resolved now","commit_id":"0b1b6c58f55cbe02bb9473c2a4e961d3f658f489"}],"octavia/amphorae/backends/agent/api_server/amphora_info.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"41344a0fbbc1f539385d162ea8a9dd7a55cfe8fc","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        \"\"\"Returns the active TuneD profile(s)\"\"\""},{"line_number":200,"context_line":"        try:"},{"line_number":201,"context_line":"            with open(\"/etc/tuned/active_profile\", \"r\", encoding\u003d\"utf-8\") as f:"},{"line_number":202,"context_line":"                return f.read(1024).strip()"},{"line_number":203,"context_line":"        except OSError as ex:"},{"line_number":204,"context_line":"            LOG.debug(f\"Reading active TuneD profiles failed: {ex!r}\")"},{"line_number":205,"context_line":"        return \"\""}],"source_content_type":"text/x-python","patch_set":46,"id":"3c8c2c72_45e18382","line":202,"range":{"start_line":202,"start_character":30,"end_line":202,"end_character":34},"updated":"2022-11-14 15:50:10.000000000","message":"nit: is 1024 needed here?","commit_id":"a85b78e5d78d1ebb01a94528edf98ee05c992cf6"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"16b9a7dcd5f433bb890025b08d6963c9a0f733a0","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        \"\"\"Returns the active TuneD profile(s)\"\"\""},{"line_number":200,"context_line":"        try:"},{"line_number":201,"context_line":"            with open(\"/etc/tuned/active_profile\", \"r\", encoding\u003d\"utf-8\") as f:"},{"line_number":202,"context_line":"                return f.read(1024).strip()"},{"line_number":203,"context_line":"        except OSError as ex:"},{"line_number":204,"context_line":"            LOG.debug(f\"Reading active TuneD profiles failed: {ex!r}\")"},{"line_number":205,"context_line":"        return \"\""}],"source_content_type":"text/x-python","patch_set":46,"id":"68ba7cd0_bb0bde6d","line":202,"range":{"start_line":202,"start_character":30,"end_line":202,"end_character":34},"in_reply_to":"3c8c2c72_45e18382","updated":"2022-11-14 16:24:30.000000000","message":"It is not needed, I added it merely as a safety measure to prevent that a manipulated (ie. very large) file could make the process crash (eg. by going OOM). This file should only be a few bytes large.","commit_id":"a85b78e5d78d1ebb01a94528edf98ee05c992cf6"}],"octavia/common/jinja/haproxy/combined_listeners/jinja_cfg.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"c5b094c777d6dc8345285f09fe4e782ee4aef766","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            \u0027enable_prometheus\u0027: enable_prometheus,"},{"line_number":194,"context_line":"        }"},{"line_number":195,"context_line":"        try:"},{"line_number":196,"context_line":"            jinja_dict[\"cpu_count\"] \u003d int(amp_details[\"cpu_count\"])"},{"line_number":197,"context_line":"        except (KeyError, TypeError):"},{"line_number":198,"context_line":"            pass"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"cd8680a6_5bf155a9","line":196,"range":{"start_line":196,"start_character":12,"end_line":196,"end_character":67},"updated":"2022-08-23 08:12:16.000000000","message":"ack, I assume this would work when running an old amphora image that doesn\u0027t have a cpu_count","commit_id":"e2167dcfd405b2aef95a5dfbb5007fe170caacfe"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"c5b094c777d6dc8345285f09fe4e782ee4aef766","unresolved":true,"context_lines":[{"line_number":194,"context_line":"        }"},{"line_number":195,"context_line":"        try:"},{"line_number":196,"context_line":"            jinja_dict[\"cpu_count\"] \u003d int(amp_details[\"cpu_count\"])"},{"line_number":197,"context_line":"        except (KeyError, TypeError):"},{"line_number":198,"context_line":"            pass"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        return self._get_template().render("}],"source_content_type":"text/x-python","patch_set":23,"id":"2be01114_333630a1","line":197,"range":{"start_line":197,"start_character":15,"end_line":197,"end_character":36},"updated":"2022-08-23 08:12:16.000000000","message":"int() raises a ValueError if the argument cannot be parsed. maybe s/TypeError/ValueError/?","commit_id":"e2167dcfd405b2aef95a5dfbb5007fe170caacfe"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"a18d08ecf826996370dcfb0caf2c60bf82ac1df9","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        }"},{"line_number":195,"context_line":"        try:"},{"line_number":196,"context_line":"            jinja_dict[\"cpu_count\"] \u003d int(amp_details[\"cpu_count\"])"},{"line_number":197,"context_line":"        except (KeyError, TypeError):"},{"line_number":198,"context_line":"            pass"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        return self._get_template().render("}],"source_content_type":"text/x-python","patch_set":23,"id":"fb49deda_730de12f","line":197,"range":{"start_line":197,"start_character":15,"end_line":197,"end_character":36},"in_reply_to":"2be01114_333630a1","updated":"2022-08-23 10:08:36.000000000","message":"This is private API and the value can only be either an integer or None [1]. If it\u0027s something else it is a bug in os.cpu_count() or something fishy is going on which should be investigated. int(None) will raise TypeError.\n\n[1]: https://docs.python.org/3/library/os.html#os.cpu_count","commit_id":"e2167dcfd405b2aef95a5dfbb5007fe170caacfe"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"9964032fbbdf06ff2eb8205735d1d709f7945970","unresolved":true,"context_lines":[{"line_number":102,"context_line":"        feature_compatibility \u003d {}"},{"line_number":103,"context_line":"        # Is it newer than haproxy 1.4?"},{"line_number":104,"context_line":"        if not (int(haproxy_versions[0]) \u003c 2 and int(haproxy_versions[1]) \u003c 5):"},{"line_number":105,"context_line":"            feature_compatibility[constants.CPU_MAP] \u003d True"},{"line_number":106,"context_line":"        if not (int(haproxy_versions[0]) \u003c 2 and int(haproxy_versions[1]) \u003c 6):"},{"line_number":107,"context_line":"            feature_compatibility[constants.HTTP_REUSE] \u003d True"},{"line_number":108,"context_line":"        if not (int(haproxy_versions[0]) \u003c 2 and int(haproxy_versions[1]) \u003c 9):"}],"source_content_type":"text/x-python","patch_set":31,"id":"eb9b6b94_2dfc2ee6","line":105,"range":{"start_line":105,"start_character":12,"end_line":105,"end_character":59},"updated":"2022-08-31 19:22:30.000000000","message":"IMHO this is not needed, we\u0027ll never see haproxy \u003c1.4 with octavia Zed.","commit_id":"b723feab3a49e0e114b2fca093995bcdf6c474aa"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"651eecfe320477a114fd2eaee91c470f81558e25","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        feature_compatibility \u003d {}"},{"line_number":103,"context_line":"        # Is it newer than haproxy 1.4?"},{"line_number":104,"context_line":"        if not (int(haproxy_versions[0]) \u003c 2 and int(haproxy_versions[1]) \u003c 5):"},{"line_number":105,"context_line":"            feature_compatibility[constants.CPU_MAP] \u003d True"},{"line_number":106,"context_line":"        if not (int(haproxy_versions[0]) \u003c 2 and int(haproxy_versions[1]) \u003c 6):"},{"line_number":107,"context_line":"            feature_compatibility[constants.HTTP_REUSE] \u003d True"},{"line_number":108,"context_line":"        if not (int(haproxy_versions[0]) \u003c 2 and int(haproxy_versions[1]) \u003c 9):"}],"source_content_type":"text/x-python","patch_set":31,"id":"ef912107_7bd3030f","line":105,"range":{"start_line":105,"start_character":12,"end_line":105,"end_character":59},"in_reply_to":"eb9b6b94_2dfc2ee6","updated":"2022-09-01 09:23:47.000000000","message":"Done","commit_id":"b723feab3a49e0e114b2fca093995bcdf6c474aa"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"9c8403bd668a06fd21345f8d55b1164850d91f18","unresolved":true,"context_lines":[{"line_number":203,"context_line":"            \u0027require_insecure_fork\u0027: require_insecure_fork,"},{"line_number":204,"context_line":"        }"},{"line_number":205,"context_line":"        try:"},{"line_number":206,"context_line":"            # Enable cpu-pinning only if the amphora TuneD profile is active"},{"line_number":207,"context_line":"            if \"amphora\" in amp_details[\"active_tuned_profiles\"].split():"},{"line_number":208,"context_line":"                jinja_dict[\"cpu_count\"] \u003d int(amp_details[\"cpu_count\"])"},{"line_number":209,"context_line":"        except (KeyError, TypeError):"}],"source_content_type":"text/x-python","patch_set":48,"id":"8092a0da_eaff64b3","line":206,"range":{"start_line":206,"start_character":12,"end_line":206,"end_character":76},"updated":"2022-11-16 13:38:15.000000000","message":"And also if the haproxy version is 1.5 or higher, right?","commit_id":"19c6774c1b488803659dbf41b875d8de7ff00e9a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"cdb14ee52e83a7b3c591721edc985631c4967460","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            \u0027require_insecure_fork\u0027: require_insecure_fork,"},{"line_number":204,"context_line":"        }"},{"line_number":205,"context_line":"        try:"},{"line_number":206,"context_line":"            # Enable cpu-pinning only if the amphora TuneD profile is active"},{"line_number":207,"context_line":"            if \"amphora\" in amp_details[\"active_tuned_profiles\"].split():"},{"line_number":208,"context_line":"                jinja_dict[\"cpu_count\"] \u003d int(amp_details[\"cpu_count\"])"},{"line_number":209,"context_line":"        except (KeyError, TypeError):"}],"source_content_type":"text/x-python","patch_set":48,"id":"d816049b_4987052f","line":206,"range":{"start_line":206,"start_character":12,"end_line":206,"end_character":76},"in_reply_to":"8092a0da_eaff64b3","updated":"2022-11-16 14:45:45.000000000","message":"Yes. In a previous version I implemented a version check for this, but it seemed unnecessary. See https://review.opendev.org/c/openstack/octavia/+/849130/comment/eb9b6b94_2dfc2ee6/. However, I updated the commit message.","commit_id":"19c6774c1b488803659dbf41b875d8de7ff00e9a"}],"octavia/common/jinja/haproxy/combined_listeners/templates/base.j2.orig":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"507c30206817d76db65e6814babab127c488b767","unresolved":true,"context_lines":[{"line_number":1,"context_line":"{#   Copyright (c) 2015 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"application/octet-stream","patch_set":21,"id":"32e11ffa_c71b12d9","line":1,"updated":"2022-08-19 21:39:05.000000000","message":"this file should be removed, it is the result of a merge conflict","commit_id":"b60c47a6110a03baa594116f5a36de439ad8d2e1"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"af32af81248db08619e763cb03c1ead4990e4df5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{#   Copyright (c) 2015 Rackspace"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"application/octet-stream","patch_set":21,"id":"180ed75f_9600563f","line":1,"in_reply_to":"32e11ffa_c71b12d9","updated":"2022-08-22 08:59:08.000000000","message":"Done","commit_id":"b60c47a6110a03baa594116f5a36de439ad8d2e1"}],"octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"c5b094c777d6dc8345285f09fe4e782ee4aef766","unresolved":true,"context_lines":[{"line_number":2544,"context_line":"        expected_dict \u003d {\u0027active\u0027: True, \u0027api_version\u0027: \u00271.0\u0027,"},{"line_number":2545,"context_line":"                         \u0027cpu\u0027: {\u0027soft_irq\u0027: cpu_softirq, \u0027system\u0027: cpu_system,"},{"line_number":2546,"context_line":"                                 \u0027total\u0027: cpu_total, \u0027user\u0027: cpu_user},"},{"line_number":2547,"context_line":"                         \u0027cpu_count\u0027: os.cpu_count(),"},{"line_number":2548,"context_line":"                         \u0027disk\u0027: {\u0027available\u0027: disk_available,"},{"line_number":2549,"context_line":"                                  \u0027used\u0027: disk_used},"},{"line_number":2550,"context_line":"                         \u0027haproxy_count\u0027: haproxy_count,"}],"source_content_type":"text/x-python","patch_set":23,"id":"c8932319_791d8fe2","line":2547,"range":{"start_line":2547,"start_character":38,"end_line":2547,"end_character":52},"updated":"2022-08-23 08:12:16.000000000","message":"nit: for testing purpose, I would rather use a hard-coded value","commit_id":"e2167dcfd405b2aef95a5dfbb5007fe170caacfe"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"f81944584dfea6b3181fe990d09354567c58fb45","unresolved":false,"context_lines":[{"line_number":2544,"context_line":"        expected_dict \u003d {\u0027active\u0027: True, \u0027api_version\u0027: \u00271.0\u0027,"},{"line_number":2545,"context_line":"                         \u0027cpu\u0027: {\u0027soft_irq\u0027: cpu_softirq, \u0027system\u0027: cpu_system,"},{"line_number":2546,"context_line":"                                 \u0027total\u0027: cpu_total, \u0027user\u0027: cpu_user},"},{"line_number":2547,"context_line":"                         \u0027cpu_count\u0027: os.cpu_count(),"},{"line_number":2548,"context_line":"                         \u0027disk\u0027: {\u0027available\u0027: disk_available,"},{"line_number":2549,"context_line":"                                  \u0027used\u0027: disk_used},"},{"line_number":2550,"context_line":"                         \u0027haproxy_count\u0027: haproxy_count,"}],"source_content_type":"text/x-python","patch_set":23,"id":"90be83f7_d2618dcf","line":2547,"range":{"start_line":2547,"start_character":38,"end_line":2547,"end_character":52},"in_reply_to":"55486337_6e20815d","updated":"2022-08-23 12:48:03.000000000","message":"Reverted the update because tests fail or require a os.cpu_count mock otherwise.","commit_id":"e2167dcfd405b2aef95a5dfbb5007fe170caacfe"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"a18d08ecf826996370dcfb0caf2c60bf82ac1df9","unresolved":false,"context_lines":[{"line_number":2544,"context_line":"        expected_dict \u003d {\u0027active\u0027: True, \u0027api_version\u0027: \u00271.0\u0027,"},{"line_number":2545,"context_line":"                         \u0027cpu\u0027: {\u0027soft_irq\u0027: cpu_softirq, \u0027system\u0027: cpu_system,"},{"line_number":2546,"context_line":"                                 \u0027total\u0027: cpu_total, \u0027user\u0027: cpu_user},"},{"line_number":2547,"context_line":"                         \u0027cpu_count\u0027: os.cpu_count(),"},{"line_number":2548,"context_line":"                         \u0027disk\u0027: {\u0027available\u0027: disk_available,"},{"line_number":2549,"context_line":"                                  \u0027used\u0027: disk_used},"},{"line_number":2550,"context_line":"                         \u0027haproxy_count\u0027: haproxy_count,"}],"source_content_type":"text/x-python","patch_set":23,"id":"55486337_6e20815d","line":2547,"range":{"start_line":2547,"start_character":38,"end_line":2547,"end_character":52},"in_reply_to":"c8932319_791d8fe2","updated":"2022-08-23 10:08:36.000000000","message":"Done","commit_id":"e2167dcfd405b2aef95a5dfbb5007fe170caacfe"}],"octavia/tests/unit/common/jinja/haproxy/combined_listeners/test_jinja_cfg.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"c5b094c777d6dc8345285f09fe4e782ee4aef766","unresolved":true,"context_lines":[{"line_number":1602,"context_line":"                defaults\u003ddefaults, logging\u003d\"\\n\"),"},{"line_number":1603,"context_line":"            rendered_obj)"},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"    def test_render_template_amp_details(self):"},{"line_number":1606,"context_line":"        j_cfg \u003d jinja_cfg.JinjaTemplater("},{"line_number":1607,"context_line":"            base_amp_path\u003d\u0027/var/lib/octavia\u0027,"},{"line_number":1608,"context_line":"            base_crt_dir\u003d\u0027/var/lib/octavia/certs\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"8768d35d_f3be1c75","line":1605,"range":{"start_line":1605,"start_character":8,"end_line":1605,"end_character":40},"updated":"2022-08-23 08:12:16.000000000","message":"could you also add a test with invalid amp_details (ex: {\"cpu_count\": \"foobar\"})?","commit_id":"e2167dcfd405b2aef95a5dfbb5007fe170caacfe"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"a18d08ecf826996370dcfb0caf2c60bf82ac1df9","unresolved":false,"context_lines":[{"line_number":1602,"context_line":"                defaults\u003ddefaults, logging\u003d\"\\n\"),"},{"line_number":1603,"context_line":"            rendered_obj)"},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"    def test_render_template_amp_details(self):"},{"line_number":1606,"context_line":"        j_cfg \u003d jinja_cfg.JinjaTemplater("},{"line_number":1607,"context_line":"            base_amp_path\u003d\u0027/var/lib/octavia\u0027,"},{"line_number":1608,"context_line":"            base_crt_dir\u003d\u0027/var/lib/octavia/certs\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"c762c4be_fa441c67","line":1605,"range":{"start_line":1605,"start_character":8,"end_line":1605,"end_character":40},"in_reply_to":"8768d35d_f3be1c75","updated":"2022-08-23 10:08:36.000000000","message":"Added a test for the None value.","commit_id":"e2167dcfd405b2aef95a5dfbb5007fe170caacfe"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"9964032fbbdf06ff2eb8205735d1d709f7945970","unresolved":true,"context_lines":[{"line_number":1602,"context_line":"                defaults\u003ddefaults, logging\u003d\"\\n\"),"},{"line_number":1603,"context_line":"            rendered_obj)"},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"    def test_render_template_amp_details(self):"},{"line_number":1606,"context_line":"        j_cfg \u003d jinja_cfg.JinjaTemplater("},{"line_number":1607,"context_line":"            base_amp_path\u003d\u0027/var/lib/octavia\u0027,"},{"line_number":1608,"context_line":"            base_crt_dir\u003d\u0027/var/lib/octavia/certs\u0027,"},{"line_number":1609,"context_line":"            connection_logging\u003dFalse)"},{"line_number":1610,"context_line":"        rendered_obj \u003d j_cfg.render_loadbalancer_obj("},{"line_number":1611,"context_line":"            sample_configs_combined.sample_amphora_tuple(),"},{"line_number":1612,"context_line":"            [sample_configs_combined.sample_listener_tuple()],"},{"line_number":1613,"context_line":"            amp_details\u003d{\"cpu_count\": 7},"},{"line_number":1614,"context_line":"        )"},{"line_number":1615,"context_line":"        defaults \u003d (\"defaults\\n\""},{"line_number":1616,"context_line":"                    \"    no log\\n\""},{"line_number":1617,"context_line":"                    \"    retries 3\\n\""},{"line_number":1618,"context_line":"                    \"    option redispatch\\n\""},{"line_number":1619,"context_line":"                    \"    option splice-request\\n\""},{"line_number":1620,"context_line":"                    \"    option splice-response\\n\""},{"line_number":1621,"context_line":"                    \"    option http-keep-alive\\n\\n\\n\")"},{"line_number":1622,"context_line":"        global_opts \u003d \"    maxconn 50000\\n\\n\""},{"line_number":1623,"context_line":"        self.assertEqual("},{"line_number":1624,"context_line":"            sample_configs_combined.sample_base_expected_config("},{"line_number":1625,"context_line":"                defaults\u003ddefaults, logging\u003d\"\\n\", global_opts\u003dglobal_opts),"},{"line_number":1626,"context_line":"            rendered_obj)"},{"line_number":1627,"context_line":""},{"line_number":1628,"context_line":"    def test_render_template_amp_details_cpu_count_none(self):"},{"line_number":1629,"context_line":"        j_cfg \u003d jinja_cfg.JinjaTemplater("},{"line_number":1630,"context_line":"            base_amp_path\u003d\u0027/var/lib/octavia\u0027,"},{"line_number":1631,"context_line":"            base_crt_dir\u003d\u0027/var/lib/octavia/certs\u0027,"},{"line_number":1632,"context_line":"            connection_logging\u003dFalse)"},{"line_number":1633,"context_line":"        rendered_obj \u003d j_cfg.render_loadbalancer_obj("},{"line_number":1634,"context_line":"            sample_configs_combined.sample_amphora_tuple(),"},{"line_number":1635,"context_line":"            [sample_configs_combined.sample_listener_tuple()],"},{"line_number":1636,"context_line":"            amp_details\u003d{\"cpu_count\": None},"},{"line_number":1637,"context_line":"        )"},{"line_number":1638,"context_line":"        defaults \u003d (\"defaults\\n\""},{"line_number":1639,"context_line":"                    \"    no log\\n\""},{"line_number":1640,"context_line":"                    \"    retries 3\\n\""},{"line_number":1641,"context_line":"                    \"    option redispatch\\n\""},{"line_number":1642,"context_line":"                    \"    option splice-request\\n\""},{"line_number":1643,"context_line":"                    \"    option splice-response\\n\""},{"line_number":1644,"context_line":"                    \"    option http-keep-alive\\n\\n\\n\")"},{"line_number":1645,"context_line":"        global_opts \u003d \"    maxconn 50000\\n\\n\""},{"line_number":1646,"context_line":"        self.assertEqual("},{"line_number":1647,"context_line":"            sample_configs_combined.sample_base_expected_config("},{"line_number":1648,"context_line":"                defaults\u003ddefaults, logging\u003d\"\\n\", global_opts\u003dglobal_opts),"},{"line_number":1649,"context_line":"            rendered_obj)"},{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"    def test_haproxy_cfg_1_5_vs_1_4(self):"},{"line_number":1652,"context_line":"        \"\"\"Test generated haproxy.cfg of HAProxy 1.5 vs. 1.4\"\"\""},{"line_number":1653,"context_line":"        j_cfg \u003d jinja_cfg.JinjaTemplater("}],"source_content_type":"text/x-python","patch_set":31,"id":"b4a3b7df_b58d7d29","line":1650,"range":{"start_line":1605,"start_character":4,"end_line":1650,"end_character":0},"updated":"2022-08-31 19:22:30.000000000","message":"nit: now that it requires an element in the feature_compatibility dict, one of these tests is pointless","commit_id":"b723feab3a49e0e114b2fca093995bcdf6c474aa"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"651eecfe320477a114fd2eaee91c470f81558e25","unresolved":false,"context_lines":[{"line_number":1602,"context_line":"                defaults\u003ddefaults, logging\u003d\"\\n\"),"},{"line_number":1603,"context_line":"            rendered_obj)"},{"line_number":1604,"context_line":""},{"line_number":1605,"context_line":"    def test_render_template_amp_details(self):"},{"line_number":1606,"context_line":"        j_cfg \u003d jinja_cfg.JinjaTemplater("},{"line_number":1607,"context_line":"            base_amp_path\u003d\u0027/var/lib/octavia\u0027,"},{"line_number":1608,"context_line":"            base_crt_dir\u003d\u0027/var/lib/octavia/certs\u0027,"},{"line_number":1609,"context_line":"            connection_logging\u003dFalse)"},{"line_number":1610,"context_line":"        rendered_obj \u003d j_cfg.render_loadbalancer_obj("},{"line_number":1611,"context_line":"            sample_configs_combined.sample_amphora_tuple(),"},{"line_number":1612,"context_line":"            [sample_configs_combined.sample_listener_tuple()],"},{"line_number":1613,"context_line":"            amp_details\u003d{\"cpu_count\": 7},"},{"line_number":1614,"context_line":"        )"},{"line_number":1615,"context_line":"        defaults \u003d (\"defaults\\n\""},{"line_number":1616,"context_line":"                    \"    no log\\n\""},{"line_number":1617,"context_line":"                    \"    retries 3\\n\""},{"line_number":1618,"context_line":"                    \"    option redispatch\\n\""},{"line_number":1619,"context_line":"                    \"    option splice-request\\n\""},{"line_number":1620,"context_line":"                    \"    option splice-response\\n\""},{"line_number":1621,"context_line":"                    \"    option http-keep-alive\\n\\n\\n\")"},{"line_number":1622,"context_line":"        global_opts \u003d \"    maxconn 50000\\n\\n\""},{"line_number":1623,"context_line":"        self.assertEqual("},{"line_number":1624,"context_line":"            sample_configs_combined.sample_base_expected_config("},{"line_number":1625,"context_line":"                defaults\u003ddefaults, logging\u003d\"\\n\", global_opts\u003dglobal_opts),"},{"line_number":1626,"context_line":"            rendered_obj)"},{"line_number":1627,"context_line":""},{"line_number":1628,"context_line":"    def test_render_template_amp_details_cpu_count_none(self):"},{"line_number":1629,"context_line":"        j_cfg \u003d jinja_cfg.JinjaTemplater("},{"line_number":1630,"context_line":"            base_amp_path\u003d\u0027/var/lib/octavia\u0027,"},{"line_number":1631,"context_line":"            base_crt_dir\u003d\u0027/var/lib/octavia/certs\u0027,"},{"line_number":1632,"context_line":"            connection_logging\u003dFalse)"},{"line_number":1633,"context_line":"        rendered_obj \u003d j_cfg.render_loadbalancer_obj("},{"line_number":1634,"context_line":"            sample_configs_combined.sample_amphora_tuple(),"},{"line_number":1635,"context_line":"            [sample_configs_combined.sample_listener_tuple()],"},{"line_number":1636,"context_line":"            amp_details\u003d{\"cpu_count\": None},"},{"line_number":1637,"context_line":"        )"},{"line_number":1638,"context_line":"        defaults \u003d (\"defaults\\n\""},{"line_number":1639,"context_line":"                    \"    no log\\n\""},{"line_number":1640,"context_line":"                    \"    retries 3\\n\""},{"line_number":1641,"context_line":"                    \"    option redispatch\\n\""},{"line_number":1642,"context_line":"                    \"    option splice-request\\n\""},{"line_number":1643,"context_line":"                    \"    option splice-response\\n\""},{"line_number":1644,"context_line":"                    \"    option http-keep-alive\\n\\n\\n\")"},{"line_number":1645,"context_line":"        global_opts \u003d \"    maxconn 50000\\n\\n\""},{"line_number":1646,"context_line":"        self.assertEqual("},{"line_number":1647,"context_line":"            sample_configs_combined.sample_base_expected_config("},{"line_number":1648,"context_line":"                defaults\u003ddefaults, logging\u003d\"\\n\", global_opts\u003dglobal_opts),"},{"line_number":1649,"context_line":"            rendered_obj)"},{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"    def test_haproxy_cfg_1_5_vs_1_4(self):"},{"line_number":1652,"context_line":"        \"\"\"Test generated haproxy.cfg of HAProxy 1.5 vs. 1.4\"\"\""},{"line_number":1653,"context_line":"        j_cfg \u003d jinja_cfg.JinjaTemplater("}],"source_content_type":"text/x-python","patch_set":31,"id":"dbb37d88_dc009b5f","line":1650,"range":{"start_line":1605,"start_character":4,"end_line":1650,"end_character":0},"in_reply_to":"b4a3b7df_b58d7d29","updated":"2022-09-01 09:23:47.000000000","message":"feature_compatibility is no longer used for this. Removed the test case below instead.","commit_id":"b723feab3a49e0e114b2fca093995bcdf6c474aa"}]}
