)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"58e21688c8dee4b1aa1f3e687b2c5c0bdcb0ef4a","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Fix duplicated routes exceptions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Since the train release neutron adds routes with protocol static."},{"line_number":10,"context_line":"Keepalived also adds the same routes with different protocols depending on the keepalived version."},{"line_number":11,"context_line":"This can result in duplicated routes inside network namespaces. On l3 agent restarts those duplicate routes"},{"line_number":12,"context_line":"then prevent the l3 agent from updating its router state because it runs into \u0027RTNETLINK answers: File exists expections\u0027"},{"line_number":13,"context_line":"when it tries to execute \u0027ip route\u0027 commands."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"e0c2c74c_35323843","line":10,"updated":"2022-11-24 11:49:27.000000000","message":"Please, keep the line length below 72 chars. It is weird to read that in gerrit.\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"773c92b23bfc3f8d3bbf208ebfbc356429f555bb"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"cba3cc23c166525f3e8b12749d9595039e841e78","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix duplicated routes exceptions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Since the train release neutron adds routes with protocol static."},{"line_number":10,"context_line":"Keepalived also adds the same routes with different protocols depending on the keepalived version."},{"line_number":11,"context_line":"This can result in duplicated routes inside network namespaces. On l3 agent restarts those duplicate routes"},{"line_number":12,"context_line":"then prevent the l3 agent from updating its router state because it runs into \u0027RTNETLINK answers: File exists expections\u0027"},{"line_number":13,"context_line":"when it tries to execute \u0027ip route\u0027 commands."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"68002747_7335cb68","line":10,"in_reply_to":"e0c2c74c_35323843","updated":"2022-11-24 12:08:13.000000000","message":"Done","commit_id":"773c92b23bfc3f8d3bbf208ebfbc356429f555bb"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"58e21688c8dee4b1aa1f3e687b2c5c0bdcb0ef4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4cb6b331_ee977bf6","updated":"2022-11-24 11:49:27.000000000","message":"You should implement a functional test, adding a virtual route (that calls your upgrade), creates a keepalived config file and spawns a keepalived instance that accepts this change.","commit_id":"3ab987398926aa859ced0cab5f763a53b5e38278"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"b04ac6a522f7af5542f7264909a87f8f148b860e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"bf54eb73_b3d224eb","in_reply_to":"4cb6b331_ee977bf6","updated":"2022-11-24 12:06:18.000000000","message":"Sadly I am not really deep into how to write functional tests. Could you please give a more detailed explanation in what you except here as I don\u0027t 100% get what you mean with your statement.\n\nDo you want a functional test for the \u0027upgrade\u0027 step for switching the keepalived config from non protocol static to protocol static?","commit_id":"3ab987398926aa859ced0cab5f763a53b5e38278"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"a1520418321637ee74abc1123e011a0513ae9c35","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0d07e45b_395e3c80","in_reply_to":"5c3bcb05_be1fc310","updated":"2022-11-28 15:37:02.000000000","message":"Done","commit_id":"3ab987398926aa859ced0cab5f763a53b5e38278"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"e4eebccebeb4e84afd3d08bc0030983af5c42255","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5c3bcb05_be1fc310","in_reply_to":"bf54eb73_b3d224eb","updated":"2022-11-24 12:17:28.000000000","message":"I added `protocol static` to all virtual_routes test cases that already exist, as the patch always adds `protocol static`, not sure if this is already what you meant or if more is needed.","commit_id":"3ab987398926aa859ced0cab5f763a53b5e38278"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"33af923b3c2fe8aab718419ece10456361b24702","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1eb4b022_59397c26","updated":"2022-11-24 12:02:19.000000000","message":"-1 for the missing FTs","commit_id":"5a11e73da7b75fcfb39ae4eff99bfa14ed043465"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"83a95e59f1fb982ce3ec07f156a2efe8b49590d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"15243865_ba66e2b0","updated":"2022-11-25 15:57:48.000000000","message":"-1 just for the aesthetic comments but +2 for the working FTs, good patch. ","commit_id":"a91a2e23ddb7220f27938590562ab7bad3147d11"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5cc6d94a23f8c5a38f40079dca6441c84f560904","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"d6d33a23_b5ff04cb","updated":"2022-11-28 14:16:00.000000000","message":"Good patch!","commit_id":"c813b658d0e5e0c00093f90f849fcf67ddca16cf"}],"neutron/agent/linux/keepalived.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"58e21688c8dee4b1aa1f3e687b2c5c0bdcb0ef4a","unresolved":true,"context_lines":[{"line_number":152,"context_line":"                LOG.warning(\"keepalived_use_no_track cfg option is True but \""},{"line_number":153,"context_line":"                            \"keepalived on host seems to not support this \""},{"line_number":154,"context_line":"                            \"option\")"},{"line_number":155,"context_line":"        # NOTE: neutron and keepalived are adding the same routes on primary routers."},{"line_number":156,"context_line":"        # With this we ensure that both are adding the routes with the same procotol"},{"line_number":157,"context_line":"        # and prevent duplicated routes which result in neutron exception for ip route commands."},{"line_number":158,"context_line":"        output +\u003d \u0027 protocol static\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"c44ba4fb_72d01c8f","line":155,"range":{"start_line":155,"start_character":10,"end_line":155,"end_character":15},"updated":"2022-11-24 11:49:27.000000000","message":"We usually add a note and the nick:\n\n  # NOTE(maximiliam): ...","commit_id":"773c92b23bfc3f8d3bbf208ebfbc356429f555bb"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"cba3cc23c166525f3e8b12749d9595039e841e78","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                LOG.warning(\"keepalived_use_no_track cfg option is True but \""},{"line_number":153,"context_line":"                            \"keepalived on host seems to not support this \""},{"line_number":154,"context_line":"                            \"option\")"},{"line_number":155,"context_line":"        # NOTE: neutron and keepalived are adding the same routes on primary routers."},{"line_number":156,"context_line":"        # With this we ensure that both are adding the routes with the same procotol"},{"line_number":157,"context_line":"        # and prevent duplicated routes which result in neutron exception for ip route commands."},{"line_number":158,"context_line":"        output +\u003d \u0027 protocol static\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"6a3a27e3_9448fce0","line":155,"range":{"start_line":155,"start_character":10,"end_line":155,"end_character":15},"in_reply_to":"c44ba4fb_72d01c8f","updated":"2022-11-24 12:08:13.000000000","message":"Done","commit_id":"773c92b23bfc3f8d3bbf208ebfbc356429f555bb"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"58e21688c8dee4b1aa1f3e687b2c5c0bdcb0ef4a","unresolved":true,"context_lines":[{"line_number":154,"context_line":"                            \"option\")"},{"line_number":155,"context_line":"        # NOTE: neutron and keepalived are adding the same routes on primary routers."},{"line_number":156,"context_line":"        # With this we ensure that both are adding the routes with the same procotol"},{"line_number":157,"context_line":"        # and prevent duplicated routes which result in neutron exception for ip route commands."},{"line_number":158,"context_line":"        output +\u003d \u0027 protocol static\u0027"},{"line_number":159,"context_line":"        return output"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"22f1a224_5efb7808","line":157,"range":{"start_line":157,"start_character":9,"end_line":157,"end_character":95},"updated":"2022-11-24 11:49:27.000000000","message":"Keep line length under 80 chars.","commit_id":"773c92b23bfc3f8d3bbf208ebfbc356429f555bb"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"cba3cc23c166525f3e8b12749d9595039e841e78","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                            \"option\")"},{"line_number":155,"context_line":"        # NOTE: neutron and keepalived are adding the same routes on primary routers."},{"line_number":156,"context_line":"        # With this we ensure that both are adding the routes with the same procotol"},{"line_number":157,"context_line":"        # and prevent duplicated routes which result in neutron exception for ip route commands."},{"line_number":158,"context_line":"        output +\u003d \u0027 protocol static\u0027"},{"line_number":159,"context_line":"        return output"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"b1c75822_06b7f775","line":157,"range":{"start_line":157,"start_character":9,"end_line":157,"end_character":95},"in_reply_to":"22f1a224_5efb7808","updated":"2022-11-24 12:08:13.000000000","message":"Done","commit_id":"773c92b23bfc3f8d3bbf208ebfbc356429f555bb"}],"neutron/tests/functional/agent/l3/framework.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"83a95e59f1fb982ce3ec07f156a2efe8b49590d8","unresolved":true,"context_lines":[{"line_number":82,"context_line":"        8.8.8.0/24 via 19.4.4.4 no_track protocol static"},{"line_number":83,"context_line":"        %(extra_subnet_cidr)s dev %(ex_device_name)s scope link no_track protocol static"},{"line_number":84,"context_line":"    }"},{"line_number":85,"context_line":"}\"\"\" # noqa # We are rendering keepalived config with more than 79 chars"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def get_ovs_bridge(br_name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"73f32216_5a73502b","line":85,"range":{"start_line":85,"start_character":5,"end_line":85,"end_character":72},"updated":"2022-11-25 15:57:48.000000000","message":"This should be: # noqa: E501 # pylint: disable\u003dline-too-long","commit_id":"a91a2e23ddb7220f27938590562ab7bad3147d11"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"28c73ae5b19bc6a34d9350697c042e480b6b22d8","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        8.8.8.0/24 via 19.4.4.4 no_track protocol static"},{"line_number":83,"context_line":"        %(extra_subnet_cidr)s dev %(ex_device_name)s scope link no_track protocol static"},{"line_number":84,"context_line":"    }"},{"line_number":85,"context_line":"}\"\"\" # noqa # We are rendering keepalived config with more than 79 chars"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def get_ovs_bridge(br_name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"93a2db03_a9253f2d","line":85,"range":{"start_line":85,"start_character":5,"end_line":85,"end_character":72},"in_reply_to":"73f32216_5a73502b","updated":"2022-11-25 18:45:41.000000000","message":"Done","commit_id":"a91a2e23ddb7220f27938590562ab7bad3147d11"}],"neutron/tests/unit/agent/linux/test_keepalived.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"83a95e59f1fb982ce3ec07f156a2efe8b49590d8","unresolved":true,"context_lines":[{"line_number":164,"context_line":"            192.168.55.0/24 dev eth10 no_track"},{"line_number":165,"context_line":"        }"},{"line_number":166,"context_line":"        virtual_routes {"},{"line_number":167,"context_line":"            0.0.0.0/0 via 192.168.1.1 dev eth1 no_track protocol static"},{"line_number":168,"context_line":"        }"},{"line_number":169,"context_line":"    }"},{"line_number":170,"context_line":"    vrrp_instance VR_2 {"}],"source_content_type":"text/x-python","patch_set":7,"id":"84ee2b5b_8c266e14","line":167,"range":{"start_line":167,"start_character":12,"end_line":167,"end_character":13},"updated":"2022-11-25 15:57:48.000000000","message":"there is no need to re-indent the whole section, this line fits in 80 chars.","commit_id":"a91a2e23ddb7220f27938590562ab7bad3147d11"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"28c73ae5b19bc6a34d9350697c042e480b6b22d8","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            192.168.55.0/24 dev eth10 no_track"},{"line_number":165,"context_line":"        }"},{"line_number":166,"context_line":"        virtual_routes {"},{"line_number":167,"context_line":"            0.0.0.0/0 via 192.168.1.1 dev eth1 no_track protocol static"},{"line_number":168,"context_line":"        }"},{"line_number":169,"context_line":"    }"},{"line_number":170,"context_line":"    vrrp_instance VR_2 {"}],"source_content_type":"text/x-python","patch_set":7,"id":"16034386_e7f22c76","line":167,"range":{"start_line":167,"start_character":12,"end_line":167,"end_character":13},"in_reply_to":"84ee2b5b_8c266e14","updated":"2022-11-25 18:45:41.000000000","message":"Done","commit_id":"a91a2e23ddb7220f27938590562ab7bad3147d11"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"83a95e59f1fb982ce3ec07f156a2efe8b49590d8","unresolved":true,"context_lines":[{"line_number":247,"context_line":"            192.168.55.0/24 dev eth10"},{"line_number":248,"context_line":"        }"},{"line_number":249,"context_line":"        virtual_routes {"},{"line_number":250,"context_line":"            0.0.0.0/0 via 192.168.1.1 dev eth1 protocol static"},{"line_number":251,"context_line":"        }"},{"line_number":252,"context_line":"    }"},{"line_number":253,"context_line":"    vrrp_instance VR_2 {"}],"source_content_type":"text/x-python","patch_set":7,"id":"8d96f098_8093efb4","line":250,"range":{"start_line":250,"start_character":13,"end_line":250,"end_character":14},"updated":"2022-11-25 15:57:48.000000000","message":"ditto","commit_id":"a91a2e23ddb7220f27938590562ab7bad3147d11"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"28c73ae5b19bc6a34d9350697c042e480b6b22d8","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            192.168.55.0/24 dev eth10"},{"line_number":248,"context_line":"        }"},{"line_number":249,"context_line":"        virtual_routes {"},{"line_number":250,"context_line":"            0.0.0.0/0 via 192.168.1.1 dev eth1 protocol static"},{"line_number":251,"context_line":"        }"},{"line_number":252,"context_line":"    }"},{"line_number":253,"context_line":"    vrrp_instance VR_2 {"}],"source_content_type":"text/x-python","patch_set":7,"id":"e15dc2f8_aecbfff9","line":250,"range":{"start_line":250,"start_character":13,"end_line":250,"end_character":14},"in_reply_to":"8d96f098_8093efb4","updated":"2022-11-25 18:45:41.000000000","message":"Done","commit_id":"a91a2e23ddb7220f27938590562ab7bad3147d11"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"83a95e59f1fb982ce3ec07f156a2efe8b49590d8","unresolved":true,"context_lines":[{"line_number":395,"context_line":"                192.168.1.0/24 dev eth1%(no_track)s"},{"line_number":396,"context_line":"            }"},{"line_number":397,"context_line":"            virtual_routes {"},{"line_number":398,"context_line":"                0.0.0.0/0 via 192.168.1.1 dev eth1%(no_track)s protocol static"},{"line_number":399,"context_line":"            }"},{"line_number":400,"context_line":"        }"},{"line_number":401,"context_line":"        vrrp_instance VR_2 {"}],"source_content_type":"text/x-python","patch_set":7,"id":"93f81677_da8f3eac","line":398,"range":{"start_line":398,"start_character":16,"end_line":398,"end_character":17},"updated":"2022-11-25 15:57:48.000000000","message":"There is no need for this indentation. You can add #noqa at the end of the line. E.g.:\n\nL419:\n}\"\"\" % {\u0027no_track\u0027: no_track_value})  # noqa: E501 # pylint: disable\u003dline-too-long","commit_id":"a91a2e23ddb7220f27938590562ab7bad3147d11"},{"author":{"_account_id":34380,"name":"Maximilian Stinsky","email":"maximilian@stinsky.com","username":"mstinsky"},"change_message_id":"28c73ae5b19bc6a34d9350697c042e480b6b22d8","unresolved":false,"context_lines":[{"line_number":395,"context_line":"                192.168.1.0/24 dev eth1%(no_track)s"},{"line_number":396,"context_line":"            }"},{"line_number":397,"context_line":"            virtual_routes {"},{"line_number":398,"context_line":"                0.0.0.0/0 via 192.168.1.1 dev eth1%(no_track)s protocol static"},{"line_number":399,"context_line":"            }"},{"line_number":400,"context_line":"        }"},{"line_number":401,"context_line":"        vrrp_instance VR_2 {"}],"source_content_type":"text/x-python","patch_set":7,"id":"c210db9d_f726cb91","line":398,"range":{"start_line":398,"start_character":16,"end_line":398,"end_character":17},"in_reply_to":"93f81677_da8f3eac","updated":"2022-11-25 18:45:41.000000000","message":"Done","commit_id":"a91a2e23ddb7220f27938590562ab7bad3147d11"}]}
