)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ec91ac7af2a13c11bef10f7b3e92a96bc69f86fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c291bc0e_1abc1c69","updated":"2026-08-05 13:52:36.000000000","message":"-1 for the question inline","commit_id":"11d48ba36134b8d42e765a3cd8ac9b3dae8d170b"}],"ovn_octavia_provider/tests/functional/base.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ec91ac7af2a13c11bef10f7b3e92a96bc69f86fa","unresolved":true,"context_lines":[{"line_number":657,"context_line":"        if len(expected_protocols) \u003d\u003d 0:"},{"line_number":658,"context_line":"            expected_protocols.append(None)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        pool_algorithm_by_proto \u003d {}"},{"line_number":661,"context_line":"        for p in lb_data[\u0027pools\u0027]:"},{"line_number":662,"context_line":"            pool_algorithm_by_proto[p.protocol.lower()] \u003d p.lb_algorithm"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        expected_lbs \u003d []"},{"line_number":665,"context_line":"        for protocol in expected_protocols:"},{"line_number":666,"context_line":"            lb_algorithm \u003d pool_algorithm_by_proto.get("},{"line_number":667,"context_line":"                protocol, o_constants.LB_ALGORITHM_SOURCE_IP_PORT)"},{"line_number":668,"context_line":"            lb \u003d {\u0027name\u0027: lb_data[\u0027model\u0027].loadbalancer_id,"},{"line_number":669,"context_line":"                  \u0027protocol\u0027: [protocol] if protocol else [],"},{"line_number":670,"context_line":"                  \u0027vips\u0027: {},"}],"source_content_type":"text/x-python","patch_set":1,"id":"f50b5c6d_9b227acc","line":667,"range":{"start_line":660,"start_character":8,"end_line":667,"end_character":66},"updated":"2026-08-05 13:52:36.000000000","message":"This is new?","commit_id":"11d48ba36134b8d42e765a3cd8ac9b3dae8d170b"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"7b7bace64d8c5fb1835cdadc50ac6e060a31a360","unresolved":true,"context_lines":[{"line_number":657,"context_line":"        if len(expected_protocols) \u003d\u003d 0:"},{"line_number":658,"context_line":"            expected_protocols.append(None)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        pool_algorithm_by_proto \u003d {}"},{"line_number":661,"context_line":"        for p in lb_data[\u0027pools\u0027]:"},{"line_number":662,"context_line":"            pool_algorithm_by_proto[p.protocol.lower()] \u003d p.lb_algorithm"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        expected_lbs \u003d []"},{"line_number":665,"context_line":"        for protocol in expected_protocols:"},{"line_number":666,"context_line":"            lb_algorithm \u003d pool_algorithm_by_proto.get("},{"line_number":667,"context_line":"                protocol, o_constants.LB_ALGORITHM_SOURCE_IP_PORT)"},{"line_number":668,"context_line":"            lb \u003d {\u0027name\u0027: lb_data[\u0027model\u0027].loadbalancer_id,"},{"line_number":669,"context_line":"                  \u0027protocol\u0027: [protocol] if protocol else [],"},{"line_number":670,"context_line":"                  \u0027vips\u0027: {},"}],"source_content_type":"text/x-python","patch_set":1,"id":"8343ae81_646a5d4e","line":667,"range":{"start_line":660,"start_character":8,"end_line":667,"end_character":66},"in_reply_to":"610d9cf3_baa23e3b","updated":"2026-08-05 14:46:10.000000000","message":"You\u0027re right, it should have been part of 998093. I missed it because all existing functional tests use SOURCE_IP_PORT, so the hardcoded value never caused a failure.","commit_id":"11d48ba36134b8d42e765a3cd8ac9b3dae8d170b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5677cafa173fc22ec5e0cb7d2ee7b6b1e57168e8","unresolved":true,"context_lines":[{"line_number":657,"context_line":"        if len(expected_protocols) \u003d\u003d 0:"},{"line_number":658,"context_line":"            expected_protocols.append(None)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        pool_algorithm_by_proto \u003d {}"},{"line_number":661,"context_line":"        for p in lb_data[\u0027pools\u0027]:"},{"line_number":662,"context_line":"            pool_algorithm_by_proto[p.protocol.lower()] \u003d p.lb_algorithm"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        expected_lbs \u003d []"},{"line_number":665,"context_line":"        for protocol in expected_protocols:"},{"line_number":666,"context_line":"            lb_algorithm \u003d pool_algorithm_by_proto.get("},{"line_number":667,"context_line":"                protocol, o_constants.LB_ALGORITHM_SOURCE_IP_PORT)"},{"line_number":668,"context_line":"            lb \u003d {\u0027name\u0027: lb_data[\u0027model\u0027].loadbalancer_id,"},{"line_number":669,"context_line":"                  \u0027protocol\u0027: [protocol] if protocol else [],"},{"line_number":670,"context_line":"                  \u0027vips\u0027: {},"}],"source_content_type":"text/x-python","patch_set":1,"id":"610d9cf3_baa23e3b","line":667,"range":{"start_line":660,"start_character":8,"end_line":667,"end_character":66},"in_reply_to":"b8d664cd_caa1efdd","updated":"2026-08-05 14:41:26.000000000","message":"But, and correct me if I\u0027m wrong, should this change have been updated in the previous patch https://review.opendev.org/c/openstack/ovn-octavia-provider/+/998093?","commit_id":"11d48ba36134b8d42e765a3cd8ac9b3dae8d170b"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"8fbf381e4b0c05a84b6b40a3da82b1c216f725a5","unresolved":true,"context_lines":[{"line_number":657,"context_line":"        if len(expected_protocols) \u003d\u003d 0:"},{"line_number":658,"context_line":"            expected_protocols.append(None)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        pool_algorithm_by_proto \u003d {}"},{"line_number":661,"context_line":"        for p in lb_data[\u0027pools\u0027]:"},{"line_number":662,"context_line":"            pool_algorithm_by_proto[p.protocol.lower()] \u003d p.lb_algorithm"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        expected_lbs \u003d []"},{"line_number":665,"context_line":"        for protocol in expected_protocols:"},{"line_number":666,"context_line":"            lb_algorithm \u003d pool_algorithm_by_proto.get("},{"line_number":667,"context_line":"                protocol, o_constants.LB_ALGORITHM_SOURCE_IP_PORT)"},{"line_number":668,"context_line":"            lb \u003d {\u0027name\u0027: lb_data[\u0027model\u0027].loadbalancer_id,"},{"line_number":669,"context_line":"                  \u0027protocol\u0027: [protocol] if protocol else [],"},{"line_number":670,"context_line":"                  \u0027vips\u0027: {},"}],"source_content_type":"text/x-python","patch_set":1,"id":"b8d664cd_caa1efdd","line":667,"range":{"start_line":660,"start_character":8,"end_line":667,"end_character":66},"in_reply_to":"f50b5c6d_9b227acc","updated":"2026-08-05 14:00:19.000000000","message":"The previous code always hardcoded SOURCE_IP_PORT for the expected selection_fields. Since we now also support SOURCE_IP (which maps to different selection fields), the expected value must match the actual pool\u0027s lb_algorithm. Each OVN LB is per-protocol, so we build a protocol-to-algorithm map from the test pools and use it to derive the correct expected selection_fields for each LB. This was missed earlier because there are no functional tests in this repository using SOURCE_IP — only unit tests, Tempest and Tobiko cover the SOURCE_IP LB algorithm.","commit_id":"11d48ba36134b8d42e765a3cd8ac9b3dae8d170b"}]}
