)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5389df84619703e7981d1653c9294406c0021f89","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"RouterPort OVO integration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch integrates the RouterPort OVO"},{"line_number":10,"context_line":"in the rest of the neutron code base."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I833fb9ed3524249f601b73dd282a0176d352da5a"},{"line_number":13,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7a25e98e_a081e64f","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":37},"updated":"2017-03-13 20:22:25.000000000","message":"not really in rest of neutron code, I see some bits are left so i believe the reason should be mentioned here.","commit_id":"99fcde0c099dbf3b502b5081d9da40f471753b6f"}],"neutron/db/l3_db.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bd5983d47f7ec8cb6433f86d65c036ea90f7420a","unresolved":false,"context_lines":[{"line_number":911,"context_line":""},{"line_number":912,"context_line":"    def _remove_interface_by_port(self, context, router_id,"},{"line_number":913,"context_line":"                                  port_id, subnet_id, owner):"},{"line_number":914,"context_line":"        qry \u003d l3_obj.RouterPort.get_object("},{"line_number":915,"context_line":"            context,"},{"line_number":916,"context_line":"            port_id\u003dport_id,"},{"line_number":917,"context_line":"            router_id\u003drouter_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_e857ae57","line":914,"range":{"start_line":914,"start_character":8,"end_line":914,"end_character":11},"updated":"2017-02-07 21:41:31.000000000","message":"nit: s/qry/obj","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"707f7704d5d3801b8449ab88b0f14dcadd78dc2d","unresolved":false,"context_lines":[{"line_number":911,"context_line":""},{"line_number":912,"context_line":"    def _remove_interface_by_port(self, context, router_id,"},{"line_number":913,"context_line":"                                  port_id, subnet_id, owner):"},{"line_number":914,"context_line":"        qry \u003d l3_obj.RouterPort.get_object("},{"line_number":915,"context_line":"            context,"},{"line_number":916,"context_line":"            port_id\u003dport_id,"},{"line_number":917,"context_line":"            router_id\u003drouter_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_d448a0ce","line":914,"range":{"start_line":914,"start_character":8,"end_line":914,"end_character":11},"in_reply_to":"1a430d35_e857ae57","updated":"2017-02-08 17:24:23.000000000","message":"Done","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bd5983d47f7ec8cb6433f86d65c036ea90f7420a","unresolved":false,"context_lines":[{"line_number":926,"context_line":"        else:"},{"line_number":927,"context_line":"            raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":928,"context_line":"                                             port_id\u003dport_id)"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"        port_subnet_ids \u003d [fixed_ip[\u0027subnet_id\u0027]"},{"line_number":931,"context_line":"                           for fixed_ip in port[\u0027fixed_ips\u0027]]"},{"line_number":932,"context_line":"        if subnet_id and subnet_id not in port_subnet_ids:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_2856165c","line":929,"updated":"2017-02-07 21:41:31.000000000","message":"meh","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"707f7704d5d3801b8449ab88b0f14dcadd78dc2d","unresolved":false,"context_lines":[{"line_number":926,"context_line":"        else:"},{"line_number":927,"context_line":"            raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":928,"context_line":"                                             port_id\u003dport_id)"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"        port_subnet_ids \u003d [fixed_ip[\u0027subnet_id\u0027]"},{"line_number":931,"context_line":"                           for fixed_ip in port[\u0027fixed_ips\u0027]]"},{"line_number":932,"context_line":"        if subnet_id and subnet_id not in port_subnet_ids:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_34664451","line":929,"in_reply_to":"1a430d35_2856165c","updated":"2017-02-08 17:24:23.000000000","message":"yeah I know its not the best way to do it. Will change it :)","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"87e360da412baf9400454b10083013fca968e5dd","unresolved":false,"context_lines":[{"line_number":926,"context_line":"        else:"},{"line_number":927,"context_line":"            raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":928,"context_line":"                                             port_id\u003dport_id)"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"        port_subnet_ids \u003d [fixed_ip[\u0027subnet_id\u0027]"},{"line_number":931,"context_line":"                           for fixed_ip in port[\u0027fixed_ips\u0027]]"},{"line_number":932,"context_line":"        if subnet_id and subnet_id not in port_subnet_ids:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_26bb2fc6","line":929,"updated":"2017-02-10 16:20:56.000000000","message":"nit: extra line","commit_id":"ccfebb557daac0a64b323d72628f4a8e5b2778a8"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"0cff361cb1787a8003ff6436be5fc0d70d919a54","unresolved":false,"context_lines":[{"line_number":926,"context_line":"        else:"},{"line_number":927,"context_line":"            raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":928,"context_line":"                                             port_id\u003dport_id)"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"        port_subnet_ids \u003d [fixed_ip[\u0027subnet_id\u0027]"},{"line_number":931,"context_line":"                           for fixed_ip in port[\u0027fixed_ips\u0027]]"},{"line_number":932,"context_line":"        if subnet_id and subnet_id not in port_subnet_ids:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_5339d540","line":929,"in_reply_to":"fa31d9ce_26bb2fc6","updated":"2017-02-16 19:03:42.000000000","message":"Done","commit_id":"ccfebb557daac0a64b323d72628f4a8e5b2778a8"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"10419cd1d32ef27523d2f5f55ba7ab13e4b68190","unresolved":false,"context_lines":[{"line_number":847,"context_line":"                self._notify_attaching_interface(context, router_db\u003drouter,"},{"line_number":848,"context_line":"                                                 port\u003dport,"},{"line_number":849,"context_line":"                                                 interface_info\u003dinterface_info)"},{"line_number":850,"context_line":"                with context.session.begin(subtransactions\u003dTrue):"},{"line_number":851,"context_line":"                    router_port \u003d l3_obj.RouterPort("},{"line_number":852,"context_line":"                        context,"},{"line_number":853,"context_line":"                        port_id\u003dport[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba2be162_835d1f49","line":850,"range":{"start_line":850,"start_character":12,"end_line":850,"end_character":65},"updated":"2017-03-03 19:08:29.000000000","message":"not needed","commit_id":"03111368f01be51f5430f0ce3f4591800ceddeeb"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"1e32531085594419576b4798e9ea227ce63b35a2","unresolved":false,"context_lines":[{"line_number":847,"context_line":"                self._notify_attaching_interface(context, router_db\u003drouter,"},{"line_number":848,"context_line":"                                                 port\u003dport,"},{"line_number":849,"context_line":"                                                 interface_info\u003dinterface_info)"},{"line_number":850,"context_line":"                with context.session.begin(subtransactions\u003dTrue):"},{"line_number":851,"context_line":"                    router_port \u003d l3_obj.RouterPort("},{"line_number":852,"context_line":"                        context,"},{"line_number":853,"context_line":"                        port_id\u003dport[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a25e98e_0ff82d7c","line":850,"range":{"start_line":850,"start_character":12,"end_line":850,"end_character":65},"in_reply_to":"ba2be162_835d1f49","updated":"2017-03-13 19:21:23.000000000","message":"Done","commit_id":"03111368f01be51f5430f0ce3f4591800ceddeeb"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"10419cd1d32ef27523d2f5f55ba7ab13e4b68190","unresolved":false,"context_lines":[{"line_number":848,"context_line":"                                                 port\u003dport,"},{"line_number":849,"context_line":"                                                 interface_info\u003dinterface_info)"},{"line_number":850,"context_line":"                with context.session.begin(subtransactions\u003dTrue):"},{"line_number":851,"context_line":"                    router_port \u003d l3_obj.RouterPort("},{"line_number":852,"context_line":"                        context,"},{"line_number":853,"context_line":"                        port_id\u003dport[\u0027id\u0027],"},{"line_number":854,"context_line":"                        router_id\u003drouter.id,"},{"line_number":855,"context_line":"                        port_type\u003ddevice_owner"},{"line_number":856,"context_line":"                    )"},{"line_number":857,"context_line":"                    router_port.create()"},{"line_number":858,"context_line":"                # Update owner after actual process again in order to"},{"line_number":859,"context_line":"                # make sure the records in routerports table and ports"},{"line_number":860,"context_line":"                # table are consistent."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba2be162_a6495162","line":857,"range":{"start_line":851,"start_character":0,"end_line":857,"end_character":40},"updated":"2017-03-03 19:08:29.000000000","message":"how about?\nl3_obj.RouterPort(context, port_id\u003dport[\u0027id\u0027], \n    router_id\u003drouter.id, port_type\u003ddevice_owner).create()","commit_id":"03111368f01be51f5430f0ce3f4591800ceddeeb"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"1e32531085594419576b4798e9ea227ce63b35a2","unresolved":false,"context_lines":[{"line_number":848,"context_line":"                                                 port\u003dport,"},{"line_number":849,"context_line":"                                                 interface_info\u003dinterface_info)"},{"line_number":850,"context_line":"                with context.session.begin(subtransactions\u003dTrue):"},{"line_number":851,"context_line":"                    router_port \u003d l3_obj.RouterPort("},{"line_number":852,"context_line":"                        context,"},{"line_number":853,"context_line":"                        port_id\u003dport[\u0027id\u0027],"},{"line_number":854,"context_line":"                        router_id\u003drouter.id,"},{"line_number":855,"context_line":"                        port_type\u003ddevice_owner"},{"line_number":856,"context_line":"                    )"},{"line_number":857,"context_line":"                    router_port.create()"},{"line_number":858,"context_line":"                # Update owner after actual process again in order to"},{"line_number":859,"context_line":"                # make sure the records in routerports table and ports"},{"line_number":860,"context_line":"                # table are consistent."}],"source_content_type":"text/x-python","patch_set":6,"id":"7a25e98e_2ff5e982","line":857,"range":{"start_line":851,"start_character":0,"end_line":857,"end_character":40},"in_reply_to":"ba2be162_a6495162","updated":"2017-03-13 19:21:23.000000000","message":"Done","commit_id":"03111368f01be51f5430f0ce3f4591800ceddeeb"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"10419cd1d32ef27523d2f5f55ba7ab13e4b68190","unresolved":false,"context_lines":[{"line_number":911,"context_line":""},{"line_number":912,"context_line":"    def _remove_interface_by_port(self, context, router_id,"},{"line_number":913,"context_line":"                                  port_id, subnet_id, owner):"},{"line_number":914,"context_line":"        obj \u003d l3_obj.RouterPort.get_object("},{"line_number":915,"context_line":"            context,"},{"line_number":916,"context_line":"            port_id\u003dport_id,"},{"line_number":917,"context_line":"            router_id\u003drouter_id,"},{"line_number":918,"context_line":"            port_type\u003downer"},{"line_number":919,"context_line":"        )"},{"line_number":920,"context_line":"        if obj:"},{"line_number":921,"context_line":"            try:"},{"line_number":922,"context_line":"                port \u003d self._core_plugin.get_port(context, obj.port_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba2be162_063e9d8b","line":919,"range":{"start_line":914,"start_character":0,"end_line":919,"end_character":9},"updated":"2017-03-03 19:08:29.000000000","message":"how about?\n   obj \u003d l3_obj.RouterPort.get_object(context, port_id\u003dport_id,\n       router_id\u003drouter_id, port_type\u003downer)","commit_id":"03111368f01be51f5430f0ce3f4591800ceddeeb"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"1e32531085594419576b4798e9ea227ce63b35a2","unresolved":false,"context_lines":[{"line_number":911,"context_line":""},{"line_number":912,"context_line":"    def _remove_interface_by_port(self, context, router_id,"},{"line_number":913,"context_line":"                                  port_id, subnet_id, owner):"},{"line_number":914,"context_line":"        obj \u003d l3_obj.RouterPort.get_object("},{"line_number":915,"context_line":"            context,"},{"line_number":916,"context_line":"            port_id\u003dport_id,"},{"line_number":917,"context_line":"            router_id\u003drouter_id,"},{"line_number":918,"context_line":"            port_type\u003downer"},{"line_number":919,"context_line":"        )"},{"line_number":920,"context_line":"        if obj:"},{"line_number":921,"context_line":"            try:"},{"line_number":922,"context_line":"                port \u003d self._core_plugin.get_port(context, obj.port_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a25e98e_af647949","line":919,"range":{"start_line":914,"start_character":0,"end_line":919,"end_character":9},"in_reply_to":"ba2be162_063e9d8b","updated":"2017-03-13 19:21:23.000000000","message":"Keeping it as is, as I feel this is more clearer.","commit_id":"03111368f01be51f5430f0ce3f4591800ceddeeb"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"10419cd1d32ef27523d2f5f55ba7ab13e4b68190","unresolved":false,"context_lines":[{"line_number":917,"context_line":"            router_id\u003drouter_id,"},{"line_number":918,"context_line":"            port_type\u003downer"},{"line_number":919,"context_line":"        )"},{"line_number":920,"context_line":"        if obj:"},{"line_number":921,"context_line":"            try:"},{"line_number":922,"context_line":"                port \u003d self._core_plugin.get_port(context, obj.port_id)"},{"line_number":923,"context_line":"            except (n_exc.PortNotFound, exc.NoResultFound):"},{"line_number":924,"context_line":"                raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":925,"context_line":"                                                 port_id\u003dport_id)"},{"line_number":926,"context_line":"        else:"},{"line_number":927,"context_line":"            raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":928,"context_line":"                                             port_id\u003dport_id)"},{"line_number":929,"context_line":"        port_subnet_ids \u003d [fixed_ip[\u0027subnet_id\u0027]"},{"line_number":930,"context_line":"                           for fixed_ip in port[\u0027fixed_ips\u0027]]"},{"line_number":931,"context_line":"        if subnet_id and subnet_id not in port_subnet_ids:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba2be162_2d1e245f","line":928,"range":{"start_line":920,"start_character":2,"end_line":928,"end_character":61},"updated":"2017-03-03 19:08:29.000000000","message":"can be replaced by following. No need to raise exception twice \n       try:\n            port \u003d self._core_plugin.get_port(context, obj.port_id)\n        except (n_exc.PortNotFound, exc.NoResultFound, TypeError):\n            raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,\n                                                 port_id\u003dport_id)","commit_id":"03111368f01be51f5430f0ce3f4591800ceddeeb"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"1e32531085594419576b4798e9ea227ce63b35a2","unresolved":false,"context_lines":[{"line_number":917,"context_line":"            router_id\u003drouter_id,"},{"line_number":918,"context_line":"            port_type\u003downer"},{"line_number":919,"context_line":"        )"},{"line_number":920,"context_line":"        if obj:"},{"line_number":921,"context_line":"            try:"},{"line_number":922,"context_line":"                port \u003d self._core_plugin.get_port(context, obj.port_id)"},{"line_number":923,"context_line":"            except (n_exc.PortNotFound, exc.NoResultFound):"},{"line_number":924,"context_line":"                raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":925,"context_line":"                                                 port_id\u003dport_id)"},{"line_number":926,"context_line":"        else:"},{"line_number":927,"context_line":"            raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":928,"context_line":"                                             port_id\u003dport_id)"},{"line_number":929,"context_line":"        port_subnet_ids \u003d [fixed_ip[\u0027subnet_id\u0027]"},{"line_number":930,"context_line":"                           for fixed_ip in port[\u0027fixed_ips\u0027]]"},{"line_number":931,"context_line":"        if subnet_id and subnet_id not in port_subnet_ids:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a25e98e_cf59b590","line":928,"range":{"start_line":920,"start_character":2,"end_line":928,"end_character":61},"in_reply_to":"ba2be162_2d1e245f","updated":"2017-03-13 19:21:23.000000000","message":"Done","commit_id":"03111368f01be51f5430f0ce3f4591800ceddeeb"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5389df84619703e7981d1653c9294406c0021f89","unresolved":false,"context_lines":[{"line_number":941,"context_line":"        subnet \u003d self._core_plugin.get_subnet(context, subnet_id)"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":"        try:"},{"line_number":944,"context_line":"            # Need Port object"},{"line_number":945,"context_line":"            rport_qry \u003d context.session.query(models_v2.Port).join("},{"line_number":946,"context_line":"                l3_models.RouterPort)"},{"line_number":947,"context_line":"            ports \u003d rport_qry.filter("},{"line_number":948,"context_line":"                l3_models.RouterPort.router_id \u003d\u003d router_id,"},{"line_number":949,"context_line":"                l3_models.RouterPort.port_type \u003d\u003d owner,"},{"line_number":950,"context_line":"                models_v2.Port.network_id \u003d\u003d subnet[\u0027network_id\u0027]"},{"line_number":951,"context_line":"            )"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"            for p in ports:"},{"line_number":954,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a25e98e_80178aec","line":951,"range":{"start_line":944,"start_character":12,"end_line":951,"end_character":13},"updated":"2017-03-13 20:22:25.000000000","message":"this can be actually implemented two ways,\n1. implement this as one of object methods\n\n2. using get_objects separately on Port and RouterPort and then applying filters though this could be inefficient.","commit_id":"99fcde0c099dbf3b502b5081d9da40f471753b6f"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5389df84619703e7981d1653c9294406c0021f89","unresolved":false,"context_lines":[{"line_number":1938,"context_line":"    subnetpool_id \u003d kwargs[\u0027subnetpool_id\u0027]"},{"line_number":1939,"context_line":""},{"line_number":1940,"context_line":"    # Need Port object"},{"line_number":1941,"context_line":"    query \u003d context.session.query(l3_models.RouterPort.router_id)"},{"line_number":1942,"context_line":"    query \u003d query.join(models_v2.Port)"},{"line_number":1943,"context_line":"    query \u003d query.join("},{"line_number":1944,"context_line":"        models_v2.Subnet,"},{"line_number":1945,"context_line":"        models_v2.Subnet.network_id \u003d\u003d models_v2.Port.network_id)"},{"line_number":1946,"context_line":"    query \u003d query.filter("},{"line_number":1947,"context_line":"        models_v2.Subnet.subnetpool_id \u003d\u003d subnetpool_id,"},{"line_number":1948,"context_line":"        l3_models.RouterPort.port_type.in_(n_const.ROUTER_PORT_OWNERS))"},{"line_number":1949,"context_line":"    query \u003d query.distinct()"},{"line_number":1950,"context_line":""},{"line_number":1951,"context_line":"    router_ids \u003d [r[0] for r in query]"},{"line_number":1952,"context_line":"    l3plugin \u003d directory.get_plugin(constants.L3)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a25e98e_e0b3de08","line":1949,"range":{"start_line":1941,"start_character":4,"end_line":1949,"end_character":28},"updated":"2017-03-13 20:22:25.000000000","message":"similar suggestion can be applied here as I commented on L951","commit_id":"99fcde0c099dbf3b502b5081d9da40f471753b6f"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"860f9ab767fede8ba43a54eb408afe65ca19d62a","unresolved":false,"context_lines":[{"line_number":1583,"context_line":"                                          DEVICE_OWNER_HA_REPLICATED_INT]"},{"line_number":1584,"context_line":"        if not router_ids:"},{"line_number":1585,"context_line":"            return []"},{"line_number":1586,"context_line":"        # Need Port as synthetic field"},{"line_number":1587,"context_line":"        qry \u003d context.session.query(l3_models.RouterPort)"},{"line_number":1588,"context_line":"        qry \u003d qry.filter("},{"line_number":1589,"context_line":"            l3_models.RouterPort.router_id.in_(router_ids),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_a5d91ef5","line":1586,"updated":"2017-03-23 02:16:50.000000000","message":"Since Port stuff is needed in RouterPort OVO, should it be introduced in a separate PS or better to be added here itself?","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"26fc75be1af5a8628fff7cc2e646b1f5913ba73d","unresolved":false,"context_lines":[{"line_number":1583,"context_line":"                                          DEVICE_OWNER_HA_REPLICATED_INT]"},{"line_number":1584,"context_line":"        if not router_ids:"},{"line_number":1585,"context_line":"            return []"},{"line_number":1586,"context_line":"        # Need Port as synthetic field"},{"line_number":1587,"context_line":"        qry \u003d context.session.query(l3_models.RouterPort)"},{"line_number":1588,"context_line":"        qry \u003d qry.filter("},{"line_number":1589,"context_line":"            l3_models.RouterPort.router_id.in_(router_ids),"}],"source_content_type":"text/x-python","patch_set":8,"id":"ffe62b97_3ada6a4a","line":1586,"in_reply_to":"1a1ced50_a5d91ef5","updated":"2017-03-29 19:18:06.000000000","message":"Port needs to be added in the object introduction review [1].\n\n[1] https://review.openstack.org/#/c/307964/55","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"06ec91abd1cc0d5309aad0c3bc0716adb2832730","unresolved":false,"context_lines":[{"line_number":914,"context_line":"                raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":915,"context_line":"                                                 port_id\u003dport_id)"},{"line_number":916,"context_line":"        else:"},{"line_number":917,"context_line":"            raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":918,"context_line":"                                             port_id\u003dport_id)"},{"line_number":919,"context_line":"        port_subnet_ids \u003d [fixed_ip[\u0027subnet_id\u0027]"},{"line_number":920,"context_line":"                           for fixed_ip in port[\u0027fixed_ips\u0027]]"}],"source_content_type":"text/x-python","patch_set":12,"id":"7ffa3b31_5156c22b","line":917,"updated":"2017-04-16 09:22:49.000000000","message":"Now that this is no longer querying the db in the get_port call argument construction, it will likely not be able to raise NoResultFound so that exception should be remove from L913. This \u0027else\u0027 branch will handle the case where the routerport record has been deleted.","commit_id":"93017bd52e7c15398cf5e02098def95b99496904"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"950a42ec52912f47bd29cf875745460b685c80b4","unresolved":false,"context_lines":[{"line_number":907,"context_line":"            router_id\u003drouter_id,"},{"line_number":908,"context_line":"            port_type\u003downer"},{"line_number":909,"context_line":"        )"},{"line_number":910,"context_line":"        if obj:"},{"line_number":911,"context_line":"            try:"},{"line_number":912,"context_line":"                port \u003d self._core_plugin.get_port(context, obj.port_id)"},{"line_number":913,"context_line":"            except (n_exc.PortNotFound, exc.NoResultFound):"},{"line_number":914,"context_line":"                raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":915,"context_line":"                                                 port_id\u003dport_id)"},{"line_number":916,"context_line":"        else:"},{"line_number":917,"context_line":"            raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":918,"context_line":"                                             port_id\u003dport_id)"},{"line_number":919,"context_line":"        port_subnet_ids \u003d [fixed_ip[\u0027subnet_id\u0027]"},{"line_number":920,"context_line":"                           for fixed_ip in port[\u0027fixed_ips\u0027]]"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_603a27e8","line":917,"range":{"start_line":910,"start_character":0,"end_line":917,"end_character":65},"updated":"2017-04-05 16:52:50.000000000","message":"Please refer to my comment on one of the previous patchsets  [1].\nAfaiu, it is still valid.  Can you please explain why it has been reverted ?\n\n[1] https://review.openstack.org/#/c/424154/6/neutron/db/l3_db.py@920","commit_id":"93017bd52e7c15398cf5e02098def95b99496904"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":926,"context_line":"        if obj:"},{"line_number":927,"context_line":"            try:"},{"line_number":928,"context_line":"                port \u003d self._core_plugin.get_port(context, obj.port_id)"},{"line_number":929,"context_line":"            except (n_exc.PortNotFound, exc.NoResultFound):"},{"line_number":930,"context_line":"                raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":931,"context_line":"                                                 port_id\u003dport_id)"},{"line_number":932,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_488fe374","line":929,"range":{"start_line":929,"start_character":40,"end_line":929,"end_character":57},"updated":"2017-07-26 16:06:53.000000000","message":"since now we don\u0027t call .one(), do we need to catch this sqlalchemy exception? I don\u0027t think plugins should raise sqlalchemy exceptions themselves.","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":926,"context_line":"        if obj:"},{"line_number":927,"context_line":"            try:"},{"line_number":928,"context_line":"                port \u003d self._core_plugin.get_port(context, obj.port_id)"},{"line_number":929,"context_line":"            except (n_exc.PortNotFound, exc.NoResultFound):"},{"line_number":930,"context_line":"                raise l3.RouterInterfaceNotFound(router_id\u003drouter_id,"},{"line_number":931,"context_line":"                                                 port_id\u003dport_id)"},{"line_number":932,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_452a167f","line":929,"range":{"start_line":929,"start_character":40,"end_line":929,"end_character":57},"in_reply_to":"ff346bd7_488fe374","updated":"2017-07-27 02:59:41.000000000","message":"Done","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":953,"context_line":"        subnet \u003d self._core_plugin.get_subnet(context, subnet_id)"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"        try:"},{"line_number":956,"context_line":"            ports \u003d port_obj.Port.get_port_routerport_qry("},{"line_number":957,"context_line":"                context, router_id, owner, subnet)"},{"line_number":958,"context_line":""},{"line_number":959,"context_line":"            for p in ports:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_c8c993ac","line":956,"range":{"start_line":956,"start_character":34,"end_line":956,"end_character":58},"updated":"2017-07-26 16:06:53.000000000","message":"the name is not ideal. consider: Port.get_ports_by_router.","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":953,"context_line":"        subnet \u003d self._core_plugin.get_subnet(context, subnet_id)"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"        try:"},{"line_number":956,"context_line":"            ports \u003d port_obj.Port.get_port_routerport_qry("},{"line_number":957,"context_line":"                context, router_id, owner, subnet)"},{"line_number":958,"context_line":""},{"line_number":959,"context_line":"            for p in ports:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_658cfa7e","line":956,"range":{"start_line":956,"start_character":34,"end_line":956,"end_character":58},"in_reply_to":"ff346bd7_c8c993ac","updated":"2017-07-27 02:59:41.000000000","message":"Done","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":1075,"context_line":"        # Otherwise return the first router."},{"line_number":1076,"context_line":"        RouterPort \u003d l3_models.RouterPort"},{"line_number":1077,"context_line":"        gw_port \u003d orm.aliased(models_v2.Port, name\u003d\"gw_port\")"},{"line_number":1078,"context_line":"        # Need IPAllocation and Port object"},{"line_number":1079,"context_line":"        routerport_qry \u003d context.session.query("},{"line_number":1080,"context_line":"            RouterPort.router_id, models_v2.IPAllocation.ip_address).join("},{"line_number":1081,"context_line":"            models_v2.Port, models_v2.IPAllocation).filter("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_88c70b97","line":1078,"updated":"2017-07-26 16:06:53.000000000","message":"please use TODO(...) to tag things to follow up on","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":1075,"context_line":"        # Otherwise return the first router."},{"line_number":1076,"context_line":"        RouterPort \u003d l3_models.RouterPort"},{"line_number":1077,"context_line":"        gw_port \u003d orm.aliased(models_v2.Port, name\u003d\"gw_port\")"},{"line_number":1078,"context_line":"        # Need IPAllocation and Port object"},{"line_number":1079,"context_line":"        routerport_qry \u003d context.session.query("},{"line_number":1080,"context_line":"            RouterPort.router_id, models_v2.IPAllocation.ip_address).join("},{"line_number":1081,"context_line":"            models_v2.Port, models_v2.IPAllocation).filter("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_a5db027a","line":1078,"in_reply_to":"ff346bd7_88c70b97","updated":"2017-07-27 02:59:41.000000000","message":"Done","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":1605,"context_line":"        objs \u003d []"},{"line_number":1606,"context_line":"        for router_id in router_ids:"},{"line_number":1607,"context_line":"            for device_owner in device_owners:"},{"line_number":1608,"context_line":"                objs +\u003d l3_obj.RouterPort.get_objects("},{"line_number":1609,"context_line":"                    context, router_id\u003drouter_id, port_type\u003ddevice_owner)"},{"line_number":1610,"context_line":""},{"line_number":1611,"context_line":"        interfaces \u003d [self._core_plugin._make_port_dict(rp.db_obj.port)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_0862fbae","line":1608,"updated":"2017-07-26 16:06:53.000000000","message":"get_objects supports lists as values to filter keyword arguments. For example:\n\nobjs \u003d l3_obj.RouterPort.get_objects(\n    context,\n    router_id\u003drouter_ids,\n    port_type\u003ddevice_owners)","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":1605,"context_line":"        objs \u003d []"},{"line_number":1606,"context_line":"        for router_id in router_ids:"},{"line_number":1607,"context_line":"            for device_owner in device_owners:"},{"line_number":1608,"context_line":"                objs +\u003d l3_obj.RouterPort.get_objects("},{"line_number":1609,"context_line":"                    context, router_id\u003drouter_id, port_type\u003ddevice_owner)"},{"line_number":1610,"context_line":""},{"line_number":1611,"context_line":"        interfaces \u003d [self._core_plugin._make_port_dict(rp.db_obj.port)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_c575e665","line":1608,"in_reply_to":"ff346bd7_0862fbae","updated":"2017-07-27 02:59:41.000000000","message":"Done","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":1797,"context_line":"        context \u003d kwargs[\u0027context\u0027]"},{"line_number":1798,"context_line":"        subnetpool_id \u003d kwargs[\u0027subnetpool_id\u0027]"},{"line_number":1799,"context_line":""},{"line_number":1800,"context_line":"        query \u003d l3_obj.RouterPort.get_router_ids(context, subnetpool_id)"},{"line_number":1801,"context_line":""},{"line_number":1802,"context_line":"        router_ids \u003d [r[0] for r in query]"},{"line_number":1803,"context_line":"        l3plugin \u003d directory.get_plugin(plugin_constants.L3)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_68ce2783","line":1800,"updated":"2017-07-26 16:06:53.000000000","message":"we need to change get_router_ids to return IDs (as suggested by the name), at which point lines 1802+ will also require some adjustment. the name of the \u0027query\u0027 variable will also need to change.","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":1797,"context_line":"        context \u003d kwargs[\u0027context\u0027]"},{"line_number":1798,"context_line":"        subnetpool_id \u003d kwargs[\u0027subnetpool_id\u0027]"},{"line_number":1799,"context_line":""},{"line_number":1800,"context_line":"        query \u003d l3_obj.RouterPort.get_router_ids(context, subnetpool_id)"},{"line_number":1801,"context_line":""},{"line_number":1802,"context_line":"        router_ids \u003d [r[0] for r in query]"},{"line_number":1803,"context_line":"        l3plugin \u003d directory.get_plugin(plugin_constants.L3)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_c5d16625","line":1800,"in_reply_to":"ff346bd7_68ce2783","updated":"2017-07-27 02:59:41.000000000","message":"Done","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4b4de35b42c5d032e402efe67d229178e9df934c","unresolved":false,"context_lines":[{"line_number":1794,"context_line":"        context \u003d kwargs[\u0027context\u0027]"},{"line_number":1795,"context_line":"        subnetpool_id \u003d kwargs[\u0027subnetpool_id\u0027]"},{"line_number":1796,"context_line":""},{"line_number":1797,"context_line":"        router_ids \u003d l3_obj.RouterPort.get_router_ids_by_subntepool("},{"line_number":1798,"context_line":"            context, subnetpool_id)"},{"line_number":1799,"context_line":""},{"line_number":1800,"context_line":"        l3plugin \u003d directory.get_plugin(plugin_constants.L3)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff346bd7_4fb0db8a","line":1797,"range":{"start_line":1797,"start_character":57,"end_line":1797,"end_character":67},"updated":"2017-07-27 15:33:12.000000000","message":"subnetpool","commit_id":"617ebccf007df05500c1f4126306aa23003b9a57"}],"neutron/db/l3_dvr_db.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bd5983d47f7ec8cb6433f86d65c036ea90f7420a","unresolved":false,"context_lines":[{"line_number":728,"context_line":"            msg \u003d _(\"Unable to create the SNAT Interface Port\")"},{"line_number":729,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":732,"context_line":"            router_port \u003d l3_obj.RouterPort("},{"line_number":733,"context_line":"                context,"},{"line_number":734,"context_line":"                port_id\u003dsnat_port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_8849cab9","line":731,"range":{"start_line":731,"start_character":8,"end_line":731,"end_character":57},"updated":"2017-02-07 21:41:31.000000000","message":"I don\u0027t think that you need a transaction for this.","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"707f7704d5d3801b8449ab88b0f14dcadd78dc2d","unresolved":false,"context_lines":[{"line_number":728,"context_line":"            msg \u003d _(\"Unable to create the SNAT Interface Port\")"},{"line_number":729,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":732,"context_line":"            router_port \u003d l3_obj.RouterPort("},{"line_number":733,"context_line":"                context,"},{"line_number":734,"context_line":"                port_id\u003dsnat_port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_5459108d","line":731,"range":{"start_line":731,"start_character":8,"end_line":731,"end_character":57},"in_reply_to":"1a430d35_8849cab9","updated":"2017-02-08 17:24:23.000000000","message":"Done","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bd5983d47f7ec8cb6433f86d65c036ea90f7420a","unresolved":false,"context_lines":[{"line_number":729,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":732,"context_line":"            router_port \u003d l3_obj.RouterPort("},{"line_number":733,"context_line":"                context,"},{"line_number":734,"context_line":"                port_id\u003dsnat_port[\u0027id\u0027],"},{"line_number":735,"context_line":"                router_id\u003drouter.id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_68e3bea4","line":732,"range":{"start_line":732,"start_character":12,"end_line":732,"end_character":23},"updated":"2017-02-07 21:41:31.000000000","message":"I don\u0027t see any other reference to this variable so you can call the create method in the same line.","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"707f7704d5d3801b8449ab88b0f14dcadd78dc2d","unresolved":false,"context_lines":[{"line_number":729,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":732,"context_line":"            router_port \u003d l3_obj.RouterPort("},{"line_number":733,"context_line":"                context,"},{"line_number":734,"context_line":"                port_id\u003dsnat_port[\u0027id\u0027],"},{"line_number":735,"context_line":"                router_id\u003drouter.id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_9457f856","line":732,"range":{"start_line":732,"start_character":12,"end_line":732,"end_character":23},"in_reply_to":"1a430d35_68e3bea4","updated":"2017-02-08 17:24:23.000000000","message":"Done","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5389df84619703e7981d1653c9294406c0021f89","unresolved":false,"context_lines":[{"line_number":703,"context_line":""},{"line_number":704,"context_line":"    def _get_snat_interface_ports_for_router(self, context, router_id):"},{"line_number":705,"context_line":"        \"\"\"Return all existing snat_router_interface ports.\"\"\""},{"line_number":706,"context_line":"        # Need Port as synthetic field"},{"line_number":707,"context_line":"        qry \u003d context.session.query(l3_models.RouterPort)"},{"line_number":708,"context_line":"        qry \u003d qry.filter_by("},{"line_number":709,"context_line":"            router_id\u003drouter_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a25e98e_40ce725b","line":706,"range":{"start_line":706,"start_character":8,"end_line":706,"end_character":38},"updated":"2017-03-13 20:22:25.000000000","message":"I doubt if we really port as synthetic field, because port id is an primary key ports table, even if we need it as synthetic field then I believe object definitions shouldn\u0027t go without testing synthetic field.","commit_id":"99fcde0c099dbf3b502b5081d9da40f471753b6f"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c948af3b84cb0c402da9576e2636219cca8cfb35","unresolved":false,"context_lines":[{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    def _get_snat_interface_ports_for_router(self, context, router_id):"},{"line_number":691,"context_line":"        \"\"\"Return all existing snat_router_interface ports.\"\"\""},{"line_number":692,"context_line":"        # Need Port as synthetic field"},{"line_number":693,"context_line":"        qry \u003d context.session.query(l3_models.RouterPort)"},{"line_number":694,"context_line":"        qry \u003d qry.filter_by("},{"line_number":695,"context_line":"            router_id\u003drouter_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_40293d89","line":692,"range":{"start_line":692,"start_character":8,"end_line":692,"end_character":38},"updated":"2017-03-22 22:41:27.000000000","message":"seems like comment from previous PS unaddressed","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"860f9ab767fede8ba43a54eb408afe65ca19d62a","unresolved":false,"context_lines":[{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    def _get_snat_interface_ports_for_router(self, context, router_id):"},{"line_number":691,"context_line":"        \"\"\"Return all existing snat_router_interface ports.\"\"\""},{"line_number":692,"context_line":"        # Need Port as synthetic field"},{"line_number":693,"context_line":"        qry \u003d context.session.query(l3_models.RouterPort)"},{"line_number":694,"context_line":"        qry \u003d qry.filter_by("},{"line_number":695,"context_line":"            router_id\u003drouter_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_c51ffab4","line":692,"range":{"start_line":692,"start_character":8,"end_line":692,"end_character":38},"in_reply_to":"1a1ced50_40293d89","updated":"2017-03-23 02:16:50.000000000","message":"I think the comment means Port synthetic field needs to be introduced in class [1] since it is used below in line 699. \n\n[1] - https://github.com/openstack/neutron/blob/master/neutron/objects/router.py#L27","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"26fc75be1af5a8628fff7cc2e646b1f5913ba73d","unresolved":false,"context_lines":[{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    def _get_snat_interface_ports_for_router(self, context, router_id):"},{"line_number":691,"context_line":"        \"\"\"Return all existing snat_router_interface ports.\"\"\""},{"line_number":692,"context_line":"        # Need Port as synthetic field"},{"line_number":693,"context_line":"        qry \u003d context.session.query(l3_models.RouterPort)"},{"line_number":694,"context_line":"        qry \u003d qry.filter_by("},{"line_number":695,"context_line":"            router_id\u003drouter_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ffe62b97_ba9b1a71","line":692,"range":{"start_line":692,"start_character":8,"end_line":692,"end_character":38},"in_reply_to":"1a1ced50_c51ffab4","updated":"2017-03-29 19:18:06.000000000","message":"Yes, Manjeet. In L699, port is needed.","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def _get_snat_interface_ports_for_router(self, context, router_id):"},{"line_number":171,"context_line":"        \"\"\"Return all existing snat_router_interface ports.\"\"\""},{"line_number":172,"context_line":"        # TODO(lujinluo): Need Port as synthetic field"},{"line_number":173,"context_line":"        objs \u003d l3_obj.RouterPort.get_objects("},{"line_number":174,"context_line":"            context,"},{"line_number":175,"context_line":"            router_id\u003drouter_id,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_bc02116e","line":172,"updated":"2017-07-26 16:06:53.000000000","message":"this comment probably belongs to before line 178","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def _get_snat_interface_ports_for_router(self, context, router_id):"},{"line_number":171,"context_line":"        \"\"\"Return all existing snat_router_interface ports.\"\"\""},{"line_number":172,"context_line":"        # TODO(lujinluo): Need Port as synthetic field"},{"line_number":173,"context_line":"        objs \u003d l3_obj.RouterPort.get_objects("},{"line_number":174,"context_line":"            context,"},{"line_number":175,"context_line":"            router_id\u003drouter_id,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_859c7e6a","line":172,"in_reply_to":"ff346bd7_bc02116e","updated":"2017-07-27 02:59:41.000000000","message":"Done","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        \"\"\"Query router interfaces that relate to list of router_ids.\"\"\""},{"line_number":567,"context_line":"        if not router_ids:"},{"line_number":568,"context_line":"            return []"},{"line_number":569,"context_line":"        # TODO(lujinluo): Need Port as synthetic field"},{"line_number":570,"context_line":"        objs \u003d []"},{"line_number":571,"context_line":"        for router_id in router_ids:"},{"line_number":572,"context_line":"            objs +\u003d l3_obj.RouterPort.get_objects("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_3cd501e6","line":569,"updated":"2017-07-26 16:06:53.000000000","message":"this comment probably belongs to before line 580?","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        \"\"\"Query router interfaces that relate to list of router_ids.\"\"\""},{"line_number":567,"context_line":"        if not router_ids:"},{"line_number":568,"context_line":"            return []"},{"line_number":569,"context_line":"        # TODO(lujinluo): Need Port as synthetic field"},{"line_number":570,"context_line":"        objs \u003d []"},{"line_number":571,"context_line":"        for router_id in router_ids:"},{"line_number":572,"context_line":"            objs +\u003d l3_obj.RouterPort.get_objects("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_c5a4c6a8","line":569,"in_reply_to":"ff346bd7_3cd501e6","updated":"2017-07-27 02:59:41.000000000","message":"Done","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":568,"context_line":"            return []"},{"line_number":569,"context_line":"        # TODO(lujinluo): Need Port as synthetic field"},{"line_number":570,"context_line":"        objs \u003d []"},{"line_number":571,"context_line":"        for router_id in router_ids:"},{"line_number":572,"context_line":"            objs +\u003d l3_obj.RouterPort.get_objects("},{"line_number":573,"context_line":"                context,"},{"line_number":574,"context_line":"                router_id\u003drouter_id,"},{"line_number":575,"context_line":"                port_type\u003dconst.DEVICE_OWNER_ROUTER_SNAT)"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"        interfaces \u003d collections.defaultdict(list)"},{"line_number":578,"context_line":"        for rp in objs:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_fce3f9d7","line":575,"range":{"start_line":571,"start_character":8,"end_line":575,"end_character":57},"updated":"2017-07-26 16:06:53.000000000","message":"get_objects support IN, just pass the list as router_id\u003drouter_ids","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":568,"context_line":"            return []"},{"line_number":569,"context_line":"        # TODO(lujinluo): Need Port as synthetic field"},{"line_number":570,"context_line":"        objs \u003d []"},{"line_number":571,"context_line":"        for router_id in router_ids:"},{"line_number":572,"context_line":"            objs +\u003d l3_obj.RouterPort.get_objects("},{"line_number":573,"context_line":"                context,"},{"line_number":574,"context_line":"                router_id\u003drouter_id,"},{"line_number":575,"context_line":"                port_type\u003dconst.DEVICE_OWNER_ROUTER_SNAT)"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"        interfaces \u003d collections.defaultdict(list)"},{"line_number":578,"context_line":"        for rp in objs:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_85c35e38","line":575,"range":{"start_line":571,"start_character":8,"end_line":575,"end_character":57},"in_reply_to":"ff346bd7_fce3f9d7","updated":"2017-07-27 02:59:41.000000000","message":"Done","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"}],"neutron/db/l3_hamode_db.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bd5983d47f7ec8cb6433f86d65c036ea90f7420a","unresolved":false,"context_lines":[{"line_number":286,"context_line":"    def _create_ha_port_binding(self, context, router_id, port_id):"},{"line_number":287,"context_line":"        try:"},{"line_number":288,"context_line":"            with context.session.begin():"},{"line_number":289,"context_line":"                routerportbinding \u003d l3_obj.RouterPort("},{"line_number":290,"context_line":"                    context,"},{"line_number":291,"context_line":"                    port_id\u003dport_id,"},{"line_number":292,"context_line":"                    router_id\u003drouter_id,"},{"line_number":293,"context_line":"                    port_type\u003dconstants.DEVICE_OWNER_ROUTER_HA_INTF)"},{"line_number":294,"context_line":"                routerportbinding.create()"},{"line_number":295,"context_line":"                portbinding \u003d l3ha_model.L3HARouterAgentPortBinding("},{"line_number":296,"context_line":"                    port_id\u003dport_id, router_id\u003drouter_id)"},{"line_number":297,"context_line":"                context.session.add(portbinding)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_4888c2c5","line":294,"range":{"start_line":289,"start_character":17,"end_line":294,"end_character":42},"updated":"2017-02-07 21:41:31.000000000","message":"the routerportbinding variable is only used for the creation.","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"707f7704d5d3801b8449ab88b0f14dcadd78dc2d","unresolved":false,"context_lines":[{"line_number":286,"context_line":"    def _create_ha_port_binding(self, context, router_id, port_id):"},{"line_number":287,"context_line":"        try:"},{"line_number":288,"context_line":"            with context.session.begin():"},{"line_number":289,"context_line":"                routerportbinding \u003d l3_obj.RouterPort("},{"line_number":290,"context_line":"                    context,"},{"line_number":291,"context_line":"                    port_id\u003dport_id,"},{"line_number":292,"context_line":"                    router_id\u003drouter_id,"},{"line_number":293,"context_line":"                    port_type\u003dconstants.DEVICE_OWNER_ROUTER_HA_INTF)"},{"line_number":294,"context_line":"                routerportbinding.create()"},{"line_number":295,"context_line":"                portbinding \u003d l3ha_model.L3HARouterAgentPortBinding("},{"line_number":296,"context_line":"                    port_id\u003dport_id, router_id\u003drouter_id)"},{"line_number":297,"context_line":"                context.session.add(portbinding)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_f4483cb5","line":294,"range":{"start_line":289,"start_character":17,"end_line":294,"end_character":42},"in_reply_to":"1a430d35_4888c2c5","updated":"2017-02-08 17:24:23.000000000","message":"Done","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"}],"neutron/objects/ports.py":[{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"950a42ec52912f47bd29cf875745460b685c80b4","unresolved":false,"context_lines":[{"line_number":385,"context_line":"            l3.RouterPort.port_type \u003d\u003d owner,"},{"line_number":386,"context_line":"            models_v2.Port.network_id \u003d\u003d subnet[\u0027network_id\u0027]"},{"line_number":387,"context_line":"        )"},{"line_number":388,"context_line":"        return [cls._load_object(context, db_obj) for db_obj in ports.all()]"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_9b66bc51","line":388,"range":{"start_line":388,"start_character":0,"end_line":388,"end_character":76},"updated":"2017-04-05 16:52:50.000000000","message":"afiu, these lines have been moved from [1]\nMay be I am missing something, why this line has been included as it does not exist in [1] ?\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/db/l3_db.py#L934-#L940","commit_id":"93017bd52e7c15398cf5e02098def95b99496904"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"616639a26d57e6dee3af402a965165b61d586d29","unresolved":false,"context_lines":[{"line_number":385,"context_line":"            l3.RouterPort.port_type \u003d\u003d owner,"},{"line_number":386,"context_line":"            models_v2.Port.network_id \u003d\u003d subnet[\u0027network_id\u0027]"},{"line_number":387,"context_line":"        )"},{"line_number":388,"context_line":"        return [cls._load_object(context, db_obj) for db_obj in ports.all()]"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_56bc8968","line":388,"range":{"start_line":388,"start_character":0,"end_line":388,"end_character":76},"in_reply_to":"bff0334d_9b66bc51","updated":"2017-04-05 17:21:36.000000000","message":"Also, _load_object is a private method in  NeutronDbObject class in neutron/objects/base.py.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/objects/base.py#L384","commit_id":"93017bd52e7c15398cf5e02098def95b99496904"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            primitive.pop(\u0027data_plane_status\u0027, None)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    @classmethod"},{"line_number":416,"context_line":"    def get_port_routerport_qry(cls, context, router_id, owner, subnet):"},{"line_number":417,"context_line":"        rport_qry \u003d context.session.query(models_v2.Port).join("},{"line_number":418,"context_line":"            l3.RouterPort)"},{"line_number":419,"context_line":"        ports \u003d rport_qry.filter("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_dc8035c2","line":416,"range":{"start_line":416,"start_character":8,"end_line":416,"end_character":32},"updated":"2017-07-26 16:06:53.000000000","message":"as I commented in another file, this name is not ideal (it doesn\u0027t return a query, but a list of objects; and it doesn\u0027t return a single port; so consider: get_ports_by_router_id).","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            primitive.pop(\u0027data_plane_status\u0027, None)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    @classmethod"},{"line_number":416,"context_line":"    def get_port_routerport_qry(cls, context, router_id, owner, subnet):"},{"line_number":417,"context_line":"        rport_qry \u003d context.session.query(models_v2.Port).join("},{"line_number":418,"context_line":"            l3.RouterPort)"},{"line_number":419,"context_line":"        ports \u003d rport_qry.filter("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_65719a0c","line":416,"range":{"start_line":416,"start_character":8,"end_line":416,"end_character":32},"in_reply_to":"ff346bd7_dc8035c2","updated":"2017-07-27 02:59:41.000000000","message":"Done. I unified both places to get_ports_by_router()","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"}],"neutron/objects/router.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c948af3b84cb0c402da9576e2636219cca8cfb35","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @classmethod"},{"line_number":118,"context_line":"    def get_port_routerport_qry(cls, context, router_id, owner, subnet):"},{"line_number":119,"context_line":"        rport_qry \u003d context.session.query(models_v2.Port).join("},{"line_number":120,"context_line":"            l3.RouterPort)"},{"line_number":121,"context_line":"        ports \u003d rport_qry.filter("},{"line_number":122,"context_line":"            l3.RouterPort.router_id \u003d\u003d router_id,"},{"line_number":123,"context_line":"            l3.RouterPort.port_type \u003d\u003d owner,"},{"line_number":124,"context_line":"            models_v2.Port.network_id \u003d\u003d subnet[\u0027network_id\u0027]"},{"line_number":125,"context_line":"        )"},{"line_number":126,"context_line":"        return ports"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @classmethod"},{"line_number":129,"context_line":"    def get_router_ids(cls, context, subnetpool_id):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_2501b306","line":126,"range":{"start_line":119,"start_character":8,"end_line":126,"end_character":20},"updated":"2017-03-22 22:41:27.000000000","message":"here load_object should be used and return an versioned object instead of returning query object","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"860f9ab767fede8ba43a54eb408afe65ca19d62a","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @classmethod"},{"line_number":118,"context_line":"    def get_port_routerport_qry(cls, context, router_id, owner, subnet):"},{"line_number":119,"context_line":"        rport_qry \u003d context.session.query(models_v2.Port).join("},{"line_number":120,"context_line":"            l3.RouterPort)"},{"line_number":121,"context_line":"        ports \u003d rport_qry.filter("},{"line_number":122,"context_line":"            l3.RouterPort.router_id \u003d\u003d router_id,"},{"line_number":123,"context_line":"            l3.RouterPort.port_type \u003d\u003d owner,"},{"line_number":124,"context_line":"            models_v2.Port.network_id \u003d\u003d subnet[\u0027network_id\u0027]"},{"line_number":125,"context_line":"        )"},{"line_number":126,"context_line":"        return ports"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @classmethod"},{"line_number":129,"context_line":"    def get_router_ids(cls, context, subnetpool_id):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_659ba666","line":126,"range":{"start_line":119,"start_character":8,"end_line":126,"end_character":20},"in_reply_to":"1a1ced50_2501b306","updated":"2017-03-23 02:16:50.000000000","message":"I think it should return a list of OVOs.","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"26fc75be1af5a8628fff7cc2e646b1f5913ba73d","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @classmethod"},{"line_number":118,"context_line":"    def get_port_routerport_qry(cls, context, router_id, owner, subnet):"},{"line_number":119,"context_line":"        rport_qry \u003d context.session.query(models_v2.Port).join("},{"line_number":120,"context_line":"            l3.RouterPort)"},{"line_number":121,"context_line":"        ports \u003d rport_qry.filter("},{"line_number":122,"context_line":"            l3.RouterPort.router_id \u003d\u003d router_id,"},{"line_number":123,"context_line":"            l3.RouterPort.port_type \u003d\u003d owner,"},{"line_number":124,"context_line":"            models_v2.Port.network_id \u003d\u003d subnet[\u0027network_id\u0027]"},{"line_number":125,"context_line":"        )"},{"line_number":126,"context_line":"        return ports"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @classmethod"},{"line_number":129,"context_line":"    def get_router_ids(cls, context, subnetpool_id):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ffe62b97_351fe608","line":126,"range":{"start_line":119,"start_character":8,"end_line":126,"end_character":20},"in_reply_to":"1a1ced50_659ba666","updated":"2017-03-29 19:18:06.000000000","message":"Done","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c948af3b84cb0c402da9576e2636219cca8cfb35","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @classmethod"},{"line_number":129,"context_line":"    def get_router_ids(cls, context, subnetpool_id):"},{"line_number":130,"context_line":"        query \u003d context.session.query(l3.RouterPort.router_id)"},{"line_number":131,"context_line":"        query \u003d query.join(models_v2.Port)"},{"line_number":132,"context_line":"        query \u003d query.join("},{"line_number":133,"context_line":"            models_v2.Subnet,"},{"line_number":134,"context_line":"            models_v2.Subnet.network_id \u003d\u003d models_v2.Port.network_id)"},{"line_number":135,"context_line":"        query \u003d query.filter("},{"line_number":136,"context_line":"            models_v2.Subnet.subnetpool_id \u003d\u003d subnetpool_id,"},{"line_number":137,"context_line":"            l3.RouterPort.port_type.in_(n_const.ROUTER_PORT_OWNERS))"},{"line_number":138,"context_line":"        query \u003d query.distinct()"},{"line_number":139,"context_line":"        return query"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_40021d0b","line":139,"range":{"start_line":130,"start_character":8,"end_line":139,"end_character":20},"updated":"2017-03-22 22:41:27.000000000","message":"same here","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"860f9ab767fede8ba43a54eb408afe65ca19d62a","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @classmethod"},{"line_number":129,"context_line":"    def get_router_ids(cls, context, subnetpool_id):"},{"line_number":130,"context_line":"        query \u003d context.session.query(l3.RouterPort.router_id)"},{"line_number":131,"context_line":"        query \u003d query.join(models_v2.Port)"},{"line_number":132,"context_line":"        query \u003d query.join("},{"line_number":133,"context_line":"            models_v2.Subnet,"},{"line_number":134,"context_line":"            models_v2.Subnet.network_id \u003d\u003d models_v2.Port.network_id)"},{"line_number":135,"context_line":"        query \u003d query.filter("},{"line_number":136,"context_line":"            models_v2.Subnet.subnetpool_id \u003d\u003d subnetpool_id,"},{"line_number":137,"context_line":"            l3.RouterPort.port_type.in_(n_const.ROUTER_PORT_OWNERS))"},{"line_number":138,"context_line":"        query \u003d query.distinct()"},{"line_number":139,"context_line":"        return query"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_a5a11e96","line":139,"range":{"start_line":130,"start_character":8,"end_line":139,"end_character":20},"in_reply_to":"1a1ced50_40021d0b","updated":"2017-03-23 02:16:50.000000000","message":"Same here as well.","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"26fc75be1af5a8628fff7cc2e646b1f5913ba73d","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @classmethod"},{"line_number":129,"context_line":"    def get_router_ids(cls, context, subnetpool_id):"},{"line_number":130,"context_line":"        query \u003d context.session.query(l3.RouterPort.router_id)"},{"line_number":131,"context_line":"        query \u003d query.join(models_v2.Port)"},{"line_number":132,"context_line":"        query \u003d query.join("},{"line_number":133,"context_line":"            models_v2.Subnet,"},{"line_number":134,"context_line":"            models_v2.Subnet.network_id \u003d\u003d models_v2.Port.network_id)"},{"line_number":135,"context_line":"        query \u003d query.filter("},{"line_number":136,"context_line":"            models_v2.Subnet.subnetpool_id \u003d\u003d subnetpool_id,"},{"line_number":137,"context_line":"            l3.RouterPort.port_type.in_(n_const.ROUTER_PORT_OWNERS))"},{"line_number":138,"context_line":"        query \u003d query.distinct()"},{"line_number":139,"context_line":"        return query"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@obj_base.VersionedObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":8,"id":"ffe62b97_151aa215","line":139,"range":{"start_line":130,"start_character":8,"end_line":139,"end_character":20},"in_reply_to":"1a1ced50_a5a11e96","updated":"2017-03-29 19:18:06.000000000","message":"This returns a list of router ids, not objects. so cannot use it here.","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    }"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @classmethod"},{"line_number":142,"context_line":"    def get_router_ids(cls, context, subnetpool_id):"},{"line_number":143,"context_line":"        query \u003d context.session.query(l3.RouterPort.router_id)"},{"line_number":144,"context_line":"        query \u003d query.join(models_v2.Port)"},{"line_number":145,"context_line":"        query \u003d query.join("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_a811af06","line":142,"updated":"2017-07-26 16:06:53.000000000","message":"I don\u0027t think we should return an sqlalchemy query here. Instead, return ids, as the name of the method implies.","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    }"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @classmethod"},{"line_number":142,"context_line":"    def get_router_ids(cls, context, subnetpool_id):"},{"line_number":143,"context_line":"        query \u003d context.session.query(l3.RouterPort.router_id)"},{"line_number":144,"context_line":"        query \u003d query.join(models_v2.Port)"},{"line_number":145,"context_line":"        query \u003d query.join("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_2816dff2","line":142,"range":{"start_line":142,"start_character":8,"end_line":142,"end_character":22},"updated":"2017-07-26 16:06:53.000000000","message":"the name of the method doesn\u0027t reflect what it does. Can you maybe change it to: get_router_ids_by_subnetpool?","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    }"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @classmethod"},{"line_number":142,"context_line":"    def get_router_ids(cls, context, subnetpool_id):"},{"line_number":143,"context_line":"        query \u003d context.session.query(l3.RouterPort.router_id)"},{"line_number":144,"context_line":"        query \u003d query.join(models_v2.Port)"},{"line_number":145,"context_line":"        query \u003d query.join("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_45a336b3","line":142,"range":{"start_line":142,"start_character":8,"end_line":142,"end_character":22},"in_reply_to":"ff346bd7_2816dff2","updated":"2017-07-27 02:59:41.000000000","message":"Done","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    }"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @classmethod"},{"line_number":142,"context_line":"    def get_router_ids(cls, context, subnetpool_id):"},{"line_number":143,"context_line":"        query \u003d context.session.query(l3.RouterPort.router_id)"},{"line_number":144,"context_line":"        query \u003d query.join(models_v2.Port)"},{"line_number":145,"context_line":"        query \u003d query.join("}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_25a8328b","line":142,"in_reply_to":"ff346bd7_a811af06","updated":"2017-07-27 02:59:41.000000000","message":"Done","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4b4de35b42c5d032e402efe67d229178e9df934c","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    }"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @classmethod"},{"line_number":142,"context_line":"    def get_router_ids_by_subntepool(cls, context, subnetpool_id):"},{"line_number":143,"context_line":"        query \u003d context.session.query(l3.RouterPort.router_id)"},{"line_number":144,"context_line":"        query \u003d query.join(models_v2.Port)"},{"line_number":145,"context_line":"        query \u003d query.join("}],"source_content_type":"text/x-python","patch_set":18,"id":"ff346bd7_cf696bf9","line":142,"range":{"start_line":142,"start_character":26,"end_line":142,"end_character":37},"updated":"2017-07-27 15:33:12.000000000","message":"subnetpool","commit_id":"617ebccf007df05500c1f4126306aa23003b9a57"}],"neutron/tests/unit/db/test_db_base_plugin_v2.py":[{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"87e360da412baf9400454b10083013fca968e5dd","unresolved":false,"context_lines":[{"line_number":4483,"context_line":"                    self.assertEqual(409, res.status_int)"},{"line_number":4484,"context_line":"                    # should work fine if it\u0027s not a router port"},{"line_number":4485,"context_line":"                    with ctx.session.begin():"},{"line_number":4486,"context_line":"                        rp.delete_objects(ctx)"},{"line_number":4487,"context_line":"                        ctx.session.delete(router)"},{"line_number":4488,"context_line":"                    res \u003d req.get_response(self.api)"},{"line_number":4489,"context_line":"                    self.assertEqual(res.status_int, 200)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_66036774","line":4486,"updated":"2017-02-10 16:20:56.000000000","message":"delete_objects does not need the transaction in line 4485. This can be moved above that.","commit_id":"ccfebb557daac0a64b323d72628f4a8e5b2778a8"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"f430f14a9acf1b3a8a839690604711177d276caf","unresolved":false,"context_lines":[{"line_number":4483,"context_line":"                    self.assertEqual(409, res.status_int)"},{"line_number":4484,"context_line":"                    # should work fine if it\u0027s not a router port"},{"line_number":4485,"context_line":"                    with ctx.session.begin():"},{"line_number":4486,"context_line":"                        rp.delete_objects(ctx)"},{"line_number":4487,"context_line":"                        ctx.session.delete(router)"},{"line_number":4488,"context_line":"                    res \u003d req.get_response(self.api)"},{"line_number":4489,"context_line":"                    self.assertEqual(res.status_int, 200)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da36d5c6_12269216","line":4486,"in_reply_to":"da36d5c6_efbaf56d","updated":"2017-02-17 21:43:40.000000000","message":"Yeah thats why I am not saying to remove it. I am just asking to move line 4486 above line 4485","commit_id":"ccfebb557daac0a64b323d72628f4a8e5b2778a8"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"dee317d905a1f9f8687193b017c5d04bddba81c2","unresolved":false,"context_lines":[{"line_number":4483,"context_line":"                    self.assertEqual(409, res.status_int)"},{"line_number":4484,"context_line":"                    # should work fine if it\u0027s not a router port"},{"line_number":4485,"context_line":"                    with ctx.session.begin():"},{"line_number":4486,"context_line":"                        rp.delete_objects(ctx)"},{"line_number":4487,"context_line":"                        ctx.session.delete(router)"},{"line_number":4488,"context_line":"                    res \u003d req.get_response(self.api)"},{"line_number":4489,"context_line":"                    self.assertEqual(res.status_int, 200)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da36d5c6_efbaf56d","line":4486,"in_reply_to":"fa31d9ce_4ca82bdc","updated":"2017-02-17 21:15:03.000000000","message":"But line 4487 needs it. That\u0027s why its still kept around.","commit_id":"ccfebb557daac0a64b323d72628f4a8e5b2778a8"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"0cff361cb1787a8003ff6436be5fc0d70d919a54","unresolved":false,"context_lines":[{"line_number":4483,"context_line":"                    self.assertEqual(409, res.status_int)"},{"line_number":4484,"context_line":"                    # should work fine if it\u0027s not a router port"},{"line_number":4485,"context_line":"                    with ctx.session.begin():"},{"line_number":4486,"context_line":"                        rp.delete_objects(ctx)"},{"line_number":4487,"context_line":"                        ctx.session.delete(router)"},{"line_number":4488,"context_line":"                    res \u003d req.get_response(self.api)"},{"line_number":4489,"context_line":"                    self.assertEqual(res.status_int, 200)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_b31f71b6","line":4486,"in_reply_to":"fa31d9ce_66036774","updated":"2017-02-16 19:03:42.000000000","message":"sorry I didn\u0027t understand. could you explain why?","commit_id":"ccfebb557daac0a64b323d72628f4a8e5b2778a8"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"395382e4745e70f91dde69297cb3d62f6820ddcd","unresolved":false,"context_lines":[{"line_number":4483,"context_line":"                    self.assertEqual(409, res.status_int)"},{"line_number":4484,"context_line":"                    # should work fine if it\u0027s not a router port"},{"line_number":4485,"context_line":"                    with ctx.session.begin():"},{"line_number":4486,"context_line":"                        rp.delete_objects(ctx)"},{"line_number":4487,"context_line":"                        ctx.session.delete(router)"},{"line_number":4488,"context_line":"                    res \u003d req.get_response(self.api)"},{"line_number":4489,"context_line":"                    self.assertEqual(res.status_int, 200)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa31d9ce_4ca82bdc","line":4486,"in_reply_to":"fa31d9ce_b31f71b6","updated":"2017-02-17 16:45:01.000000000","message":"delete_objects method in base.py has a transaction [1]. That is why this need not be within \"with ctx.session.begin():\"\n\n[1] https://github.com/openstack/neutron/blob/c4a8511260bed939fd6e89e23e97e6f8fbd409f2/neutron/objects/base.py#L457","commit_id":"ccfebb557daac0a64b323d72628f4a8e5b2778a8"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"10419cd1d32ef27523d2f5f55ba7ab13e4b68190","unresolved":false,"context_lines":[{"line_number":4472,"context_line":"                    with ctx.session.begin():"},{"line_number":4473,"context_line":"                        router \u003d l3_models.Router()"},{"line_number":4474,"context_line":"                        ctx.session.add(router)"},{"line_number":4475,"context_line":"                    with ctx.session.begin():"},{"line_number":4476,"context_line":"                        rp \u003d l3_obj.RouterPort(ctx, router_id\u003drouter.id,"},{"line_number":4477,"context_line":"                                               port_id\u003dport[\u0027port\u0027][\u0027id\u0027])"},{"line_number":4478,"context_line":"                        rp.create()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba2be162_8d6710e8","line":4475,"range":{"start_line":4475,"start_character":20,"end_line":4475,"end_character":45},"updated":"2017-03-03 19:08:29.000000000","message":"this is not needed","commit_id":"03111368f01be51f5430f0ce3f4591800ceddeeb"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"1e32531085594419576b4798e9ea227ce63b35a2","unresolved":false,"context_lines":[{"line_number":4472,"context_line":"                    with ctx.session.begin():"},{"line_number":4473,"context_line":"                        router \u003d l3_models.Router()"},{"line_number":4474,"context_line":"                        ctx.session.add(router)"},{"line_number":4475,"context_line":"                    with ctx.session.begin():"},{"line_number":4476,"context_line":"                        rp \u003d l3_obj.RouterPort(ctx, router_id\u003drouter.id,"},{"line_number":4477,"context_line":"                                               port_id\u003dport[\u0027port\u0027][\u0027id\u0027])"},{"line_number":4478,"context_line":"                        rp.create()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a25e98e_efd591b9","line":4475,"range":{"start_line":4475,"start_character":20,"end_line":4475,"end_character":45},"in_reply_to":"ba2be162_8d6710e8","updated":"2017-03-13 19:21:23.000000000","message":"Done","commit_id":"03111368f01be51f5430f0ce3f4591800ceddeeb"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"860f9ab767fede8ba43a54eb408afe65ca19d62a","unresolved":false,"context_lines":[{"line_number":4503,"context_line":"                    self.assertEqual(409, res.status_int)"},{"line_number":4504,"context_line":"                    # should work fine if it\u0027s not a router port"},{"line_number":4505,"context_line":"                    with ctx.session.begin():"},{"line_number":4506,"context_line":"                        rp.delete_objects(ctx)"},{"line_number":4507,"context_line":"                        ctx.session.delete(router)"},{"line_number":4508,"context_line":"                    res \u003d req.get_response(self.api)"},{"line_number":4509,"context_line":"                    self.assertEqual(res.status_int, 200)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_e5beb6ac","line":4506,"updated":"2017-03-23 02:16:50.000000000","message":"Can this come out of the ctx.session.begin()?","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"26fc75be1af5a8628fff7cc2e646b1f5913ba73d","unresolved":false,"context_lines":[{"line_number":4503,"context_line":"                    self.assertEqual(409, res.status_int)"},{"line_number":4504,"context_line":"                    # should work fine if it\u0027s not a router port"},{"line_number":4505,"context_line":"                    with ctx.session.begin():"},{"line_number":4506,"context_line":"                        rp.delete_objects(ctx)"},{"line_number":4507,"context_line":"                        ctx.session.delete(router)"},{"line_number":4508,"context_line":"                    res \u003d req.get_response(self.api)"},{"line_number":4509,"context_line":"                    self.assertEqual(res.status_int, 200)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ffe62b97_f5705e42","line":4506,"in_reply_to":"1a1ced50_e5beb6ac","updated":"2017-03-29 19:18:06.000000000","message":"could you explain why?","commit_id":"bedff8485ca68567ff0b90f8fa471fe0829442d2"}],"neutron/tests/unit/plugins/ml2/test_plugin.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bd5983d47f7ec8cb6433f86d65c036ea90f7420a","unresolved":false,"context_lines":[{"line_number":1445,"context_line":""},{"line_number":1446,"context_line":"        # lie to turn the port into an SNAT interface"},{"line_number":1447,"context_line":"        with self.context.session.begin():"},{"line_number":1448,"context_line":"            rp \u003d l3_obj.RouterPort.get_objects("},{"line_number":1449,"context_line":"                self.context, port_id\u003dp[\u0027port_id\u0027])"},{"line_number":1450,"context_line":"            rp[0].port_type \u003d constants.DEVICE_OWNER_ROUTER_SNAT"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"        # take the port away before csnat gets a chance to delete it"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_c86912fb","line":1449,"range":{"start_line":1448,"start_character":12,"end_line":1449,"end_character":51},"updated":"2017-02-07 21:41:31.000000000","message":"you can use the pager to restrict the number of objects to 1","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"707f7704d5d3801b8449ab88b0f14dcadd78dc2d","unresolved":false,"context_lines":[{"line_number":1445,"context_line":""},{"line_number":1446,"context_line":"        # lie to turn the port into an SNAT interface"},{"line_number":1447,"context_line":"        with self.context.session.begin():"},{"line_number":1448,"context_line":"            rp \u003d l3_obj.RouterPort.get_objects("},{"line_number":1449,"context_line":"                self.context, port_id\u003dp[\u0027port_id\u0027])"},{"line_number":1450,"context_line":"            rp[0].port_type \u003d constants.DEVICE_OWNER_ROUTER_SNAT"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"        # take the port away before csnat gets a chance to delete it"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_54d030c9","line":1449,"range":{"start_line":1448,"start_character":12,"end_line":1449,"end_character":51},"in_reply_to":"1a430d35_c86912fb","updated":"2017-02-08 17:24:23.000000000","message":"Done","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"bd5983d47f7ec8cb6433f86d65c036ea90f7420a","unresolved":false,"context_lines":[{"line_number":1447,"context_line":"        with self.context.session.begin():"},{"line_number":1448,"context_line":"            rp \u003d l3_obj.RouterPort.get_objects("},{"line_number":1449,"context_line":"                self.context, port_id\u003dp[\u0027port_id\u0027])"},{"line_number":1450,"context_line":"            rp[0].port_type \u003d constants.DEVICE_OWNER_ROUTER_SNAT"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"        # take the port away before csnat gets a chance to delete it"},{"line_number":1453,"context_line":"        # to simulate a concurrent delete"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_487602d8","line":1450,"range":{"start_line":1450,"start_character":12,"end_line":1450,"end_character":64},"updated":"2017-02-07 21:41:31.000000000","message":"I\u0027m not sure if you have to manually call the update method after this point","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"da4846db26b907a21d57241903d631b23d7eace1","unresolved":false,"context_lines":[{"line_number":1447,"context_line":"        with self.context.session.begin():"},{"line_number":1448,"context_line":"            rp \u003d l3_obj.RouterPort.get_objects("},{"line_number":1449,"context_line":"                self.context, port_id\u003dp[\u0027port_id\u0027])"},{"line_number":1450,"context_line":"            rp[0].port_type \u003d constants.DEVICE_OWNER_ROUTER_SNAT"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"        # take the port away before csnat gets a chance to delete it"},{"line_number":1453,"context_line":"        # to simulate a concurrent delete"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_9a10d1ad","line":1450,"range":{"start_line":1450,"start_character":12,"end_line":1450,"end_character":64},"in_reply_to":"1a430d35_34500432","updated":"2017-02-09 16:03:18.000000000","message":"I was thinking about adding the instruction to force the update in the line 1451, something like\n\n    rp[0].update()\n\nBut it seems like this change doesn\u0027t have to be reflected in the DB","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"707f7704d5d3801b8449ab88b0f14dcadd78dc2d","unresolved":false,"context_lines":[{"line_number":1447,"context_line":"        with self.context.session.begin():"},{"line_number":1448,"context_line":"            rp \u003d l3_obj.RouterPort.get_objects("},{"line_number":1449,"context_line":"                self.context, port_id\u003dp[\u0027port_id\u0027])"},{"line_number":1450,"context_line":"            rp[0].port_type \u003d constants.DEVICE_OWNER_ROUTER_SNAT"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"        # take the port away before csnat gets a chance to delete it"},{"line_number":1453,"context_line":"        # to simulate a concurrent delete"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_34500432","line":1450,"range":{"start_line":1450,"start_character":12,"end_line":1450,"end_character":64},"in_reply_to":"1a430d35_487602d8","updated":"2017-02-08 17:24:23.000000000","message":"Sorry, I didn\u0027t follow. could you explain more.","commit_id":"eb79c8faefd2bbee8fbd166b7286cf633e828894"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bf4652dfe3be08502f8c49fae8793791372f09e8","unresolved":false,"context_lines":[{"line_number":1500,"context_line":"            pager \u003d base_obj.Pager(limit\u003d1)"},{"line_number":1501,"context_line":"            rp \u003d l3_obj.RouterPort.get_objects("},{"line_number":1502,"context_line":"                self.context, _pager\u003dpager, port_id\u003dp[\u0027port_id\u0027])"},{"line_number":1503,"context_line":"            rp[0].port_type \u003d constants.DEVICE_OWNER_ROUTER_SNAT"},{"line_number":1504,"context_line":""},{"line_number":1505,"context_line":"        # take the port away before csnat gets a chance to delete it"},{"line_number":1506,"context_line":"        # to simulate a concurrent delete"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_5ce205a2","line":1503,"updated":"2017-07-26 16:06:53.000000000","message":"this change won\u0027t be persisted. you will need to call .update() to make it work as expected.","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"1263aa3296d264583d1b1c30ad34ddbd6f0b9641","unresolved":false,"context_lines":[{"line_number":1500,"context_line":"            pager \u003d base_obj.Pager(limit\u003d1)"},{"line_number":1501,"context_line":"            rp \u003d l3_obj.RouterPort.get_objects("},{"line_number":1502,"context_line":"                self.context, _pager\u003dpager, port_id\u003dp[\u0027port_id\u0027])"},{"line_number":1503,"context_line":"            rp[0].port_type \u003d constants.DEVICE_OWNER_ROUTER_SNAT"},{"line_number":1504,"context_line":""},{"line_number":1505,"context_line":"        # take the port away before csnat gets a chance to delete it"},{"line_number":1506,"context_line":"        # to simulate a concurrent delete"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_654abaac","line":1503,"in_reply_to":"ff346bd7_5ce205a2","updated":"2017-07-27 02:59:41.000000000","message":"Done","commit_id":"59117454befc56d21148bd8c1dffb924a7e4a24b"}]}
