)]}'
{"neutron/db/l3_db.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"733640037d23ec96a8e9347358220c3475383e74","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        router \u003d router or self._get_router(context, router_id)"},{"line_number":182,"context_line":"        gw_port \u003d router.gw_port"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        #TODO(nati) Refactor here when we have router insertion model"},{"line_number":185,"context_line":"        if not info:"},{"line_number":186,"context_line":"            vpnservice \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":187,"context_line":"                constants.VPN)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9v%2FY%3D","line":184,"updated":"2013-12-06 12:15:09.000000000","message":"How does this code relate to the bug fix?\n\nAre you trying to detect the removal of a GW interface, when used by VPN?\n\nConcerned about putting VPN specific code in L3 code...","commit_id":"3c50f0013f6abb7594343adab68e248cef46f2c4"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"94b64e1d497002ccf45753384a0e1b869cc4e86d","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        router \u003d router or self._get_router(context, router_id)"},{"line_number":182,"context_line":"        gw_port \u003d router.gw_port"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        #TODO(nati) Refactor here when we have router insertion model"},{"line_number":185,"context_line":"        if not info:"},{"line_number":186,"context_line":"            vpnservice \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":187,"context_line":"                constants.VPN)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9v9c%3D","line":184,"in_reply_to":"AAAATn%2F9v%2FY%3D","updated":"2013-12-06 12:26:22.000000000","message":"Agree. This should be done in smarter way, if needs to be done at all","commit_id":"3c50f0013f6abb7594343adab68e248cef46f2c4"},{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"8f480bbf3a450a4c7ac033b0a7087b533ea6b9bd","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        router \u003d router or self._get_router(context, router_id)"},{"line_number":182,"context_line":"        gw_port \u003d router.gw_port"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        #TODO(nati) Refactor here when we have router insertion model"},{"line_number":185,"context_line":"        if not info:"},{"line_number":186,"context_line":"            vpnservice \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":187,"context_line":"                constants.VPN)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9lIw%3D","line":184,"in_reply_to":"AAAATn%2F9v9c%3D","updated":"2013-12-10 00:58:21.000000000","message":"Have sent a email to Nachi for a suggestion.","commit_id":"3c50f0013f6abb7594343adab68e248cef46f2c4"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"3f1abb6deb3647939cbf31aa0132115dd6de604e","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        router \u003d router or self._get_router(context, router_id)"},{"line_number":182,"context_line":"        gw_port \u003d router.gw_port"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        #TODO(nati) Refactor here when we have router insertion model"},{"line_number":185,"context_line":"        if not info:"},{"line_number":186,"context_line":"            vpnservice \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":187,"context_line":"                constants.VPN)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9hqk%3D","line":184,"updated":"2013-12-10 15:36:22.000000000","message":"Not sure how to handle this better, but not really comfortable with up putting VPN specific code into l3_db.py...","commit_id":"40cd4d36b597ec7de0633f9c1265ef54c99f24cc"},{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"4e9872733895f224c17cb6d97e5781d0cbf0f473","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        router \u003d router or self._get_router(context, router_id)"},{"line_number":182,"context_line":"        gw_port \u003d router.gw_port"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        #TODO(nati) Refactor here when we have router insertion model"},{"line_number":185,"context_line":"        if not info:"},{"line_number":186,"context_line":"            vpnservice \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":187,"context_line":"                constants.VPN)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9fDI%3D","line":184,"in_reply_to":"AAAATn%2F9hqk%3D","updated":"2013-12-11 03:08:07.000000000","message":"I think it is also the problem when we try to remove the subnet interface which is used by vpnservice. I have raised an question on https://answers.launchpad.net/neutron/+question/240602 for help.","commit_id":"40cd4d36b597ec7de0633f9c1265ef54c99f24cc"}],"neutron/db/vpn/vpn_db.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"733640037d23ec96a8e9347358220c3475383e74","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        l3_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":543,"context_line":"            constants.L3_ROUTER_NAT)"},{"line_number":544,"context_line":"        router \u003d l3_plugin.get_router(context, router_id)"},{"line_number":545,"context_line":"        if router[l3_db.EXTERNAL_GW_INFO] is None:"},{"line_number":546,"context_line":"            raise vpnaas.RouterExternalGatewayNotConfigured("},{"line_number":547,"context_line":"                router_id\u003drouter[\u0027id\u0027])"},{"line_number":548,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9wB4%3D","line":545,"updated":"2013-12-06 12:15:09.000000000","message":"Should have a test case that exercises this path.","commit_id":"3c50f0013f6abb7594343adab68e248cef46f2c4"},{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"8f480bbf3a450a4c7ac033b0a7087b533ea6b9bd","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        l3_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":543,"context_line":"            constants.L3_ROUTER_NAT)"},{"line_number":544,"context_line":"        router \u003d l3_plugin.get_router(context, router_id)"},{"line_number":545,"context_line":"        if router[l3_db.EXTERNAL_GW_INFO] is None:"},{"line_number":546,"context_line":"            raise vpnaas.RouterExternalGatewayNotConfigured("},{"line_number":547,"context_line":"                router_id\u003drouter[\u0027id\u0027])"},{"line_number":548,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9lRY%3D","line":545,"in_reply_to":"AAAATn%2F9wB4%3D","updated":"2013-12-10 00:58:21.000000000","message":"Done","commit_id":"3c50f0013f6abb7594343adab68e248cef46f2c4"},{"author":{"_account_id":2711,"name":"Zhang Hua","display_name":"Zhang Hua","email":"joshua.zhang@canonical.com","username":"zhhuabj"},"change_message_id":"1da86869b2f4fe266f33248a8f9de88c808fdda7","unresolved":false,"context_lines":[{"line_number":544,"context_line":"        router \u003d l3_plugin.get_router(context, router_id)"},{"line_number":545,"context_line":"        if router[l3_db.EXTERNAL_GW_INFO] is None:"},{"line_number":546,"context_line":"            raise vpnaas.RouterExternalGatewayNotConfigured("},{"line_number":547,"context_line":"                router_id\u003drouter[\u0027id\u0027])"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    def _check_subnet_id(self, context, router_id, subnet_id):"},{"line_number":550,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9EBY%3D","line":547,"updated":"2013-12-17 07:04:44.000000000","message":"there is a parameter called router_id","commit_id":"62f4ac3702080bb5df16922614f318e29d4a860b"}],"neutron/extensions/vpnaas.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"cb9355344109b7be538fe9609bbbe46ab34b888f","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class RouterExternalGatewayNotConfigured(qexception.BadRequest):"},{"line_number":77,"context_line":"    message \u003d _(\"Gateway has not be configured for the router %(router_id)s\")"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class IPsecPolicyInUse(qexception.InUse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9j0s%3D","line":77,"updated":"2013-12-10 08:54:00.000000000","message":"nit: has not been","commit_id":"e9b7bb6a815bdde86d55a692f06730f1998707f0"},{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"d66bfcd2cded12eee7b1d7de023f9ce50e10bdc0","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class RouterExternalGatewayNotConfigured(qexception.BadRequest):"},{"line_number":77,"context_line":"    message \u003d _(\"Gateway has not be configured for the router %(router_id)s\")"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class IPsecPolicyInUse(qexception.InUse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9jpA%3D","line":77,"in_reply_to":"AAAATn%2F9j0s%3D","updated":"2013-12-10 09:32:43.000000000","message":"Done","commit_id":"e9b7bb6a815bdde86d55a692f06730f1998707f0"}],"neutron/tests/unit/db/vpn/test_db_vpnaas.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"733640037d23ec96a8e9347358220c3475383e74","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from neutron.db import l3_agentschedulers_db"},{"line_number":31,"context_line":"from neutron.db.vpn import vpn_db"},{"line_number":32,"context_line":"from neutron import extensions"},{"line_number":33,"context_line":"from neutron.extensions import multiprovidernet as mpnet"},{"line_number":34,"context_line":"from neutron.extensions import vpnaas"},{"line_number":35,"context_line":"from neutron import manager"},{"line_number":36,"context_line":"from neutron.plugins.common import constants"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9wCE%3D","line":33,"updated":"2013-12-06 12:15:09.000000000","message":"not used?","commit_id":"3c50f0013f6abb7594343adab68e248cef46f2c4"},{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"8f480bbf3a450a4c7ac033b0a7087b533ea6b9bd","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from neutron.db import l3_agentschedulers_db"},{"line_number":31,"context_line":"from neutron.db.vpn import vpn_db"},{"line_number":32,"context_line":"from neutron import extensions"},{"line_number":33,"context_line":"from neutron.extensions import multiprovidernet as mpnet"},{"line_number":34,"context_line":"from neutron.extensions import vpnaas"},{"line_number":35,"context_line":"from neutron import manager"},{"line_number":36,"context_line":"from neutron.plugins.common import constants"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9lNI%3D","line":33,"in_reply_to":"AAAATn%2F9wCE%3D","updated":"2013-12-10 00:58:21.000000000","message":"Done","commit_id":"3c50f0013f6abb7594343adab68e248cef46f2c4"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"cb9355344109b7be538fe9609bbbe46ab34b888f","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    \u0027..\u0027, \u0027..\u0027, \u0027..\u0027, \u0027..\u0027))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"extensions_path \u003d \u0027:\u0027.join(extensions.__path__)"},{"line_number":49,"context_line":"_uuid \u003d uuidutils.generate_uuid"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class TestVpnCorePlugin(test_l3_plugin.TestL3NatIntPlugin,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9j0Y%3D","line":49,"updated":"2013-12-10 08:54:00.000000000","message":"uuidutils.generate_uuid is deprecated, please see https://review.openstack.org/#/c/58234/","commit_id":"e9b7bb6a815bdde86d55a692f06730f1998707f0"},{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"d66bfcd2cded12eee7b1d7de023f9ce50e10bdc0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    \u0027..\u0027, \u0027..\u0027, \u0027..\u0027, \u0027..\u0027))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"extensions_path \u003d \u0027:\u0027.join(extensions.__path__)"},{"line_number":49,"context_line":"_uuid \u003d uuidutils.generate_uuid"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class TestVpnCorePlugin(test_l3_plugin.TestL3NatIntPlugin,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9jq0%3D","line":49,"in_reply_to":"AAAATn%2F9j0Y%3D","updated":"2013-12-10 09:32:43.000000000","message":"Done","commit_id":"e9b7bb6a815bdde86d55a692f06730f1998707f0"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"97c574e6a5cb6dd9386ab306fe563631b6235550","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @contextlib.contextmanager"},{"line_number":89,"context_line":"    def router(self, name\u003d\u0027router1\u0027, admin_state_up\u003dTrue,"},{"line_number":90,"context_line":"               fmt\u003dNone, tenant_id\u003d_uuid(),"},{"line_number":91,"context_line":"               external_gateway\u003dTrue, set_context\u003dFalse,"},{"line_number":92,"context_line":"               **kwargs):"},{"line_number":93,"context_line":"            with self.subnet(cidr\u003d\u0027100.0.0.0/24\u0027) as s:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9lBo%3D","line":90,"updated":"2013-12-10 01:30:17.000000000","message":"Why we should have this in this class?\nMay be, we can extend method in test_l3_plugin.L3NatTestCaseMixin","commit_id":"e9b7bb6a815bdde86d55a692f06730f1998707f0"},{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"ad5291e7a83b466985efa65ebc7c88aa84ab3dc0","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @contextlib.contextmanager"},{"line_number":89,"context_line":"    def router(self, name\u003d\u0027router1\u0027, admin_state_up\u003dTrue,"},{"line_number":90,"context_line":"               fmt\u003dNone, tenant_id\u003d_uuid(),"},{"line_number":91,"context_line":"               external_gateway\u003dTrue, set_context\u003dFalse,"},{"line_number":92,"context_line":"               **kwargs):"},{"line_number":93,"context_line":"            with self.subnet(cidr\u003d\u0027100.0.0.0/24\u0027) as s:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9fRg%3D","line":90,"in_reply_to":"AAAATn%2F9gyI%3D","updated":"2013-12-11 03:08:20.000000000","message":"Got it and Done.","commit_id":"e9b7bb6a815bdde86d55a692f06730f1998707f0"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"2f82a767f48b6960ea735a3ec1b6e214931cae5a","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @contextlib.contextmanager"},{"line_number":89,"context_line":"    def router(self, name\u003d\u0027router1\u0027, admin_state_up\u003dTrue,"},{"line_number":90,"context_line":"               fmt\u003dNone, tenant_id\u003d_uuid(),"},{"line_number":91,"context_line":"               external_gateway\u003dTrue, set_context\u003dFalse,"},{"line_number":92,"context_line":"               **kwargs):"},{"line_number":93,"context_line":"            with self.subnet(cidr\u003d\u0027100.0.0.0/24\u0027) as s:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9gyI%3D","line":90,"in_reply_to":"AAAATn%2F9lBA%3D","updated":"2013-12-10 18:46:35.000000000","message":"IMO, we should extend the method in test_l3_plugin.L3NatTestCaseMixin.","commit_id":"e9b7bb6a815bdde86d55a692f06730f1998707f0"},{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"e2cc41752feea1bd18cb7e2ad3eed35c0a03443b","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @contextlib.contextmanager"},{"line_number":89,"context_line":"    def router(self, name\u003d\u0027router1\u0027, admin_state_up\u003dTrue,"},{"line_number":90,"context_line":"               fmt\u003dNone, tenant_id\u003d_uuid(),"},{"line_number":91,"context_line":"               external_gateway\u003dTrue, set_context\u003dFalse,"},{"line_number":92,"context_line":"               **kwargs):"},{"line_number":93,"context_line":"            with self.subnet(cidr\u003d\u0027100.0.0.0/24\u0027) as s:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9lBA%3D","line":90,"in_reply_to":"AAAATn%2F9lBo%3D","updated":"2013-12-10 01:55:09.000000000","message":"I add this router creation overloading func here is because that by default, VPNaaS would create a router with external gateway configured to be used by vpnservice.  It is just convenient as i would not modify all self.router() calls in this file. If you think it is inappropriate here, i would extend a method in test_l3_plugin.L3NatTestCaseMixin.","commit_id":"e9b7bb6a815bdde86d55a692f06730f1998707f0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"37d776878a6670fa992da52f08efc6ecfd9c90b4","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.ext_api \u003d ExtensionMiddleware(app, ext_mgr\u003dext_mgr)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @contextlib.contextmanager"},{"line_number":88,"context_line":"    def router(self, name\u003d\u0027router1\u0027, admin_state_up\u003dTrue,"},{"line_number":89,"context_line":"               fmt\u003dNone, tenant_id\u003dstr(uuid.uuid4()),"},{"line_number":90,"context_line":"               external_gateway\u003dTrue, set_context\u003dFalse,"},{"line_number":91,"context_line":"               **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9doo%3D","line":88,"updated":"2013-12-11 09:02:36.000000000","message":"I thought you\u0027ve agreed to move(or extend) the method in test_l3_plugin.L3NatTestCaseMixin. Am I missing smth?","commit_id":"40cd4d36b597ec7de0633f9c1265ef54c99f24cc"},{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"002ea8df18c672f648c9c7a345b57bbc3138c6ae","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.ext_api \u003d ExtensionMiddleware(app, ext_mgr\u003dext_mgr)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @contextlib.contextmanager"},{"line_number":88,"context_line":"    def router(self, name\u003d\u0027router1\u0027, admin_state_up\u003dTrue,"},{"line_number":89,"context_line":"               fmt\u003dNone, tenant_id\u003dstr(uuid.uuid4()),"},{"line_number":90,"context_line":"               external_gateway\u003dTrue, set_context\u003dFalse,"},{"line_number":91,"context_line":"               **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9dhw%3D","line":88,"in_reply_to":"AAAATn%2F9doo%3D","updated":"2013-12-11 09:22:47.000000000","message":"Yes. But I have not uploaded the latest change since i still have no idea where is appropriate to add the router gateway check referring to https://answers.launchpad.net/neutron/+question/240602. Both Paul and Enikanorov think it is not comfortable to pull router in use check into l3_db.py.","commit_id":"40cd4d36b597ec7de0633f9c1265ef54c99f24cc"}]}
