)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"457c5732d398353f0bcd646bada893e722db5871","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Swaminathan Vasudevan \u003cswaminathan.vasudevan@hp.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-06 19:14:19 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"DVR:Refactor _notify_l3_agent_new_port for proper arp update"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now with notifications coming from ml2 plugin on port create"},{"line_number":10,"context_line":"and port update, it is worth refactoring the existing _notify_"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a740942_1d7de6b0","line":7,"updated":"2015-12-07 21:09:20.000000000","message":"Maybe refactor isn\u0027t the right term.  In my mind, a refactor is a structural change to the code that doesn\u0027t affect the externally visible behavior.  This sounds like it changes the behavior.","commit_id":"6be5277da3cd96c21a51d7515796b123ab886be9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bb8cbf4e9cb71a7244b85768015f5fa3dd0175d7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Swaminathan Vasudevan \u003cswaminathan.vasudevan@hp.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-06 19:14:19 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"DVR:Refactor _notify_l3_agent_new_port for proper arp update"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now with notifications coming from ml2 plugin on port create"},{"line_number":10,"context_line":"and port update, it is worth refactoring the existing _notify_"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a740942_41a4ab06","line":7,"in_reply_to":"7a740942_1d7de6b0","updated":"2015-12-08 18:47:08.000000000","message":"Done","commit_id":"6be5277da3cd96c21a51d7515796b123ab886be9"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ada9e80183b45e5d2dc314ba6e501fbf639a0e27","unresolved":false,"context_lines":[{"line_number":23,"context_line":"then we go ahead and reschedule the router on the new host and"},{"line_number":24,"context_line":"flush the arp entry."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Related-Bug: #1521524"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ifda623d5413b72bf80f38fba5c12a05a88bb7de5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a740942_df4c5a44","line":26,"updated":"2015-12-07 09:21:37.000000000","message":"Not sure exactly how is it related, can you please file a separate bug describing the problem?","commit_id":"6be5277da3cd96c21a51d7515796b123ab886be9"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"457c5732d398353f0bcd646bada893e722db5871","unresolved":false,"context_lines":[{"line_number":23,"context_line":"then we go ahead and reschedule the router on the new host and"},{"line_number":24,"context_line":"flush the arp entry."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Related-Bug: #1521524"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ifda623d5413b72bf80f38fba5c12a05a88bb7de5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a740942_d80c4cef","line":26,"in_reply_to":"7a740942_75076c18","updated":"2015-12-07 21:09:20.000000000","message":"I agree that a new bug should be filed.  We need to know the nature of the bug this addresses.  Also, this bug will have been closed by the time this patch merges.","commit_id":"6be5277da3cd96c21a51d7515796b123ab886be9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bb8cbf4e9cb71a7244b85768015f5fa3dd0175d7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"then we go ahead and reschedule the router on the new host and"},{"line_number":24,"context_line":"flush the arp entry."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Related-Bug: #1521524"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ifda623d5413b72bf80f38fba5c12a05a88bb7de5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a740942_01b30351","line":26,"in_reply_to":"7a740942_d80c4cef","updated":"2015-12-08 18:47:08.000000000","message":"Done","commit_id":"6be5277da3cd96c21a51d7515796b123ab886be9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"19aed7f7731d3f9d4bfda5cf8676f78b1fe403cd","unresolved":false,"context_lines":[{"line_number":23,"context_line":"then we go ahead and reschedule the router on the new host and"},{"line_number":24,"context_line":"flush the arp entry."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Related-Bug: #1521524"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ifda623d5413b72bf80f38fba5c12a05a88bb7de5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a740942_75076c18","line":26,"in_reply_to":"7a740942_df4c5a44","updated":"2015-12-07 16:54:45.000000000","message":"I still think this change is related to the fix that is being taken care by 1521524. \nPreviously we never used to send a \"port\" during a create operation and so we have been using the \"_notify_l3_agent_new_port\" creation just for all updates.\nNow with your patch, we will be getting valid port information for the \"_notify_l3_agent_new_port\"  and based on that we can now decide what action should be taken for new_port create and for update.\n\nPlease let me know if you still think that I need a separate bug for this.","commit_id":"6be5277da3cd96c21a51d7515796b123ab886be9"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"393bc2846418bcbf1881fc7e425ce98ac24386c2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"host binding with respect to the new port, then we go ahead and"},{"line_number":22,"context_line":"reschedule the router on the new host and flush the arp entry."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Related-Bug: #1524020"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Ifda623d5413b72bf80f38fba5c12a05a88bb7de5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a740942_177face0","line":24,"updated":"2015-12-09 07:52:00.000000000","message":"Closes?","commit_id":"a14be4e1e40b5eb9d75cdd99a6402468c53c8654"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"0b3701b66c0d82e150ebc9e8c7b706dc8c89acf2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"host binding with respect to the new port, then we go ahead and"},{"line_number":22,"context_line":"reschedule the router on the new host and flush the arp entry."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Related-Bug: #1524020"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Ifda623d5413b72bf80f38fba5c12a05a88bb7de5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a740942_eb7f7b64","line":24,"in_reply_to":"7a740942_177face0","updated":"2015-12-09 17:08:41.000000000","message":"will fix it.","commit_id":"a14be4e1e40b5eb9d75cdd99a6402468c53c8654"}],"neutron/db/l3_dvrscheduler_db.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ada9e80183b45e5d2dc314ba6e501fbf639a0e27","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        original_device_owner \u003d original_port.get(\u0027device_owner\u0027, \u0027\u0027)"},{"line_number":492,"context_line":"        # Check if the there two different host bindings, if so flag"},{"line_number":493,"context_line":"        # it for notify_l3_agent_new_port."},{"line_number":494,"context_line":"        if new_port[\u0027binding:host_id\u0027] !\u003d original_port[\u0027binding:host_id\u0027]:"},{"line_number":495,"context_line":"            call_notify_l3_agent_new_port \u003d True"},{"line_number":496,"context_line":"        if (original_device_owner.startswith(\u0027compute\u0027) and"},{"line_number":497,"context_line":"            not new_port.get(\u0027device_owner\u0027)):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_ff1cb614","line":494,"updated":"2015-12-07 09:21:37.000000000","message":"this overlaps with https://review.openstack.org/238478","commit_id":"6be5277da3cd96c21a51d7515796b123ab886be9"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"308bac90615847286cfbead9f6ba634b638363a7","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        original_device_owner \u003d original_port.get(\u0027device_owner\u0027, \u0027\u0027)"},{"line_number":492,"context_line":"        # Check if the there two different host bindings, if so flag"},{"line_number":493,"context_line":"        # it for notify_l3_agent_new_port."},{"line_number":494,"context_line":"        if new_port[\u0027binding:host_id\u0027] !\u003d original_port[\u0027binding:host_id\u0027]:"},{"line_number":495,"context_line":"            call_notify_l3_agent_new_port \u003d True"},{"line_number":496,"context_line":"        if (original_device_owner.startswith(\u0027compute\u0027) and"},{"line_number":497,"context_line":"            not new_port.get(\u0027device_owner\u0027)):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_ea711577","line":494,"in_reply_to":"7a740942_1547084c","updated":"2015-12-08 08:29:24.000000000","message":"Now you can base this one on https://review.openstack.org/238478","commit_id":"6be5277da3cd96c21a51d7515796b123ab886be9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bb8cbf4e9cb71a7244b85768015f5fa3dd0175d7","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        original_device_owner \u003d original_port.get(\u0027device_owner\u0027, \u0027\u0027)"},{"line_number":492,"context_line":"        # Check if the there two different host bindings, if so flag"},{"line_number":493,"context_line":"        # it for notify_l3_agent_new_port."},{"line_number":494,"context_line":"        if new_port[\u0027binding:host_id\u0027] !\u003d original_port[\u0027binding:host_id\u0027]:"},{"line_number":495,"context_line":"            call_notify_l3_agent_new_port \u003d True"},{"line_number":496,"context_line":"        if (original_device_owner.startswith(\u0027compute\u0027) and"},{"line_number":497,"context_line":"            not new_port.get(\u0027device_owner\u0027)):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_617e876b","line":494,"in_reply_to":"7a740942_ea711577","updated":"2015-12-08 18:47:08.000000000","message":"Done","commit_id":"6be5277da3cd96c21a51d7515796b123ab886be9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"19aed7f7731d3f9d4bfda5cf8676f78b1fe403cd","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        original_device_owner \u003d original_port.get(\u0027device_owner\u0027, \u0027\u0027)"},{"line_number":492,"context_line":"        # Check if the there two different host bindings, if so flag"},{"line_number":493,"context_line":"        # it for notify_l3_agent_new_port."},{"line_number":494,"context_line":"        if new_port[\u0027binding:host_id\u0027] !\u003d original_port[\u0027binding:host_id\u0027]:"},{"line_number":495,"context_line":"            call_notify_l3_agent_new_port \u003d True"},{"line_number":496,"context_line":"        if (original_device_owner.startswith(\u0027compute\u0027) and"},{"line_number":497,"context_line":"            not new_port.get(\u0027device_owner\u0027)):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_1547084c","line":494,"in_reply_to":"7a740942_ff1cb614","updated":"2015-12-07 16:54:45.000000000","message":"I knew that, it might be better if we can push this patch after yours, so that I can adjust accordingly.","commit_id":"6be5277da3cd96c21a51d7515796b123ab886be9"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"393bc2846418bcbf1881fc7e425ce98ac24386c2","unresolved":false,"context_lines":[{"line_number":515,"context_line":"                return"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    if call_notify_l3_agent_new_port or mac_address_updated:"},{"line_number":518,"context_line":"        _notify_l3_agent_new_port("},{"line_number":519,"context_line":"            resource, event, trigger, **kwargs)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_c28160c4","line":518,"updated":"2015-12-09 07:52:00.000000000","message":"please refactor to not call _notify_l3_agent_new_port from _notify_l3_agent_port_update at all. We can call dvr_update_router_addvm() and dvr_vmarp_table_update() right from _notify_l3_agent_port_update if needed","commit_id":"a14be4e1e40b5eb9d75cdd99a6402468c53c8654"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"0b3701b66c0d82e150ebc9e8c7b706dc8c89acf2","unresolved":false,"context_lines":[{"line_number":515,"context_line":"                return"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    if call_notify_l3_agent_new_port or mac_address_updated:"},{"line_number":518,"context_line":"        _notify_l3_agent_new_port("},{"line_number":519,"context_line":"            resource, event, trigger, **kwargs)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_4bb80f2b","line":518,"in_reply_to":"7a740942_c28160c4","updated":"2015-12-09 17:08:41.000000000","message":"thanks for the comments, yes that\u0027s what I was thinking about. I will fix it.","commit_id":"a14be4e1e40b5eb9d75cdd99a6402468c53c8654"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"923bf0a82e2dd044e0e6c6dc52d9fb88fd6f66bc","unresolved":false,"context_lines":[{"line_number":520,"context_line":"    if ((is_host_binding_mismatch and new_port.get(\u0027binding:host_id\u0027)) or"},{"line_number":521,"context_line":"        (new_port and mac_address_updated) and"},{"line_number":522,"context_line":"        n_utils.is_dvr_serviced(new_port.get(\u0027device_owner\u0027))):"},{"line_number":523,"context_line":"            l3plugin.dvr_update_router_addvm(context, new_port)"},{"line_number":524,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_401d250e","line":523,"updated":"2015-12-10 09:45:34.000000000","message":"do we need to call dvr_update_router_addvm if it\u0027s only mac_address_updated?","commit_id":"d4f8d0ec9e40758405bbe861de30ae4131798e91"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4c5ebff1b4ae7b54a05a442588acb4c6899c1ed2","unresolved":false,"context_lines":[{"line_number":520,"context_line":"    if ((is_host_binding_mismatch and new_port.get(\u0027binding:host_id\u0027)) or"},{"line_number":521,"context_line":"        (new_port and mac_address_updated) and"},{"line_number":522,"context_line":"        n_utils.is_dvr_serviced(new_port.get(\u0027device_owner\u0027))):"},{"line_number":523,"context_line":"            l3plugin.dvr_update_router_addvm(context, new_port)"},{"line_number":524,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_9e4fd4bd","line":523,"in_reply_to":"7a740942_401d250e","updated":"2015-12-10 17:22:14.000000000","message":"good point, I will update it.","commit_id":"d4f8d0ec9e40758405bbe861de30ae4131798e91"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"2b81d18a9a097c20c81213d4892e3d108219e462","unresolved":false,"context_lines":[{"line_number":485,"context_line":"def _notify_l3_agent_port_update(resource, event, trigger, **kwargs):"},{"line_number":486,"context_line":"    new_port \u003d kwargs.get(\u0027port\u0027)"},{"line_number":487,"context_line":"    original_port \u003d kwargs.get(\u0027original_port\u0027)"},{"line_number":488,"context_line":"    mac_address_updated \u003d kwargs.get(\u0027mac_address_updated\u0027)"},{"line_number":489,"context_line":"    is_host_binding_mismatch \u003d False"},{"line_number":490,"context_line":"    l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":491,"context_line":"                service_constants.L3_ROUTER_NAT)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_ed9fa5b2","line":488,"updated":"2015-12-14 17:48:37.000000000","message":"nit:  This should go down by L524 to reduce the scope of your local variables.  Defining this up here just makes readers wonder why it is being defined and gets them off track.  In fact, just inline it since it is only used in one place.","commit_id":"b78f39a67d8c63fb797be3cabf1cafb7eada5f85"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c7b0461bd7d81f7eb861a618d65937a304311e8a","unresolved":false,"context_lines":[{"line_number":485,"context_line":"def _notify_l3_agent_port_update(resource, event, trigger, **kwargs):"},{"line_number":486,"context_line":"    new_port \u003d kwargs.get(\u0027port\u0027)"},{"line_number":487,"context_line":"    original_port \u003d kwargs.get(\u0027original_port\u0027)"},{"line_number":488,"context_line":"    mac_address_updated \u003d kwargs.get(\u0027mac_address_updated\u0027)"},{"line_number":489,"context_line":"    is_host_binding_mismatch \u003d False"},{"line_number":490,"context_line":"    l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":491,"context_line":"                service_constants.L3_ROUTER_NAT)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_3c171def","line":488,"in_reply_to":"5a710552_ed9fa5b2","updated":"2015-12-14 18:56:48.000000000","message":"I have moved it down to L496.","commit_id":"b78f39a67d8c63fb797be3cabf1cafb7eada5f85"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"2b81d18a9a097c20c81213d4892e3d108219e462","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    new_port \u003d kwargs.get(\u0027port\u0027)"},{"line_number":487,"context_line":"    original_port \u003d kwargs.get(\u0027original_port\u0027)"},{"line_number":488,"context_line":"    mac_address_updated \u003d kwargs.get(\u0027mac_address_updated\u0027)"},{"line_number":489,"context_line":"    is_host_binding_mismatch \u003d False"},{"line_number":490,"context_line":"    l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":491,"context_line":"                service_constants.L3_ROUTER_NAT)"},{"line_number":492,"context_line":"    context \u003d kwargs[\u0027context\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_0d81d18f","line":489,"updated":"2015-12-14 17:48:37.000000000","message":"nit:  This isn\u0027t a very helpful local variable since, in both cases where it is used, it needs to be combined with a check for either new_port.get(\u0027binding:host_id\u0027) or original_port[\u0027binding:host_id\u0027].  You might consider two different local variables, one on L496:\n\n  is_port_moved \u003d (\n      original_port[\u0027binding:host_id\u0027] and\n      original_port[\u0027binding:host_id\u0027] !\u003d new_port[\u0027binding:host_id\u0027])\n\n... and another on L520:\n\n  is_new_port_changed \u003d (\n      new_port[\u0027binding:host_id\u0027] and\n      original_port[\u0027binding:host_id\u0027] !\u003d new_port[\u0027binding:host_id\u0027])\n\nIn my mind, this isn\u0027t really the kind of code duplication that we need to worry about.  I think that trying to de-duplicate this code by significantly increasing the scope of a local variable is probably a bad trade-off.\n\nYou might not like the local variable name I suggested, feel to change it.","commit_id":"b78f39a67d8c63fb797be3cabf1cafb7eada5f85"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c7b0461bd7d81f7eb861a618d65937a304311e8a","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    new_port \u003d kwargs.get(\u0027port\u0027)"},{"line_number":487,"context_line":"    original_port \u003d kwargs.get(\u0027original_port\u0027)"},{"line_number":488,"context_line":"    mac_address_updated \u003d kwargs.get(\u0027mac_address_updated\u0027)"},{"line_number":489,"context_line":"    is_host_binding_mismatch \u003d False"},{"line_number":490,"context_line":"    l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":491,"context_line":"                service_constants.L3_ROUTER_NAT)"},{"line_number":492,"context_line":"    context \u003d kwargs[\u0027context\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_dcd29934","line":489,"in_reply_to":"5a710552_0d81d18f","updated":"2015-12-14 18:56:48.000000000","message":"Done","commit_id":"b78f39a67d8c63fb797be3cabf1cafb7eada5f85"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"2b81d18a9a097c20c81213d4892e3d108219e462","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        is_port_moved \u003d ("},{"line_number":502,"context_line":"            original_port[\u0027binding:host_id\u0027] and is_host_binding_mismatch)"},{"line_number":503,"context_line":"        if is_port_no_longer_serviced or is_port_moved:"},{"line_number":504,"context_line":"            context \u003d kwargs[\u0027context\u0027]"},{"line_number":505,"context_line":"            removed_routers \u003d l3plugin.dvr_deletens_if_no_port("},{"line_number":506,"context_line":"                context,"},{"line_number":507,"context_line":"                original_port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_ed6245ad","line":504,"updated":"2015-12-14 17:48:37.000000000","message":"This is now duplicated.  It should be removed.","commit_id":"b78f39a67d8c63fb797be3cabf1cafb7eada5f85"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c7b0461bd7d81f7eb861a618d65937a304311e8a","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        is_port_moved \u003d ("},{"line_number":502,"context_line":"            original_port[\u0027binding:host_id\u0027] and is_host_binding_mismatch)"},{"line_number":503,"context_line":"        if is_port_no_longer_serviced or is_port_moved:"},{"line_number":504,"context_line":"            context \u003d kwargs[\u0027context\u0027]"},{"line_number":505,"context_line":"            removed_routers \u003d l3plugin.dvr_deletens_if_no_port("},{"line_number":506,"context_line":"                context,"},{"line_number":507,"context_line":"                original_port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_9cdc1148","line":504,"in_reply_to":"5a710552_ed6245ad","updated":"2015-12-14 18:56:48.000000000","message":"Done","commit_id":"b78f39a67d8c63fb797be3cabf1cafb7eada5f85"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"2b81d18a9a097c20c81213d4892e3d108219e462","unresolved":false,"context_lines":[{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    if ((is_host_binding_mismatch and new_port.get(\u0027binding:host_id\u0027)) and"},{"line_number":521,"context_line":"        n_utils.is_dvr_serviced(new_port.get(\u0027device_owner\u0027))):"},{"line_number":522,"context_line":"            l3plugin.dvr_update_router_addvm(context, new_port)"},{"line_number":523,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"},{"line_number":524,"context_line":"    if new_port and mac_address_updated:"},{"line_number":525,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_2de28da0","line":522,"updated":"2015-12-14 17:48:37.000000000","message":"nit:  Three lines (L522, L523, and L525 are indented too many spaces.\n\nIt would read better if the conditional on L520-L521 were computed and stored as a local boolean (see my comment on L489) and then the if statement would be simpler to indent:\n\n  if is_new_port_changed and is_new_port_serviced:\n      l3plugin...","commit_id":"b78f39a67d8c63fb797be3cabf1cafb7eada5f85"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c7b0461bd7d81f7eb861a618d65937a304311e8a","unresolved":false,"context_lines":[{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    if ((is_host_binding_mismatch and new_port.get(\u0027binding:host_id\u0027)) and"},{"line_number":521,"context_line":"        n_utils.is_dvr_serviced(new_port.get(\u0027device_owner\u0027))):"},{"line_number":522,"context_line":"            l3plugin.dvr_update_router_addvm(context, new_port)"},{"line_number":523,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"},{"line_number":524,"context_line":"    if new_port and mac_address_updated:"},{"line_number":525,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_5ce78912","line":522,"in_reply_to":"5a710552_2de28da0","updated":"2015-12-14 18:56:48.000000000","message":"Done","commit_id":"b78f39a67d8c63fb797be3cabf1cafb7eada5f85"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"2b81d18a9a097c20c81213d4892e3d108219e462","unresolved":false,"context_lines":[{"line_number":522,"context_line":"            l3plugin.dvr_update_router_addvm(context, new_port)"},{"line_number":523,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"},{"line_number":524,"context_line":"    if new_port and mac_address_updated:"},{"line_number":525,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"def subscribe():"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_0df2319b","line":525,"updated":"2015-12-14 17:48:37.000000000","message":"Wouldn\u0027t this result in two consecutive calls to \u0027l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")\u0027 in some cases?  One on L523 and the second on L525?","commit_id":"b78f39a67d8c63fb797be3cabf1cafb7eada5f85"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c7b0461bd7d81f7eb861a618d65937a304311e8a","unresolved":false,"context_lines":[{"line_number":522,"context_line":"            l3plugin.dvr_update_router_addvm(context, new_port)"},{"line_number":523,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"},{"line_number":524,"context_line":"    if new_port and mac_address_updated:"},{"line_number":525,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"def subscribe():"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_dcb939ee","line":525,"in_reply_to":"5a710552_0df2319b","updated":"2015-12-14 18:56:48.000000000","message":"I have fixed it don\u0027t think will call twice.","commit_id":"b78f39a67d8c63fb797be3cabf1cafb7eada5f85"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bfd88517f30b39550e72a1399fe3f3faaaea17a2","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        is_port_moved \u003d ("},{"line_number":499,"context_line":"            original_port[\u0027binding:host_id\u0027] and"},{"line_number":500,"context_line":"            original_port[\u0027binding:host_id\u0027] !\u003d new_port[\u0027binding:host_id\u0027])"},{"line_number":501,"context_line":"        is_new_port_binding_changed \u003d ("},{"line_number":502,"context_line":"            new_port[\u0027binding:host_id\u0027] and"},{"line_number":503,"context_line":"            original_port[\u0027binding:host_id\u0027] !\u003d new_port[\u0027binding:host_id\u0027])"},{"line_number":504,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_947e0ee3","line":501,"updated":"2015-12-15 07:51:31.000000000","message":"please define right before using the var on line 520","commit_id":"76ba8ca8ad864db2acd4971422aab9e9014e473a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bfd88517f30b39550e72a1399fe3f3faaaea17a2","unresolved":false,"context_lines":[{"line_number":522,"context_line":"            n_utils.is_dvr_serviced(new_port.get(\u0027device_owner\u0027))):"},{"line_number":523,"context_line":"            l3plugin.dvr_update_router_addvm(context, new_port)"},{"line_number":524,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"},{"line_number":525,"context_line":"            return"},{"line_number":526,"context_line":"        if mac_address_updated:"},{"line_number":527,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a710552_143d3e2b","line":525,"updated":"2015-12-15 07:51:31.000000000","message":"nit: remove \u0027return\u0027 and make \u0027elif\u0027 on the next line","commit_id":"76ba8ca8ad864db2acd4971422aab9e9014e473a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4aa1a53c8d1390964a903b43ca419d81197e1ca5","unresolved":false,"context_lines":[{"line_number":491,"context_line":"    if new_port and original_port:"},{"line_number":492,"context_line":"        original_device_owner \u003d original_port.get(\u0027device_owner\u0027, \u0027\u0027)"},{"line_number":493,"context_line":"        new_device_owner \u003d new_port.get(\u0027device_owner\u0027, \u0027\u0027)"},{"line_number":494,"context_line":"        mac_address_updated \u003d kwargs.get(\u0027mac_address_updated\u0027)"},{"line_number":495,"context_line":"        is_port_no_longer_serviced \u003d ("},{"line_number":496,"context_line":"            n_utils.is_dvr_serviced(original_device_owner) and"},{"line_number":497,"context_line":"            not n_utils.is_dvr_serviced(new_device_owner))"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a710552_3af3810c","line":494,"updated":"2015-12-15 11:57:44.000000000","message":"Carl\u0027s comment wasn\u0027t addressed, we don\u0027t really need a var for this, can use kwargs.get(\u0027mac_address_updated\u0027) right at #523. Sorry, didn\u0027t noticed it in my previous review","commit_id":"a599aac5d58b6c00dd1b2b15ba13f2194d23bb59"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1b62f112e7bb85560f5f62196c0353972b26eedf","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        return"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":466,"context_line":"        service_constants.L3_ROUTER_NAT)"},{"line_number":467,"context_line":"    context \u003d kwargs[\u0027context\u0027]"},{"line_number":468,"context_line":"    if n_utils.is_dvr_serviced(port[\u0027device_owner\u0027]):"},{"line_number":469,"context_line":"        l3plugin.dvr_update_router_addvm(context, port)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_c3a55a47","line":466,"updated":"2015-12-16 16:34:47.000000000","message":"This and L467 should move under the if: since we don\u0027t need to do it otherwise.","commit_id":"69c97c69cd8b875c9e2113fca4b2511b97a35a7c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1b62f112e7bb85560f5f62196c0353972b26eedf","unresolved":false,"context_lines":[{"line_number":487,"context_line":"    original_port \u003d kwargs.get(\u0027original_port\u0027)"},{"line_number":488,"context_line":"    l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":489,"context_line":"                service_constants.L3_ROUTER_NAT)"},{"line_number":490,"context_line":"    context \u003d kwargs[\u0027context\u0027]"},{"line_number":491,"context_line":"    if new_port and original_port:"},{"line_number":492,"context_line":"        original_device_owner \u003d original_port.get(\u0027device_owner\u0027, \u0027\u0027)"},{"line_number":493,"context_line":"        new_device_owner \u003d new_port.get(\u0027device_owner\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_4315ea46","line":490,"updated":"2015-12-16 16:34:47.000000000","message":"And these can move to after L491 for the same reason","commit_id":"69c97c69cd8b875c9e2113fca4b2511b97a35a7c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c9448bc6d43afe9d3156e64797fdb073194b34c5","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            new_port[\u0027binding:host_id\u0027] and"},{"line_number":517,"context_line":"            original_port[\u0027binding:host_id\u0027] !\u003d new_port[\u0027binding:host_id\u0027])"},{"line_number":518,"context_line":"        if (is_new_port_binding_changed and"},{"line_number":519,"context_line":"            n_utils.is_dvr_serviced(new_port.get(\u0027device_owner\u0027))):"},{"line_number":520,"context_line":"            l3plugin.dvr_update_router_addvm(context, new_port)"},{"line_number":521,"context_line":"            l3plugin.dvr_vmarp_table_update(context, new_port, \"add\")"},{"line_number":522,"context_line":"        elif kwargs.get(\u0027mac_address_updated\u0027):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_d60018ad","line":519,"range":{"start_line":519,"start_character":36,"end_line":519,"end_character":63},"updated":"2015-12-17 08:20:13.000000000","message":"can use new_device_owner here","commit_id":"afbbc46c21c193480bce88b16b89d518981d39fc"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"086181dd4b742ad9925a580793ab7da066226ce7","unresolved":false,"context_lines":[{"line_number":465,"context_line":"    l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":466,"context_line":"        service_constants.L3_ROUTER_NAT)"},{"line_number":467,"context_line":"    mac_address_updated \u003d kwargs.get(\u0027mac_address_updated\u0027)"},{"line_number":468,"context_line":"    update_device_up \u003d kwargs.get(\u0027update_device_up\u0027)"},{"line_number":469,"context_line":"    context \u003d kwargs[\u0027context\u0027]"},{"line_number":470,"context_line":"    if mac_address_updated or update_device_up:"},{"line_number":471,"context_line":"        l3plugin.dvr_vmarp_table_update(context, port, \"add\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_2810d44d","side":"PARENT","line":468,"range":{"start_line":468,"start_character":4,"end_line":468,"end_character":20},"updated":"2015-12-18 03:00:34.000000000","message":"the notify \u0027update_device_up\u0027 is no longer used anywhere, should we reamin it?","commit_id":"681e1ff1af25ad8cc5c4748b5b2467a1766ff392"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"acef5b637abe3103e5f49193fd9a31d9bed3d30d","unresolved":false,"context_lines":[{"line_number":465,"context_line":"    l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":466,"context_line":"        service_constants.L3_ROUTER_NAT)"},{"line_number":467,"context_line":"    mac_address_updated \u003d kwargs.get(\u0027mac_address_updated\u0027)"},{"line_number":468,"context_line":"    update_device_up \u003d kwargs.get(\u0027update_device_up\u0027)"},{"line_number":469,"context_line":"    context \u003d kwargs[\u0027context\u0027]"},{"line_number":470,"context_line":"    if mac_address_updated or update_device_up:"},{"line_number":471,"context_line":"        l3plugin.dvr_vmarp_table_update(context, port, \"add\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_57e7d410","side":"PARENT","line":468,"range":{"start_line":468,"start_character":4,"end_line":468,"end_character":20},"in_reply_to":"3a7e1126_2810d44d","updated":"2015-12-18 17:47:12.000000000","message":"I don\u0027t think this is required any more, since we are handling all cases with this patch and the previous one oleg submitted.\n\nThis update_device_up is only seen from the nova notifier and this internally will trigger an port_update event.\n\nIn the port_update event I think we are handling all cases in here.\n\nHope this helps.","commit_id":"681e1ff1af25ad8cc5c4748b5b2467a1766ff392"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d64e232bf997302168cc0c688c4b94fddb115144","unresolved":false,"context_lines":[{"line_number":488,"context_line":"def _notify_l3_agent_port_update(resource, event, trigger, **kwargs):"},{"line_number":489,"context_line":"    new_port \u003d kwargs.get(\u0027port\u0027)"},{"line_number":490,"context_line":"    original_port \u003d kwargs.get(\u0027original_port\u0027)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    if new_port and original_port:"},{"line_number":493,"context_line":"        original_device_owner \u003d original_port.get(\u0027device_owner\u0027, \u0027\u0027)"},{"line_number":494,"context_line":"        new_device_owner \u003d new_port.get(\u0027device_owner\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_5ccdc2b5","side":"PARENT","line":491,"updated":"2015-12-19 03:13:29.000000000","message":"nit for whitespace change, but don\u0027t respin just to fix it","commit_id":"681e1ff1af25ad8cc5c4748b5b2467a1766ff392"}],"neutron/tests/unit/scheduler/test_l3_agent_scheduler.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4aa1a53c8d1390964a903b43ca419d81197e1ca5","unresolved":false,"context_lines":[{"line_number":956,"context_line":"                \u0027id\u0027: port_id,"},{"line_number":957,"context_line":"                \u0027binding:host_id\u0027: \u0027vm-host\u0027,"},{"line_number":958,"context_line":"                \u0027device_id\u0027: \u0027vm-id\u0027,"},{"line_number":959,"context_line":"                \u0027device_owner\u0027: DEVICE_OWNER_COMPUTE,"},{"line_number":960,"context_line":"                \u0027mac_address\u0027: \u002702:04:05:17:18:29\u0027"},{"line_number":961,"context_line":"            },"},{"line_number":962,"context_line":"            \u0027mac_address_updated\u0027: False"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a710552_9f905a97","line":959,"updated":"2015-12-15 11:57:44.000000000","message":"you only need \u0027device_owner\u0027 to test _notify_l3_agent_new_port()","commit_id":"a599aac5d58b6c00dd1b2b15ba13f2194d23bb59"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4aa1a53c8d1390964a903b43ca419d81197e1ca5","unresolved":false,"context_lines":[{"line_number":962,"context_line":"            \u0027mac_address_updated\u0027: False"},{"line_number":963,"context_line":"        }"},{"line_number":964,"context_line":""},{"line_number":965,"context_line":"        plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":966,"context_line":"        l3plugin \u003d mock.Mock()"},{"line_number":967,"context_line":"        l3plugin.supported_extension_aliases \u003d ["},{"line_number":968,"context_line":"            \u0027router\u0027, constants.L3_AGENT_SCHEDULER_EXT_ALIAS,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a710552_bf52f6db","line":965,"updated":"2015-12-15 11:57:44.000000000","message":"why need this?","commit_id":"a599aac5d58b6c00dd1b2b15ba13f2194d23bb59"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4aa1a53c8d1390964a903b43ca419d81197e1ca5","unresolved":false,"context_lines":[{"line_number":964,"context_line":""},{"line_number":965,"context_line":"        plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":966,"context_line":"        l3plugin \u003d mock.Mock()"},{"line_number":967,"context_line":"        l3plugin.supported_extension_aliases \u003d ["},{"line_number":968,"context_line":"            \u0027router\u0027, constants.L3_AGENT_SCHEDULER_EXT_ALIAS,"},{"line_number":969,"context_line":"            constants.L3_DISTRIBUTED_EXT_ALIAS"},{"line_number":970,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a710552_3f5da6e9","line":967,"updated":"2015-12-15 11:57:44.000000000","message":"and this","commit_id":"a599aac5d58b6c00dd1b2b15ba13f2194d23bb59"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4aa1a53c8d1390964a903b43ca419d81197e1ca5","unresolved":false,"context_lines":[{"line_number":988,"context_line":"                \u0027id\u0027: port_id,"},{"line_number":989,"context_line":"                \u0027binding:host_id\u0027: \u0027vm-host2\u0027,"},{"line_number":990,"context_line":"                \u0027device_id\u0027: \u0027vm-id\u0027,"},{"line_number":991,"context_line":"                \u0027device_owner\u0027: \u0027network:None\u0027,"},{"line_number":992,"context_line":"                \u0027mac_address\u0027: \u002702:04:05:17:18:29\u0027"},{"line_number":993,"context_line":"            }"},{"line_number":994,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a710552_9f6cda9d","line":991,"updated":"2015-12-15 11:57:44.000000000","message":"ditto","commit_id":"a599aac5d58b6c00dd1b2b15ba13f2194d23bb59"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4aa1a53c8d1390964a903b43ca419d81197e1ca5","unresolved":false,"context_lines":[{"line_number":993,"context_line":"            }"},{"line_number":994,"context_line":"        }"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"        plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":997,"context_line":"        l3plugin \u003d mock.Mock()"},{"line_number":998,"context_line":"        l3plugin.supported_extension_aliases \u003d ["},{"line_number":999,"context_line":"            \u0027router\u0027, constants.L3_AGENT_SCHEDULER_EXT_ALIAS,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a710552_bf69968d","line":996,"updated":"2015-12-15 11:57:44.000000000","message":"ditto","commit_id":"a599aac5d58b6c00dd1b2b15ba13f2194d23bb59"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4aa1a53c8d1390964a903b43ca419d81197e1ca5","unresolved":false,"context_lines":[{"line_number":995,"context_line":""},{"line_number":996,"context_line":"        plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":997,"context_line":"        l3plugin \u003d mock.Mock()"},{"line_number":998,"context_line":"        l3plugin.supported_extension_aliases \u003d ["},{"line_number":999,"context_line":"            \u0027router\u0027, constants.L3_AGENT_SCHEDULER_EXT_ALIAS,"},{"line_number":1000,"context_line":"            constants.L3_DISTRIBUTED_EXT_ALIAS"},{"line_number":1001,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a710552_dff902ca","line":998,"updated":"2015-12-15 11:57:44.000000000","message":"ditto","commit_id":"a599aac5d58b6c00dd1b2b15ba13f2194d23bb59"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4aa1a53c8d1390964a903b43ca419d81197e1ca5","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"            self.assertFalse(l3plugin.dvr_vmarp_table_update.called)"},{"line_number":1010,"context_line":"            self.assertFalse(l3plugin.dvr_update_router_addvm.called)"},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"    def test__notify_l3_agent_update_port_no_action(self):"},{"line_number":1013,"context_line":"        port_id \u003d \u0027fake-port\u0027"},{"line_number":1014,"context_line":"        kwargs \u003d {"},{"line_number":1015,"context_line":"            \u0027context\u0027: self.adminContext,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a710552_1f99ca6e","line":1012,"updated":"2015-12-15 11:57:44.000000000","message":"what about tests where mac address and/or portbinding was updated?","commit_id":"a599aac5d58b6c00dd1b2b15ba13f2194d23bb59"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"9acb87b0c9053d89b4ceb340fde87b112c2e15e9","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"                \u0027device_owner\u0027: DEVICE_OWNER_COMPUTE,"},{"line_number":1022,"context_line":"            },"},{"line_number":1023,"context_line":"            \u0027port\u0027: {"},{"line_number":1024,"context_line":"                \u0027id\u0027: str(uuid.uuid4()),"},{"line_number":1025,"context_line":"                \u0027binding:host_id\u0027: \u0027vm-host\u0027,"},{"line_number":1026,"context_line":"                \u0027device_owner\u0027: DEVICE_OWNER_COMPUTE,"},{"line_number":1027,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_fae84be4","line":1024,"range":{"start_line":1024,"start_character":15,"end_line":1024,"end_character":40},"updated":"2015-12-18 07:10:48.000000000","message":"original_port and port would have different ids. So port is not updated from original_port, or do you mean port_id is changeable ? No, it\u0027s read-only attribute.","commit_id":"8fd8d6b382ec6f49e7d42a962a1f8bdd2d1f1f27"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"a63fd87ed837b87452e194f90c8fad76638947b4","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"                \u0027device_owner\u0027: DEVICE_OWNER_COMPUTE,"},{"line_number":1022,"context_line":"            },"},{"line_number":1023,"context_line":"            \u0027port\u0027: {"},{"line_number":1024,"context_line":"                \u0027id\u0027: str(uuid.uuid4()),"},{"line_number":1025,"context_line":"                \u0027binding:host_id\u0027: \u0027vm-host\u0027,"},{"line_number":1026,"context_line":"                \u0027device_owner\u0027: DEVICE_OWNER_COMPUTE,"},{"line_number":1027,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_063912a4","line":1024,"range":{"start_line":1024,"start_character":15,"end_line":1024,"end_character":40},"in_reply_to":"3a7e1126_638b2869","updated":"2015-12-19 05:29:01.000000000","message":"OK, if you guys don\u0027t mind, and no others will confuse on this, it\u0027s acceptable to me. I will remove my -1.","commit_id":"8fd8d6b382ec6f49e7d42a962a1f8bdd2d1f1f27"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d64e232bf997302168cc0c688c4b94fddb115144","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"                \u0027device_owner\u0027: DEVICE_OWNER_COMPUTE,"},{"line_number":1022,"context_line":"            },"},{"line_number":1023,"context_line":"            \u0027port\u0027: {"},{"line_number":1024,"context_line":"                \u0027id\u0027: str(uuid.uuid4()),"},{"line_number":1025,"context_line":"                \u0027binding:host_id\u0027: \u0027vm-host\u0027,"},{"line_number":1026,"context_line":"                \u0027device_owner\u0027: DEVICE_OWNER_COMPUTE,"},{"line_number":1027,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_638b2869","line":1024,"range":{"start_line":1024,"start_character":15,"end_line":1024,"end_character":40},"in_reply_to":"3a7e1126_802758b5","updated":"2015-12-19 03:13:29.000000000","message":"I don\u0027t see where the id is used in the codepath being tested, so I\u0027d agree with Oleg that it\u0027s value doesn\u0027t matter.","commit_id":"8fd8d6b382ec6f49e7d42a962a1f8bdd2d1f1f27"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d404c45dc2b78979fa7860f1dca49bc4f18a328c","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"                \u0027device_owner\u0027: DEVICE_OWNER_COMPUTE,"},{"line_number":1022,"context_line":"            },"},{"line_number":1023,"context_line":"            \u0027port\u0027: {"},{"line_number":1024,"context_line":"                \u0027id\u0027: str(uuid.uuid4()),"},{"line_number":1025,"context_line":"                \u0027binding:host_id\u0027: \u0027vm-host\u0027,"},{"line_number":1026,"context_line":"                \u0027device_owner\u0027: DEVICE_OWNER_COMPUTE,"},{"line_number":1027,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_802758b5","line":1024,"range":{"start_line":1024,"start_character":15,"end_line":1024,"end_character":40},"in_reply_to":"3a7e1126_fae84be4","updated":"2015-12-18 07:52:10.000000000","message":"I think it doesn\u0027t matter for the test, I\u0027d say \u0027id\u0027 is not even needed here, anyway not a blocker IMO","commit_id":"8fd8d6b382ec6f49e7d42a962a1f8bdd2d1f1f27"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"9acb87b0c9053d89b4ceb340fde87b112c2e15e9","unresolved":false,"context_lines":[{"line_number":1047,"context_line":"                \u0027mac_address\u0027: \u002702:04:05:17:18:19\u0027"},{"line_number":1048,"context_line":"            },"},{"line_number":1049,"context_line":"            \u0027port\u0027: {"},{"line_number":1050,"context_line":"                \u0027id\u0027: str(uuid.uuid4()),"},{"line_number":1051,"context_line":"                \u0027binding:host_id\u0027: \u0027vm-host\u0027,"},{"line_number":1052,"context_line":"                \u0027mac_address\u0027: \u002702:04:05:17:18:29\u0027"},{"line_number":1053,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_faa4cba6","line":1050,"range":{"start_line":1050,"start_character":16,"end_line":1050,"end_character":40},"updated":"2015-12-18 07:10:48.000000000","message":"ditto","commit_id":"8fd8d6b382ec6f49e7d42a962a1f8bdd2d1f1f27"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"9acb87b0c9053d89b4ceb340fde87b112c2e15e9","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"                \u0027device_owner\u0027: DEVICE_OWNER_COMPUTE,"},{"line_number":1074,"context_line":"            },"},{"line_number":1075,"context_line":"            \u0027port\u0027: {"},{"line_number":1076,"context_line":"                \u0027id\u0027: str(uuid.uuid4()),"},{"line_number":1077,"context_line":"                \u0027binding:host_id\u0027: \u0027vm-host2\u0027,"},{"line_number":1078,"context_line":"                \u0027device_owner\u0027: DEVICE_OWNER_COMPUTE,"},{"line_number":1079,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_3ab1f3e1","line":1076,"range":{"start_line":1076,"start_character":16,"end_line":1076,"end_character":40},"updated":"2015-12-18 07:10:48.000000000","message":"ditto","commit_id":"8fd8d6b382ec6f49e7d42a962a1f8bdd2d1f1f27"}]}
