)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"27f4da9d0ce9f41d63d0fdd715efcf939e3dfd10","unresolved":false,"context_lines":[{"line_number":18,"context_line":"_add_neutron_router_interface becomes idem-potent: multiple calls to add"},{"line_number":19,"context_line":"the same interface will not fail. Because of that, the unit test"},{"line_number":20,"context_line":"test_router_add_interface_dup_port no longer makes sense and is being"},{"line_number":21,"context_line":"removed."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Closes-Bug: #1876148"},{"line_number":24,"context_line":"Change-Id: I8010113b4d8c66ecbccf3126f322a8836d92e7ba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1f493fa4_dc3580aa","line":21,"updated":"2020-05-05 10:17:01.000000000","message":"++ makes sense to remove it to me since we no longer expect a conflict error.","commit_id":"9900833d4ccbf8837d036934bacdebc7fa0782a2"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"c38aea46fea9af5e233e8078e181fd79e8bb4d4c","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def add_router_interface(self, context, router_id, interface_info):"},{"line_number":187,"context_line":"        router_interface_info \u003d self._add_neutron_router_interface("},{"line_number":188,"context_line":"            context, router_id, interface_info, may_exist\u003dTrue)"},{"line_number":189,"context_line":"        try:"},{"line_number":190,"context_line":"            self._ovn_client.create_router_port("},{"line_number":191,"context_line":"                context, router_id, router_interface_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f493fa4_4f743d9d","line":188,"range":{"start_line":188,"start_character":48,"end_line":188,"end_character":62},"updated":"2020-05-02 10:29:03.000000000","message":"oops, this is not right, as it would be changing the\nexpected default behavior of a test:\n\ntox -e py3 -- neutron.tests.unit.services.ovn_l3.test_plugin.OVNL3ExtrarouteTests.test_router_add_interface_dup_port","commit_id":"4ec8b3cec4eadd05263640a8bc34d91f16cb188c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"cf20fea318bccd6a48323d807c230b70fe54529e","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                    context, {\u0027router\u0027: original_router})"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _add_neutron_router_interface(self, context, router_id,"},{"line_number":162,"context_line":"                                      interface_info, may_exist\u003dTrue):"},{"line_number":163,"context_line":"        try:"},{"line_number":164,"context_line":"            router_interface_info \u003d ("},{"line_number":165,"context_line":"                super(OVNL3RouterPlugin, self).add_router_interface("}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_bc0874d9","line":162,"range":{"start_line":162,"start_character":54,"end_line":162,"end_character":63},"updated":"2020-05-05 10:21:30.000000000","message":"In base PS, the default value of \"may_exist\" in \"add_router_interface\" was False.\n\nBecause \"_add_neutron_router_interface\" is called only there and now we are not passing any value:\n1) Why are we keeping this parameter?\n2) Why the default value now is True?","commit_id":"9900833d4ccbf8837d036934bacdebc7fa0782a2"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"b869c9a29fddd5dda7694f4ae9d7b7a5f27afccb","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                    context, {\u0027router\u0027: original_router})"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _add_neutron_router_interface(self, context, router_id,"},{"line_number":162,"context_line":"                                      interface_info, may_exist\u003dTrue):"},{"line_number":163,"context_line":"        try:"},{"line_number":164,"context_line":"            router_interface_info \u003d ("},{"line_number":165,"context_line":"                super(OVNL3RouterPlugin, self).add_router_interface("}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_bcca3417","line":162,"range":{"start_line":162,"start_character":54,"end_line":162,"end_character":63},"in_reply_to":"1f493fa4_bc0874d9","updated":"2020-05-05 10:55:46.000000000","message":"1) Good point. Took it out.\n\n2) I would like defer this to the designer (aka Lucas) :)\n   But from the perspective of the maintenance task, the\n   implementation expects may_exist to be True and\n   this change ended up removing that knob in order to make\n   the API consistent with RouterPluginBase.","commit_id":"9900833d4ccbf8837d036934bacdebc7fa0782a2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"85b3824de6c93fdcdcc00842cb354159a0d43a51","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                    context, {\u0027router\u0027: original_router})"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _add_neutron_router_interface(self, context, router_id,"},{"line_number":162,"context_line":"                                      interface_info, may_exist\u003dTrue):"},{"line_number":163,"context_line":"        try:"},{"line_number":164,"context_line":"            router_interface_info \u003d ("},{"line_number":165,"context_line":"                super(OVNL3RouterPlugin, self).add_router_interface("}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_fcbb1c6f","line":162,"range":{"start_line":162,"start_character":54,"end_line":162,"end_character":63},"in_reply_to":"1f493fa4_bcca3417","updated":"2020-05-05 11:02:43.000000000","message":"2) Yeah, in the maintenance task we rely on those may_exists or if_exists parameters because we are looking for eventual consistency, so if the resource has been created in between the maintenance task finding the inconsistency and fixing the database we do not want it to fail.\n\nTherefore I don\u0027t think there\u0027s any harm in having this may_exist being True by default. Even from the API standpoint, if we call add_interface and it\u0027s has already been added I don\u0027t see any harm and just returning OK instead of a Conflict.","commit_id":"9900833d4ccbf8837d036934bacdebc7fa0782a2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"cf20fea318bccd6a48323d807c230b70fe54529e","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        return router_interface_info"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def add_router_interface(self, context, router_id, interface_info):"},{"line_number":187,"context_line":"        router_interface_info \u003d self._add_neutron_router_interface("},{"line_number":188,"context_line":"            context, router_id, interface_info)"},{"line_number":189,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_bc6354b1","line":186,"updated":"2020-05-05 10:21:30.000000000","message":"\"RouterPluginBase\" signature is\n\ndef add_router_interface(self, context, router_id, interface_info\u003dNone):\n\n\"interface_info\" should be a kwarg with default value equal to None","commit_id":"9900833d4ccbf8837d036934bacdebc7fa0782a2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"85b3824de6c93fdcdcc00842cb354159a0d43a51","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        return router_interface_info"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def add_router_interface(self, context, router_id, interface_info):"},{"line_number":187,"context_line":"        router_interface_info \u003d self._add_neutron_router_interface("},{"line_number":188,"context_line":"            context, router_id, interface_info)"},{"line_number":189,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_7c8eecd0","line":186,"in_reply_to":"1f493fa4_bc6354b1","updated":"2020-05-05 11:02:43.000000000","message":"++ good catch!","commit_id":"9900833d4ccbf8837d036934bacdebc7fa0782a2"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"b869c9a29fddd5dda7694f4ae9d7b7a5f27afccb","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        return router_interface_info"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def add_router_interface(self, context, router_id, interface_info):"},{"line_number":187,"context_line":"        router_interface_info \u003d self._add_neutron_router_interface("},{"line_number":188,"context_line":"            context, router_id, interface_info)"},{"line_number":189,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_9c4778bd","line":186,"in_reply_to":"1f493fa4_bc6354b1","updated":"2020-05-05 10:55:46.000000000","message":"Indeed! Fixed.","commit_id":"9900833d4ccbf8837d036934bacdebc7fa0782a2"}]}
