)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a7509079341bd593962775736245595bd745688a","unresolved":true,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2020-11-04 15:42:54 +0100"},{"line_number":4,"context_line":"Commit:     Benjamin Reichel \u003cb.reichel@syseleven.de\u003e"},{"line_number":5,"context_line":"CommitDate: 2020-11-05 13:15:13 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Syncing neutron db with ovn does not provide external_ids for static routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adds external_ids to the static routes in case the route is of"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"94e5baeb_a5f34253","line":6,"updated":"2021-04-21 13:46:08.000000000","message":"nit: let\u0027s constraint the commit message to the guidelines defined in https://gerrit-review.googlesource.com/Documentation/dev-crafting-changes.html","commit_id":"98d29e7919ae87077c85cad6196b13f1eb713125"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_db_sync.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5db445a370c8b4d1084c31ceb641b05e31eb99af","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                         \u0027nexthop\u0027: gw_info.gateway_ip,"},{"line_number":455,"context_line":"                         \u0027external_ids\u0027: {"},{"line_number":456,"context_line":"                             ovn_const.OVN_ROUTER_IS_EXT_GW: \u0027true\u0027,"},{"line_number":457,"context_line":"                             ovn_const.OVN_SUBNET_EXT_ID_KEY: gw_info.subnet_id}})"},{"line_number":458,"context_line":"                if gw_info.ip_version \u003d\u003d constants.IP_VERSION_6:"},{"line_number":459,"context_line":"                    continue"},{"line_number":460,"context_line":"                if gw_info.router_ip and utils.is_snat_enabled(router):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_fe63cc18","line":457,"updated":"2020-11-04 22:40:48.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"84136dedef2572a0c3348bb5d8895986e98e965d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8b816276f0bd39de09c64e5c03ef605ba39a391e","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        to_add \u003d []"},{"line_number":310,"context_line":"        to_remove \u003d []"},{"line_number":311,"context_line":"        for db_route in db_routes:"},{"line_number":312,"context_line":"            for ovn_route in ovn_routes:"},{"line_number":313,"context_line":"                if (ovn_route[\u0027destination\u0027] \u003d\u003d db_route[\u0027destination\u0027] and"},{"line_number":314,"context_line":"                   ovn_route[\u0027nexthop\u0027] \u003d\u003d db_route[\u0027nexthop\u0027]):"},{"line_number":315,"context_line":"                    break"},{"line_number":316,"context_line":"            else:"},{"line_number":317,"context_line":"                to_add.append(db_route)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        for ovn_route in ovn_routes:"},{"line_number":320,"context_line":"            for db_route in db_routes:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f621f24_b7db3219","line":317,"range":{"start_line":312,"start_character":6,"end_line":317,"end_character":39},"updated":"2020-11-05 12:34:12.000000000","message":"I don\u0027t think you are calculating correctly \"to_add\" and \"to_remove\".\n\nCan you add some UTs to check this method?\n\nFor example, in \"to_add\" you should have only those routes in \"db_routes\" not existing in \"ovn_routes\". If \"db_route\" does not match a \"ovn_route\" in the first check, you\u0027ll add this route to \"to_add\" but maybe it can match the next \"db_route\".","commit_id":"98d29e7919ae87077c85cad6196b13f1eb713125"},{"author":{"_account_id":31823,"name":"Benjamin Reichel","email":"b.reichel@syseleven.de","username":"benj200"},"change_message_id":"7d318cdb371a50c49558ff22af479012d8162943","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        to_add \u003d []"},{"line_number":310,"context_line":"        to_remove \u003d []"},{"line_number":311,"context_line":"        for db_route in db_routes:"},{"line_number":312,"context_line":"            for ovn_route in ovn_routes:"},{"line_number":313,"context_line":"                if (ovn_route[\u0027destination\u0027] \u003d\u003d db_route[\u0027destination\u0027] and"},{"line_number":314,"context_line":"                   ovn_route[\u0027nexthop\u0027] \u003d\u003d db_route[\u0027nexthop\u0027]):"},{"line_number":315,"context_line":"                    break"},{"line_number":316,"context_line":"            else:"},{"line_number":317,"context_line":"                to_add.append(db_route)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        for ovn_route in ovn_routes:"},{"line_number":320,"context_line":"            for db_route in db_routes:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f621f24_c35c26ef","line":317,"range":{"start_line":312,"start_character":6,"end_line":317,"end_character":39},"in_reply_to":"1f621f24_b7db3219","updated":"2020-11-06 11:00:10.000000000","message":"thanks for the review, i will update it","commit_id":"98d29e7919ae87077c85cad6196b13f1eb713125"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8b816276f0bd39de09c64e5c03ef605ba39a391e","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                if gw_info.gateway_ip:"},{"line_number":452,"context_line":"                    db_extends[router[\u0027id\u0027]][\u0027routes\u0027].append("},{"line_number":453,"context_line":"                        {\u0027destination\u0027: prefix,"},{"line_number":454,"context_line":"                         \u0027nexthop\u0027: gw_info.gateway_ip,"},{"line_number":455,"context_line":"                         \u0027external_ids\u0027: {"},{"line_number":456,"context_line":"                             ovn_const.OVN_ROUTER_IS_EXT_GW: \u0027true\u0027,"},{"line_number":457,"context_line":"                             ovn_const.OVN_SUBNET_EXT_ID_KEY:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f621f24_f78f6a20","line":454,"updated":"2020-11-05 12:34:12.000000000","message":"According to [1], \"external_ids\" didn\u0027t exist in OVS older than 2.8.2.\n\nWe are using 0047ca3a0290f1ef954f2c76b31477cf4b9755f5, that is 2.13, but better ask OVN expert folks.\n\n[1]https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py#L1030-L1032","commit_id":"98d29e7919ae87077c85cad6196b13f1eb713125"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c455930c62aee79bd09cb2c3d6f88966d81cbc01","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                if gw_info.gateway_ip:"},{"line_number":452,"context_line":"                    db_extends[router[\u0027id\u0027]][\u0027routes\u0027].append("},{"line_number":453,"context_line":"                        {\u0027destination\u0027: prefix,"},{"line_number":454,"context_line":"                         \u0027nexthop\u0027: gw_info.gateway_ip,"},{"line_number":455,"context_line":"                         \u0027external_ids\u0027: {"},{"line_number":456,"context_line":"                             ovn_const.OVN_ROUTER_IS_EXT_GW: \u0027true\u0027,"},{"line_number":457,"context_line":"                             ovn_const.OVN_SUBNET_EXT_ID_KEY:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f621f24_fa062f86","line":454,"in_reply_to":"1f621f24_f78f6a20","updated":"2020-11-05 13:51:35.000000000","message":"Nevermind: https://review.opendev.org/#/c/761606/","commit_id":"98d29e7919ae87077c85cad6196b13f1eb713125"}],"neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_sync.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5db445a370c8b4d1084c31ceb641b05e31eb99af","unresolved":false,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        add_route_calls \u003d [mock.call(mock.ANY, ip_prefix\u003droute[\u0027destination\u0027],"},{"line_number":619,"context_line":"                                     nexthop\u003droute[\u0027nexthop\u0027],"},{"line_number":620,"context_line":"                                     external_ids\u003droute.get(\u0027external_ids\u0027, {}))"},{"line_number":621,"context_line":"                                     for route in add_static_route_list]"},{"line_number":622,"context_line":"        ovn_api.add_static_route.assert_has_calls(add_route_calls,"},{"line_number":623,"context_line":"                                                  any_order\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_de66d029","line":620,"updated":"2020-11-04 22:40:48.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"84136dedef2572a0c3348bb5d8895986e98e965d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5db445a370c8b4d1084c31ceb641b05e31eb99af","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        add_route_calls \u003d [mock.call(mock.ANY, ip_prefix\u003droute[\u0027destination\u0027],"},{"line_number":619,"context_line":"                                     nexthop\u003droute[\u0027nexthop\u0027],"},{"line_number":620,"context_line":"                                     external_ids\u003droute.get(\u0027external_ids\u0027, {}))"},{"line_number":621,"context_line":"                                     for route in add_static_route_list]"},{"line_number":622,"context_line":"        ovn_api.add_static_route.assert_has_calls(add_route_calls,"},{"line_number":623,"context_line":"                                                  any_order\u003dTrue)"},{"line_number":624,"context_line":"        self.assertEqual(len(add_static_route_list),"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_3e6ee400","line":621,"updated":"2020-11-04 22:40:48.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"84136dedef2572a0c3348bb5d8895986e98e965d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5db445a370c8b4d1084c31ceb641b05e31eb99af","unresolved":false,"context_lines":[{"line_number":763,"context_line":"                                  \u0027destination\u0027: \u00270.0.0.0/0\u0027,"},{"line_number":764,"context_line":"                                  \u0027external_ids\u0027: {"},{"line_number":765,"context_line":"                                      ovn_const.OVN_ROUTER_IS_EXT_GW: \u0027true\u0027,"},{"line_number":766,"context_line":"                                      ovn_const.OVN_SUBNET_EXT_ID_KEY: \u0027ext-subnet\u0027}},"},{"line_number":767,"context_line":"                                 {\u0027nexthop\u0027: \u002740.0.0.100\u0027,"},{"line_number":768,"context_line":"                                  \u0027destination\u0027: \u002730.0.0.0/24\u0027,"},{"line_number":769,"context_line":"                                  \u0027external_ids\u0027: {}},"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_1e7168e1","line":766,"updated":"2020-11-04 22:40:48.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"84136dedef2572a0c3348bb5d8895986e98e965d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5db445a370c8b4d1084c31ceb641b05e31eb99af","unresolved":false,"context_lines":[{"line_number":771,"context_line":"                                  \u0027destination\u0027: \u00270.0.0.0/0\u0027,"},{"line_number":772,"context_line":"                                  \u0027external_ids\u0027: {"},{"line_number":773,"context_line":"                                      ovn_const.OVN_ROUTER_IS_EXT_GW: \u0027true\u0027,"},{"line_number":774,"context_line":"                                      ovn_const.OVN_SUBNET_EXT_ID_KEY: \u0027ext-subnet\u0027}}]"},{"line_number":775,"context_line":"        del_static_route_list \u003d [{\u0027nexthop\u0027: \u002720.0.0.100\u0027,"},{"line_number":776,"context_line":"                                  \u0027destination\u0027: \u002710.0.0.0/24\u0027}]"},{"line_number":777,"context_line":"        add_snat_list \u003d [{\u0027logical_ip\u0027: \u0027172.16.2.0/24\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_7e77bcd5","line":774,"updated":"2020-11-04 22:40:48.000000000","message":"pep8: E501 line too long (86 \u003e 79 characters)","commit_id":"84136dedef2572a0c3348bb5d8895986e98e965d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"38603ea93f9972d3093a92de760037a02ce8756c","unresolved":true,"context_lines":[{"line_number":914,"context_line":""},{"line_number":915,"context_line":"        ovn_nb_synchronizer \u003d ovn_db_sync.OvnNbSynchronizer("},{"line_number":916,"context_line":"            self.plugin, self.mech_driver._nb_ovn, self.mech_driver._sb_ovn,"},{"line_number":917,"context_line":"            \u0027repair\u0027, self.mech_driver)"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"        # add 2 routes to ovn"},{"line_number":920,"context_line":"        ovn_routes \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"0c097f73_a58a0865","line":917,"updated":"2021-02-12 11:16:41.000000000","message":"this can be moved to the helper method above so You will not need to pass it as argument every time","commit_id":"2c78fb01d8521312a0969a8bf38e4625d3629348"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"38603ea93f9972d3093a92de760037a02ce8756c","unresolved":true,"context_lines":[{"line_number":1103,"context_line":"                                                       db_routes,"},{"line_number":1104,"context_line":"                                                       expected_added,"},{"line_number":1105,"context_line":"                                                       expected_deleted)"},{"line_number":1106,"context_line":""},{"line_number":1107,"context_line":""},{"line_number":1108,"context_line":"class TestOvnSbSyncML2(test_mech_driver.OVNMechanismDriverTestCase):"},{"line_number":1109,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9633e235_9fefa8cb","line":1106,"updated":"2021-02-12 11:16:41.000000000","message":"please split those all cases to separate tests","commit_id":"2c78fb01d8521312a0969a8bf38e4625d3629348"}]}
