)]}'
{"neutron/db/migration/alembic_migrations/versions/86d6d9776e2b_cisco_apic_driver_update_l3.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"347bfb9a0473c2c94d9dabe28ebd57fefa95cd0e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        sa.Column(\u0027network_id\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":52,"context_line":"        sa.Column(\u0027epg_id\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":53,"context_line":"        sa.Column(\u0027segmentation_id\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":54,"context_line":"        sa.Column(\u0027provider\u0027, sa.Boolean(), default\u003dFalse, nullable\u003dFalse),"},{"line_number":55,"context_line":"        sa.PrimaryKeyConstraint(\u0027network_id\u0027))"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    op.create_table("}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_3d8785b6","line":54,"updated":"2014-08-22 09:48:27.000000000","message":"\u0027default\u0027 has no meaning in migration. Use server_default\u003dsa.sql.false().","commit_id":"dc189fb6581e081cd7af20886e09c375e8cbcc52"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"d4d018b96f745098a90a9af1384de6e5f72d52e0","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        sa.Column(\u0027network_id\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":52,"context_line":"        sa.Column(\u0027epg_id\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":53,"context_line":"        sa.Column(\u0027segmentation_id\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":54,"context_line":"        sa.Column(\u0027provider\u0027, sa.Boolean(), default\u003dFalse, nullable\u003dFalse),"},{"line_number":55,"context_line":"        sa.PrimaryKeyConstraint(\u0027network_id\u0027))"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    op.create_table("}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_2f19fd21","line":54,"in_reply_to":"1abeadc6_3d8785b6","updated":"2014-08-22 17:13:31.000000000","message":"Done","commit_id":"dc189fb6581e081cd7af20886e09c375e8cbcc52"}],"neutron/plugins/ml2/drivers/cisco/apic/apic_model.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"7efad03d895bce033b153b52501ffeb9682f2e39","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    __tablename__ \u003d \u0027cisco_ml2_apic_contracts\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    router_id \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class HostLink(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_2d006500","line":38,"updated":"2014-08-28 13:13:50.000000000","message":"No FK to routers?","commit_id":"06ba922755f274248cb7f8150aacc4fc0eb46636"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"a3e654707eee204dcdeb9a4c3f9eec5efb1f00fe","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    __tablename__ \u003d \u0027cisco_ml2_apic_contracts\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    router_id \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class HostLink(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_baf57c84","line":38,"in_reply_to":"1abeadc6_2d006500","updated":"2014-08-28 17:54:04.000000000","message":"Done","commit_id":"06ba922755f274248cb7f8150aacc4fc0eb46636"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"7efad03d895bce033b153b52501ffeb9682f2e39","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                                  router_id\u003drouter_id)"},{"line_number":81,"context_line":"        with self.session.begin(subtransactions\u003dTrue):"},{"line_number":82,"context_line":"            self.session.add(contract)"},{"line_number":83,"context_line":"            self.session.flush()"},{"line_number":84,"context_line":"        return contract"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def update_contract_for_router(self, tenant_id, router_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_6d1dfd61","line":83,"updated":"2014-08-28 13:13:50.000000000","message":"no need to flush()","commit_id":"06ba922755f274248cb7f8150aacc4fc0eb46636"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"a3e654707eee204dcdeb9a4c3f9eec5efb1f00fe","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                                  router_id\u003drouter_id)"},{"line_number":81,"context_line":"        with self.session.begin(subtransactions\u003dTrue):"},{"line_number":82,"context_line":"            self.session.add(contract)"},{"line_number":83,"context_line":"            self.session.flush()"},{"line_number":84,"context_line":"        return contract"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def update_contract_for_router(self, tenant_id, router_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_7a004466","line":83,"in_reply_to":"1abeadc6_6d1dfd61","updated":"2014-08-28 17:54:04.000000000","message":"Done","commit_id":"06ba922755f274248cb7f8150aacc4fc0eb46636"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"7efad03d895bce033b153b52501ffeb9682f2e39","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            if contract:"},{"line_number":92,"context_line":"                contract.tenant_id \u003d tenant_id"},{"line_number":93,"context_line":"                self.session.merge(contract)"},{"line_number":94,"context_line":"                self.session.flush()"},{"line_number":95,"context_line":"            else:"},{"line_number":96,"context_line":"                self.write_contract_for_router(tenant_id, router_id)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_2d4ea56f","line":94,"updated":"2014-08-28 13:13:50.000000000","message":"same as above: since flush is done in the __exit__ block of with statement","commit_id":"06ba922755f274248cb7f8150aacc4fc0eb46636"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"a3e654707eee204dcdeb9a4c3f9eec5efb1f00fe","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            if contract:"},{"line_number":92,"context_line":"                contract.tenant_id \u003d tenant_id"},{"line_number":93,"context_line":"                self.session.merge(contract)"},{"line_number":94,"context_line":"                self.session.flush()"},{"line_number":95,"context_line":"            else:"},{"line_number":96,"context_line":"                self.write_contract_for_router(tenant_id, router_id)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_5afb887a","line":94,"in_reply_to":"1abeadc6_2d4ea56f","updated":"2014-08-28 17:54:04.000000000","message":"Done","commit_id":"06ba922755f274248cb7f8150aacc4fc0eb46636"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"7efad03d895bce033b153b52501ffeb9682f2e39","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                router_id\u003drouter_id).first()"},{"line_number":103,"context_line":"            if contract:"},{"line_number":104,"context_line":"                self.session.delete(contract)"},{"line_number":105,"context_line":"                self.session.flush()"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def add_hostlink(self, host, ifname, ifmac, swid, module, port):"},{"line_number":108,"context_line":"        row \u003d HostLink(host\u003dhost, ifname\u003difname, ifmac\u003difmac,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_4d53e116","line":105,"updated":"2014-08-28 13:13:50.000000000","message":"same","commit_id":"06ba922755f274248cb7f8150aacc4fc0eb46636"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"a3e654707eee204dcdeb9a4c3f9eec5efb1f00fe","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                router_id\u003drouter_id).first()"},{"line_number":103,"context_line":"            if contract:"},{"line_number":104,"context_line":"                self.session.delete(contract)"},{"line_number":105,"context_line":"                self.session.flush()"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def add_hostlink(self, host, ifname, ifmac, swid, module, port):"},{"line_number":108,"context_line":"        row \u003d HostLink(host\u003dhost, ifname\u003difname, ifmac\u003difmac,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_9af8c07d","line":105,"in_reply_to":"1abeadc6_4d53e116","updated":"2014-08-28 17:54:04.000000000","message":"Done","commit_id":"06ba922755f274248cb7f8150aacc4fc0eb46636"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"4bb8b0a63b930944d013ec4b90d0c164699ac69e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                         nullable\u003dFalse)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class TenantContract(model_base.BASEV2):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\"Contracts (and Filters) created on the APIC.\"\"\""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_35685af5","side":"PARENT","line":42,"updated":"2014-08-30 20:31:58.000000000","message":"so we dont need this and the following any more?","commit_id":"9660177d485b8d28f2839358320eb2b407ca3b48"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"152f8a0dbcd49403258daf879af870a9399dccd6","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                         nullable\u003dFalse)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class TenantContract(model_base.BASEV2):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\"Contracts (and Filters) created on the APIC.\"\"\""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_3b04cb14","side":"PARENT","line":42,"in_reply_to":"fa98f980_35685af5","updated":"2014-08-30 22:28:24.000000000","message":"Nope, This model was defining 1 contract per tenant (1:1), while with the new approach one contract per router is defined.","commit_id":"9660177d485b8d28f2839358320eb2b407ca3b48"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"4bb8b0a63b930944d013ec4b90d0c164699ac69e","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                router_id\u003drouter_id).first()"},{"line_number":93,"context_line":"            if contract:"},{"line_number":94,"context_line":"                contract.tenant_id \u003d tenant_id"},{"line_number":95,"context_line":"                self.session.merge(contract)"},{"line_number":96,"context_line":"            else:"},{"line_number":97,"context_line":"                self.write_contract_for_router(tenant_id, router_id)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_f5a6d252","line":95,"updated":"2014-08-30 20:31:58.000000000","message":"will this throw an exception if the contract gets deleted in another thread of execution?","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"152f8a0dbcd49403258daf879af870a9399dccd6","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                router_id\u003drouter_id).first()"},{"line_number":93,"context_line":"            if contract:"},{"line_number":94,"context_line":"                contract.tenant_id \u003d tenant_id"},{"line_number":95,"context_line":"                self.session.merge(contract)"},{"line_number":96,"context_line":"            else:"},{"line_number":97,"context_line":"                self.write_contract_for_router(tenant_id, router_id)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_7b0e5336","line":95,"in_reply_to":"fa98f980_f5a6d252","updated":"2014-08-30 22:28:24.000000000","message":"Not sure if this can happen being in a subtransaction, should I define some kind of lock level for this?","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"4bb8b0a63b930944d013ec4b90d0c164699ac69e","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            contract \u003d self.session.query(RouterContract).filter_by("},{"line_number":103,"context_line":"                router_id\u003drouter_id).first()"},{"line_number":104,"context_line":"            if contract:"},{"line_number":105,"context_line":"                self.session.delete(contract)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def add_hostlink(self, host, ifname, ifmac, swid, module, port):"},{"line_number":108,"context_line":"        link \u003d HostLink(host\u003dhost, ifname\u003difname, ifmac\u003difmac,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_95dae6e7","line":105,"updated":"2014-08-30 20:31:58.000000000","message":"per the previous patch, its probably better to this in one shot","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"152f8a0dbcd49403258daf879af870a9399dccd6","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            contract \u003d self.session.query(RouterContract).filter_by("},{"line_number":103,"context_line":"                router_id\u003drouter_id).first()"},{"line_number":104,"context_line":"            if contract:"},{"line_number":105,"context_line":"                self.session.delete(contract)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def add_hostlink(self, host, ifname, ifmac, swid, module, port):"},{"line_number":108,"context_line":"        link \u003d HostLink(host\u003dhost, ifname\u003difname, ifmac\u003difmac,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_9b121757","line":105,"in_reply_to":"fa98f980_95dae6e7","updated":"2014-08-30 22:28:24.000000000","message":"Done","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"}],"neutron/services/l3_router/l3_apic.py":[{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"394a40a125b2b2e967be828bda5a2a158fe91799","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from neutron.db import l3_dvr_db"},{"line_number":24,"context_line":"from neutron.openstack.common import excutils"},{"line_number":25,"context_line":"from neutron.plugins.common import constants"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from neutron.plugins.ml2.drivers.cisco.apic import mechanism_apic"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_af7cc973","line":26,"updated":"2014-08-26 13:33:38.000000000","message":"nit: remove empty line","commit_id":"c0ebd1437bf89815cc5ef5a5e85e1f22325aff3f"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"1ed88c5317d6390509d1ab244c155d1c452b26ac","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from neutron.db import l3_dvr_db"},{"line_number":24,"context_line":"from neutron.openstack.common import excutils"},{"line_number":25,"context_line":"from neutron.plugins.common import constants"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from neutron.plugins.ml2.drivers.cisco.apic import mechanism_apic"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_2e2192fc","line":26,"in_reply_to":"1abeadc6_af7cc973","updated":"2014-08-26 17:30:52.000000000","message":"good catch, fix on next rebase","commit_id":"c0ebd1437bf89815cc5ef5a5e85e1f22325aff3f"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"4bb8b0a63b930944d013ec4b90d0c164699ac69e","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @staticmethod"},{"line_number":57,"context_line":"    def get_plugin_description():"},{"line_number":58,"context_line":"        \"\"\"returns string description of the plugin.\"\"\""},{"line_number":59,"context_line":"        return _(\"L3 Router Service Plugin for basic L3 using the APIC\")"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def add_router_interface_postcommit(self, context, router_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_7572e2e6","line":58,"updated":"2014-08-30 20:31:58.000000000","message":"nit: but why this change?","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"152f8a0dbcd49403258daf879af870a9399dccd6","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @staticmethod"},{"line_number":57,"context_line":"    def get_plugin_description():"},{"line_number":58,"context_line":"        \"\"\"returns string description of the plugin.\"\"\""},{"line_number":59,"context_line":"        return _(\"L3 Router Service Plugin for basic L3 using the APIC\")"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def add_router_interface_postcommit(self, context, router_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_bb0fdb2d","line":58,"in_reply_to":"fa98f980_7572e2e6","updated":"2014-08-30 22:28:24.000000000","message":"Not sure :D, reverting","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"4bb8b0a63b930944d013ec4b90d0c164699ac69e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\"returns string description of the plugin.\"\"\""},{"line_number":59,"context_line":"        return _(\"L3 Router Service Plugin for basic L3 using the APIC\")"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def add_router_interface_postcommit(self, context, router_id,"},{"line_number":62,"context_line":"                                        interface_info):"},{"line_number":63,"context_line":"        # Create router / update its state first"},{"line_number":64,"context_line":"        router \u003d self.get_router(context, router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_18e9cd1a","line":61,"updated":"2014-08-30 20:31:58.000000000","message":"are all the *pre/post* methods only being accessed from this module? if so might be better to prefix with \u0027_\u0027.","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"152f8a0dbcd49403258daf879af870a9399dccd6","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\"returns string description of the plugin.\"\"\""},{"line_number":59,"context_line":"        return _(\"L3 Router Service Plugin for basic L3 using the APIC\")"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def add_router_interface_postcommit(self, context, router_id,"},{"line_number":62,"context_line":"                                        interface_info):"},{"line_number":63,"context_line":"        # Create router / update its state first"},{"line_number":64,"context_line":"        router \u003d self.get_router(context, router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_db1c9f6d","line":61,"in_reply_to":"fa98f980_18e9cd1a","updated":"2014-08-30 22:28:24.000000000","message":"Synchronization module on the next patch in this series is accessing it","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"4bb8b0a63b930944d013ec4b90d0c164699ac69e","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def add_router_interface_postcommit(self, context, router_id,"},{"line_number":62,"context_line":"                                        interface_info):"},{"line_number":63,"context_line":"        # Create router / update its state first"},{"line_number":64,"context_line":"        router \u003d self.get_router(context, router_id)"},{"line_number":65,"context_line":"        self.update_router_postcommit(context, router)"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_154a7683","line":63,"updated":"2014-08-30 20:31:58.000000000","message":"this doc string does not seem to be in the right format, or may be there is one missing","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"152f8a0dbcd49403258daf879af870a9399dccd6","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def add_router_interface_postcommit(self, context, router_id,"},{"line_number":62,"context_line":"                                        interface_info):"},{"line_number":63,"context_line":"        # Create router / update its state first"},{"line_number":64,"context_line":"        router \u003d self.get_router(context, router_id)"},{"line_number":65,"context_line":"        self.update_router_postcommit(context, router)"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_fb19637a","line":63,"in_reply_to":"fa98f980_154a7683","updated":"2014-08-30 22:28:24.000000000","message":"Done","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"4bb8b0a63b930944d013ec4b90d0c164699ac69e","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def get_routers_count(self, *args, **kwargs):"},{"line_number":139,"context_line":"        return super(ApicL3ServicePlugin, self).get_routers_count(*args,"},{"line_number":140,"context_line":"                                                                  **kwargs)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def delete_router(self, context, router_id):"},{"line_number":143,"context_line":"        self.delete_router_precommit(context, router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_78f819e6","line":140,"updated":"2014-08-30 20:31:58.000000000","message":"do you need to override the above three get methods here?","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"152f8a0dbcd49403258daf879af870a9399dccd6","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def get_routers_count(self, *args, **kwargs):"},{"line_number":139,"context_line":"        return super(ApicL3ServicePlugin, self).get_routers_count(*args,"},{"line_number":140,"context_line":"                                                                  **kwargs)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def delete_router(self, context, router_id):"},{"line_number":143,"context_line":"        self.delete_router_precommit(context, router_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_5b20af9b","line":140,"in_reply_to":"fa98f980_78f819e6","updated":"2014-08-30 22:28:24.000000000","message":"Nope, they are needed in the next patch, they were left behind after the split :)","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"}],"neutron/tests/unit/services/l3_router/test_l3_apic_plugin.py":[{"author":{"_account_id":9380,"name":"Sayaji Patil","email":"sayaji15@gmail.com","username":"Sayaji"},"change_message_id":"cf2fe78f1aa926d5e4f87cfaa4b4a8a9c8be7f17","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        mgr.create_router.assert_called_once_with(mocked.APIC_ROUTER,"},{"line_number":117,"context_line":"                                                  transaction\u003d\u0027transaction\u0027)"},{"line_number":118,"context_line":"        mgr.add_router_interface.assert_called_once_with("},{"line_number":119,"context_line":"            mocked.APIC_TENANT, mocked.APIC_ROUTER, mocked.APIC_NETWORK)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _test_remove_router_interface(self, interface_info):"},{"line_number":122,"context_line":"        mgr \u003d self.plugin.manager"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_35e21ad6","line":119,"updated":"2014-08-30 18:58:28.000000000","message":"Don\u0027t you have to delete the router interface as part of the cleanup ?","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"1a2fcb40cec514f15fc9b773097e18e59ee2ff1e","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        mgr.create_router.assert_called_once_with(mocked.APIC_ROUTER,"},{"line_number":117,"context_line":"                                                  transaction\u003d\u0027transaction\u0027)"},{"line_number":118,"context_line":"        mgr.add_router_interface.assert_called_once_with("},{"line_number":119,"context_line":"            mocked.APIC_TENANT, mocked.APIC_ROUTER, mocked.APIC_NETWORK)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _test_remove_router_interface(self, interface_info):"},{"line_number":122,"context_line":"        mgr \u003d self.plugin.manager"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_75a4a257","line":119,"in_reply_to":"fa98f980_35e21ad6","updated":"2014-08-30 19:36:47.000000000","message":"The interface is not really created. As you can see in L106-107, the DB operation is mocked (and tested by its own unit test).","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"},{"author":{"_account_id":9380,"name":"Sayaji Patil","email":"sayaji15@gmail.com","username":"Sayaji"},"change_message_id":"54fd7e9415d454d40e5919540d0b46709bd6a6a9","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        mgr.create_router.assert_called_once_with(mocked.APIC_ROUTER,"},{"line_number":117,"context_line":"                                                  transaction\u003d\u0027transaction\u0027)"},{"line_number":118,"context_line":"        mgr.add_router_interface.assert_called_once_with("},{"line_number":119,"context_line":"            mocked.APIC_TENANT, mocked.APIC_ROUTER, mocked.APIC_NETWORK)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _test_remove_router_interface(self, interface_info):"},{"line_number":122,"context_line":"        mgr \u003d self.plugin.manager"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_78aad9d5","line":119,"in_reply_to":"fa98f980_75a4a257","updated":"2014-08-30 20:13:22.000000000","message":"Got it. Thanks Ivar","commit_id":"bbb0cd607aca8434356e62759fe5cccfce6c0aee"}]}
