)]}'
{"neutron/db/l3_db.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eb02f7f55e312fa1914bd77d05a0e27656e78d4d","unresolved":false,"context_lines":[{"line_number":542,"context_line":"                                              rp.port.id,"},{"line_number":543,"context_line":"                                              l3_port_check\u003dFalse)"},{"line_number":544,"context_line":"            except exc.ObjectDeletedError:"},{"line_number":545,"context_line":"                context.session.delete(rp)"},{"line_number":546,"context_line":"                router.attached_ports.remove(rp)"},{"line_number":547,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":548,"context_line":"            registry.notify(resources.ROUTER, events.PRECOMMIT_DELETE,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_93b54bd0","line":545,"range":{"start_line":545,"start_character":16,"end_line":545,"end_character":42},"updated":"2017-05-19 11:45:12.000000000","message":"You need an open session to execute this. Also in L541 the context is updated with admin flag set. If L541 doesn\u0027t delete the port, this command neither will.","commit_id":"f4c8d00ea3bc571b9d3289df11ba22be56944621"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"d9d09ad662ea46fadacb27b1e072dcb36a63ee66","unresolved":false,"context_lines":[{"line_number":542,"context_line":"                                              rp.port.id,"},{"line_number":543,"context_line":"                                              l3_port_check\u003dFalse)"},{"line_number":544,"context_line":"            except exc.ObjectDeletedError:"},{"line_number":545,"context_line":"                context.session.delete(rp)"},{"line_number":546,"context_line":"                router.attached_ports.remove(rp)"},{"line_number":547,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":548,"context_line":"            registry.notify(resources.ROUTER, events.PRECOMMIT_DELETE,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_9b953d43","line":545,"range":{"start_line":545,"start_character":16,"end_line":545,"end_character":42},"in_reply_to":"ff0f0b1f_93b54bd0","updated":"2017-05-22 01:29:01.000000000","message":"The reason I add this line is that the gateway port of the router is deleted in Line 536, but this deletion is not reflected in Line 538, which means \"router.attached_ports\" still contains the deleted/orphan gateway port\u0027s information and I will hit ObjectDeletedError in Line 541. \nWhat makes me confused is that, in routerport db, this gateway port\u0027s record is deleted but not in router.attached_ports, even though I query router from db again.\nBut you are right, this line will not do what I want it to do either.","commit_id":"f4c8d00ea3bc571b9d3289df11ba22be56944621"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eb02f7f55e312fa1914bd77d05a0e27656e78d4d","unresolved":false,"context_lines":[{"line_number":543,"context_line":"                                              l3_port_check\u003dFalse)"},{"line_number":544,"context_line":"            except exc.ObjectDeletedError:"},{"line_number":545,"context_line":"                context.session.delete(rp)"},{"line_number":546,"context_line":"                router.attached_ports.remove(rp)"},{"line_number":547,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":548,"context_line":"            registry.notify(resources.ROUTER, events.PRECOMMIT_DELETE,"},{"line_number":549,"context_line":"                            self, context\u003dcontext, router_db\u003drouter,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_2e92949f","line":546,"range":{"start_line":546,"start_character":16,"end_line":546,"end_character":48},"updated":"2017-05-19 11:45:12.000000000","message":"Why do you need to remove the ports from the router if it\u0027s going to be deleted in L555?","commit_id":"f4c8d00ea3bc571b9d3289df11ba22be56944621"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"d9d09ad662ea46fadacb27b1e072dcb36a63ee66","unresolved":false,"context_lines":[{"line_number":543,"context_line":"                                              l3_port_check\u003dFalse)"},{"line_number":544,"context_line":"            except exc.ObjectDeletedError:"},{"line_number":545,"context_line":"                context.session.delete(rp)"},{"line_number":546,"context_line":"                router.attached_ports.remove(rp)"},{"line_number":547,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":548,"context_line":"            registry.notify(resources.ROUTER, events.PRECOMMIT_DELETE,"},{"line_number":549,"context_line":"                            self, context\u003dcontext, router_db\u003drouter,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_1b900d43","line":546,"range":{"start_line":546,"start_character":16,"end_line":546,"end_character":48},"in_reply_to":"ff0f0b1f_2e92949f","updated":"2017-05-22 01:29:01.000000000","message":"If I do not remove this routerport record, when Line 555 tries to delete the router, an Error saying \"Dependency rule tried to blank-out primary key column \u0027routerports.router_id\u0027 on instance \u0027\u003cRouterPort at 0x7f406dfe5990\u003e\u0027\" will return. This is because we still have orphan router.attached_ports not deleted.","commit_id":"f4c8d00ea3bc571b9d3289df11ba22be56944621"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"8126e038856e718e2d8bd58d71a638226f874594","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self._delete_router_gw_port_db(context, router)"},{"line_number":419,"context_line":"        self._core_plugin.delete_port("},{"line_number":420,"context_line":"            admin_ctx, gw_port_id, l3_port_check\u003dFalse)"},{"line_number":421,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":422,"context_line":"            context.session.refresh(router)"},{"line_number":423,"context_line":"        registry.notify(resources.ROUTER_GATEWAY,"},{"line_number":424,"context_line":"                        events.AFTER_DELETE, self,"},{"line_number":425,"context_line":"                        router_id\u003drouter_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f1a1f67_571f1a07","line":422,"range":{"start_line":421,"start_character":0,"end_line":422,"end_character":43},"updated":"2017-07-19 02:45:57.000000000","message":"will try to find more suitable places for all the refresh.","commit_id":"e1011e5b8d670ab77bfdd66d400e654c151707cd"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"dbf3fddef0071ebdf0010ca1e1cb35a525695430","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self._delete_router_gw_port_db(context, router)"},{"line_number":419,"context_line":"        self._core_plugin.delete_port("},{"line_number":420,"context_line":"            admin_ctx, gw_port_id, l3_port_check\u003dFalse)"},{"line_number":421,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":422,"context_line":"            context.session.refresh(router)"},{"line_number":423,"context_line":"        registry.notify(resources.ROUTER_GATEWAY,"},{"line_number":424,"context_line":"                        events.AFTER_DELETE, self,"},{"line_number":425,"context_line":"                        router_id\u003drouter_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff346bd7_9b8d49d5","line":422,"range":{"start_line":421,"start_character":0,"end_line":422,"end_character":43},"updated":"2017-07-25 11:26:23.000000000","message":"I think now all the remaining .refresh()s are necessary to get us updated router.attached_ports, otherwise they are not up-to-date.","commit_id":"d9f1a3404cb6f192bc9089ec54d33e2297ec8e18"}],"neutron/db/models/l3.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8bc8260537299c8edb06dfaeb29716e2822fa4b0","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    attached_ports \u003d orm.relationship("},{"line_number":59,"context_line":"        RouterPort,"},{"line_number":60,"context_line":"        backref\u003dorm.backref(\u0027router\u0027, load_on_pending\u003dTrue),"},{"line_number":61,"context_line":"        lazy\u003d\u0027joined\u0027)"},{"line_number":62,"context_line":"    l3_agents \u003d orm.relationship("},{"line_number":63,"context_line":"        \u0027Agent\u0027, lazy\u003d\u0027subquery\u0027, viewonly\u003dTrue,"},{"line_number":64,"context_line":"        secondary\u003drb_model.RouterL3AgentBinding.__table__)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_3f44ddb6","line":61,"updated":"2017-06-01 12:29:16.000000000","message":"please use subquery since the router object has multiple 1-M relationships","commit_id":"970200650c38d12c3a8626f3cd9b59b0fbeda60f"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"2ff71bfb9cc26645c654c002a9952bbad8e5d03d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    attached_ports \u003d orm.relationship("},{"line_number":59,"context_line":"        RouterPort,"},{"line_number":60,"context_line":"        backref\u003dorm.backref(\u0027router\u0027, load_on_pending\u003dTrue),"},{"line_number":61,"context_line":"        lazy\u003d\u0027joined\u0027)"},{"line_number":62,"context_line":"    l3_agents \u003d orm.relationship("},{"line_number":63,"context_line":"        \u0027Agent\u0027, lazy\u003d\u0027subquery\u0027, viewonly\u003dTrue,"},{"line_number":64,"context_line":"        secondary\u003drb_model.RouterL3AgentBinding.__table__)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_da435c41","line":61,"in_reply_to":"df140735_3f44ddb6","updated":"2017-06-05 06:19:49.000000000","message":"Done. Thanks","commit_id":"970200650c38d12c3a8626f3cd9b59b0fbeda60f"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b2ed9d24ae02ed4c9d31fffb1e4485c3760f10bb","unresolved":false,"context_lines":[{"line_number":1346,"context_line":"            mech_context,"},{"line_number":1347,"context_line":"            allow_notify\u003dTrue,"},{"line_number":1348,"context_line":"            need_notify\u003dneed_port_update_notify)"},{"line_number":1349,"context_line":"        port_db \u003d self._get_port(context, id)"},{"line_number":1350,"context_line":"        context.session.refresh(port_db)"},{"line_number":1351,"context_line":"        return bound_context.current"},{"line_number":1352,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_62e0aafb","line":1349,"updated":"2017-06-30 19:57:39.000000000","message":"what fails if you don\u0027t have this change?","commit_id":"27f8dd6cc06e8e2705232f014150751310e2d7d8"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"118e5b693aaf049e2e4e0925c9b2c8b87ce44a4a","unresolved":false,"context_lines":[{"line_number":1346,"context_line":"            mech_context,"},{"line_number":1347,"context_line":"            allow_notify\u003dTrue,"},{"line_number":1348,"context_line":"            need_notify\u003dneed_port_update_notify)"},{"line_number":1349,"context_line":"        port_db \u003d self._get_port(context, id)"},{"line_number":1350,"context_line":"        context.session.refresh(port_db)"},{"line_number":1351,"context_line":"        return bound_context.current"},{"line_number":1352,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_7514cd4e","line":1349,"in_reply_to":"3f1d235d_62e0aafb","updated":"2017-07-03 06:55:34.000000000","message":"neutron.tests.functional.services.l3_router.test_l3_dvr_ha_router_plugin.L3DvrHATestCase.test_router_with_ipv4_and_multiple_ipv6_on_same_network, Line 469 and Line 481\n\nIt does not fail everytime, only with around 1 failure out of 5 runs. According to my observation, it fails due to port.fixed_ips are not updated after interface addition and deletion.","commit_id":"27f8dd6cc06e8e2705232f014150751310e2d7d8"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ac825f3b467b4dbe621604ba4db6fe100e5fa2c3","unresolved":false,"context_lines":[{"line_number":1346,"context_line":"            mech_context,"},{"line_number":1347,"context_line":"            allow_notify\u003dTrue,"},{"line_number":1348,"context_line":"            need_notify\u003dneed_port_update_notify)"},{"line_number":1349,"context_line":"        port_db \u003d self._get_port(context, id)"},{"line_number":1350,"context_line":"        context.session.refresh(port_db)"},{"line_number":1351,"context_line":"        return bound_context.current"},{"line_number":1352,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f1d235d_9554fa22","line":1349,"in_reply_to":"3f1d235d_7514cd4e","updated":"2017-07-11 19:37:27.000000000","message":"Hm, wouldn\u0027t it make more sense to refresh wherever the actual modification happens, before passing the port db model further the stack?","commit_id":"27f8dd6cc06e8e2705232f014150751310e2d7d8"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"3a6695c3f94591a49081cd7b36386344b46bb617","unresolved":false,"context_lines":[{"line_number":1346,"context_line":"            mech_context,"},{"line_number":1347,"context_line":"            allow_notify\u003dTrue,"},{"line_number":1348,"context_line":"            need_notify\u003dneed_port_update_notify)"},{"line_number":1349,"context_line":"        port_db \u003d self._get_port(context, id)"},{"line_number":1350,"context_line":"        context.session.refresh(port_db)"},{"line_number":1351,"context_line":"        return bound_context.current"},{"line_number":1352,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_368236ca","line":1349,"in_reply_to":"3f1d235d_9554fa22","updated":"2017-07-12 10:04:01.000000000","message":"I looked into this more carefully. It turns out to be the problem of router.attached_ports.port.fixed_ip is not updated. So instead of updating port in ML2, now I am refreshing router after changes are made to it.","commit_id":"27f8dd6cc06e8e2705232f014150751310e2d7d8"}],"neutron/tests/unit/db/test_l3_dvr_db.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"91abbd7c0255a5b993a8dee4ec3745cb7e097e66","unresolved":false,"context_lines":[{"line_number":351,"context_line":"            \u0027network_id\u0027: \u0027ext_net_id\u0027,"},{"line_number":352,"context_line":"            \u0027device_owner\u0027: const.DEVICE_OWNER_ROUTER_GW"},{"line_number":353,"context_line":"        }]"},{"line_number":354,"context_line":"        rtr, plugin, ext_net_id, d_csnat_port, d_agent_gw_port, del_fip \u003d ("},{"line_number":355,"context_line":"            self._setup_delete_current_gw_port_deletes_dvr_internal_ports("},{"line_number":356,"context_line":"                port\u003dport))"},{"line_number":357,"context_line":"        self.assertFalse(d_csnat_port.called)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_37a680c3","line":354,"range":{"start_line":354,"start_character":21,"end_line":354,"end_character":31},"updated":"2017-06-12 17:06:04.000000000","message":"no check on ext_net_id ?","commit_id":"bb461abcec3004a7845eb653d180b42f38edd235"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"ca089c4a80bd647f056c18f7ca24dd62e69793ff","unresolved":false,"context_lines":[{"line_number":351,"context_line":"            \u0027network_id\u0027: \u0027ext_net_id\u0027,"},{"line_number":352,"context_line":"            \u0027device_owner\u0027: const.DEVICE_OWNER_ROUTER_GW"},{"line_number":353,"context_line":"        }]"},{"line_number":354,"context_line":"        rtr, plugin, ext_net_id, d_csnat_port, d_agent_gw_port, del_fip \u003d ("},{"line_number":355,"context_line":"            self._setup_delete_current_gw_port_deletes_dvr_internal_ports("},{"line_number":356,"context_line":"                port\u003dport))"},{"line_number":357,"context_line":"        self.assertFalse(d_csnat_port.called)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_7b72424b","line":354,"range":{"start_line":354,"start_character":21,"end_line":354,"end_character":31},"in_reply_to":"7f231b9d_37a680c3","updated":"2017-06-15 04:49:22.000000000","message":"ext_net_id will only be used if d_agent_gw_port and del_fip are called. In this test case, neither of these two are called, I will only be able to check that it is not None.","commit_id":"bb461abcec3004a7845eb653d180b42f38edd235"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"91abbd7c0255a5b993a8dee4ec3745cb7e097e66","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        self.assertFalse(del_fip.called)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def test_delete_current_gw_port_never_calls_delete_fipnamespace(self):"},{"line_number":362,"context_line":"        rtr, plugin, ext_net_id, d_csnat_port, d_agent_gw_port, del_fip \u003d ("},{"line_number":363,"context_line":"            self._setup_delete_current_gw_port_deletes_dvr_internal_ports("},{"line_number":364,"context_line":"                gw_port\u003dFalse))"},{"line_number":365,"context_line":"        self.assertFalse(d_csnat_port.called)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_17a5c404","line":362,"range":{"start_line":362,"start_character":21,"end_line":362,"end_character":32},"updated":"2017-06-12 17:06:04.000000000","message":"no check on ext_net_id ?","commit_id":"bb461abcec3004a7845eb653d180b42f38edd235"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"ca089c4a80bd647f056c18f7ca24dd62e69793ff","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        self.assertFalse(del_fip.called)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def test_delete_current_gw_port_never_calls_delete_fipnamespace(self):"},{"line_number":362,"context_line":"        rtr, plugin, ext_net_id, d_csnat_port, d_agent_gw_port, del_fip \u003d ("},{"line_number":363,"context_line":"            self._setup_delete_current_gw_port_deletes_dvr_internal_ports("},{"line_number":364,"context_line":"                gw_port\u003dFalse))"},{"line_number":365,"context_line":"        self.assertFalse(d_csnat_port.called)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_bba1fa96","line":362,"range":{"start_line":362,"start_character":21,"end_line":362,"end_character":32},"in_reply_to":"7f231b9d_17a5c404","updated":"2017-06-15 04:49:22.000000000","message":"I will add check that it is None.","commit_id":"bb461abcec3004a7845eb653d180b42f38edd235"}]}
