)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"e078efd6d89c6afdaeeafe411a2b0a68b59be8ad","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     shihanzhang \u003cshihanzhang@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-11 15:35:14 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Optimize conntrack in securigy group"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now we use conntrack tools to manage ip_conntrack, if sg rules or"},{"line_number":10,"context_line":"members change, l2 agent will use conntrack tools to clean up the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_fb0b4c8c","line":7,"updated":"2015-11-11 07:46:21.000000000","message":"Minor Nit .. security :)","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"d91076f538e6468f1fe0da682d2cb4870d1f2147","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     shihanzhang \u003cshihanzhang@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-11 15:35:14 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Optimize conntrack in securigy group"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now we use conntrack tools to manage ip_conntrack, if sg rules or"},{"line_number":10,"context_line":"members change, l2 agent will use conntrack tools to clean up the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_9b0a4078","line":7,"in_reply_to":"da85f559_fb0b4c8c","updated":"2015-11-11 07:47:58.000000000","message":"got it :)","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"8b8cb76812d15c1095f30dbd7b91641e97073276","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Optimize conntrack in securigy group"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now we use conntrack tools to manage ip_conntrack, if sg rules or"},{"line_number":10,"context_line":"members change, l2 agent will use conntrack tools to clean up the"},{"line_number":11,"context_line":"unused ip_conntrack between VMs, but there are some problems in"},{"line_number":12,"context_line":"bellow use cases:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_aeaee095","line":9,"updated":"2015-11-11 08:23:48.000000000","message":"Some rewording may be required.\nMaybe a fullstop is missing here?","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"8b8cb76812d15c1095f30dbd7b91641e97073276","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Now we use conntrack tools to manage ip_conntrack, if sg rules or"},{"line_number":10,"context_line":"members change, l2 agent will use conntrack tools to clean up the"},{"line_number":11,"context_line":"unused ip_conntrack between VMs, but there are some problems in"},{"line_number":12,"context_line":"bellow use cases:"},{"line_number":13,"context_line":"1. there are many VMs in a default sg(etc. 200 VMs), when we bulk"},{"line_number":14,"context_line":"   delete these VMs, the l2 agents need to cost much time to clean"},{"line_number":15,"context_line":"   up the ip_conntrack."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_2ec4305d","line":12,"updated":"2015-11-11 08:23:48.000000000","message":"Nit: Bellow -\u003e below","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"2355ef5fd096e5486998e23dab53bb1d3d4a7cd9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Now we use conntrack tools to manage ip_conntrack, if sg rules or"},{"line_number":10,"context_line":"members change, l2 agent will use conntrack tools to clean up the"},{"line_number":11,"context_line":"unused ip_conntrack between VMs, but there are some problems in"},{"line_number":12,"context_line":"bellow use cases:"},{"line_number":13,"context_line":"1. there are many VMs in a default sg(etc. 200 VMs), when we bulk"},{"line_number":14,"context_line":"   delete these VMs, the l2 agents need to cost much time to clean"},{"line_number":15,"context_line":"   up the ip_conntrack."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_966c2509","line":12,"in_reply_to":"da85f559_2ec4305d","updated":"2015-11-12 02:34:42.000000000","message":"Done","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"8b8cb76812d15c1095f30dbd7b91641e97073276","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver record twice, so conntrack command exec"},{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch does the bellow changes:"},{"line_number":22,"context_line":"1. when we delete a port, it is no need to clean ip_conntrack, just"},{"line_number":23,"context_line":"   a port was changed from sgA to sgB, we need to clean relevant"},{"line_number":24,"context_line":"   conntrack."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_2e9bd073","line":21,"updated":"2015-11-11 08:23:48.000000000","message":"bellow -\u003e below","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"2355ef5fd096e5486998e23dab53bb1d3d4a7cd9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver record twice, so conntrack command exec"},{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch does the bellow changes:"},{"line_number":22,"context_line":"1. when we delete a port, it is no need to clean ip_conntrack, just"},{"line_number":23,"context_line":"   a port was changed from sgA to sgB, we need to clean relevant"},{"line_number":24,"context_line":"   conntrack."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_567b1dc1","line":21,"in_reply_to":"da85f559_2e9bd073","updated":"2015-11-12 02:34:42.000000000","message":"Done","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"8b8cb76812d15c1095f30dbd7b91641e97073276","unresolved":false,"context_lines":[{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch does the bellow changes:"},{"line_number":22,"context_line":"1. when we delete a port, it is no need to clean ip_conntrack, just"},{"line_number":23,"context_line":"   a port was changed from sgA to sgB, we need to clean relevant"},{"line_number":24,"context_line":"   conntrack."},{"line_number":25,"context_line":"2. make devices_with_udpated_sg_members just record the ACTIVE"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_ee8f0828","line":22,"updated":"2015-11-11 08:23:48.000000000","message":"it -\u003e there","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"2355ef5fd096e5486998e23dab53bb1d3d4a7cd9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch does the bellow changes:"},{"line_number":22,"context_line":"1. when we delete a port, it is no need to clean ip_conntrack, just"},{"line_number":23,"context_line":"   a port was changed from sgA to sgB, we need to clean relevant"},{"line_number":24,"context_line":"   conntrack."},{"line_number":25,"context_line":"2. make devices_with_udpated_sg_members just record the ACTIVE"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_767661d8","line":22,"in_reply_to":"da85f559_ee8f0828","updated":"2015-11-12 02:34:42.000000000","message":"Done","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"8b8cb76812d15c1095f30dbd7b91641e97073276","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch does the bellow changes:"},{"line_number":22,"context_line":"1. when we delete a port, it is no need to clean ip_conntrack, just"},{"line_number":23,"context_line":"   a port was changed from sgA to sgB, we need to clean relevant"},{"line_number":24,"context_line":"   conntrack."},{"line_number":25,"context_line":"2. make devices_with_udpated_sg_members just record the ACTIVE"},{"line_number":26,"context_line":"   port, so when sg rules or members change, conntrack command for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_0e75ac30","line":23,"updated":"2015-11-11 08:23:48.000000000","message":"just a port was changed from sgA to sgB , we need to clean relevant- \u003e port is changed from sgA to sgB, and we need to clean relevant","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"2355ef5fd096e5486998e23dab53bb1d3d4a7cd9","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch does the bellow changes:"},{"line_number":22,"context_line":"1. when we delete a port, it is no need to clean ip_conntrack, just"},{"line_number":23,"context_line":"   a port was changed from sgA to sgB, we need to clean relevant"},{"line_number":24,"context_line":"   conntrack."},{"line_number":25,"context_line":"2. make devices_with_udpated_sg_members just record the ACTIVE"},{"line_number":26,"context_line":"   port, so when sg rules or members change, conntrack command for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da85f559_762421c4","line":23,"in_reply_to":"da85f559_0e75ac30","updated":"2015-11-12 02:34:42.000000000","message":"Done","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f63ddeed6ace8b379de8143343c209c1c2f4686d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Optimize conntrack in security group"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now we use conntrack tools to manage ip_conntrack, if sg rules or"},{"line_number":10,"context_line":"members change, l2 agent will use conntrack tools to clean up the"},{"line_number":11,"context_line":"unused ip_conntrack between VMs, but there are some problems in"},{"line_number":12,"context_line":"below use cases:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba8a016a_4072c5ae","line":9,"updated":"2015-11-18 11:21:57.000000000","message":"a comma (after ip_conntrack) -\u003e a period","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"02715d1a1f93eb0173126e10a5ab1504d37ab332","unresolved":false,"context_lines":[{"line_number":11,"context_line":"unused ip_conntrack between VMs, but there are some problems in"},{"line_number":12,"context_line":"below use cases:"},{"line_number":13,"context_line":"1. there are many VMs in a default sg(etc. 200 VMs), when we bulk"},{"line_number":14,"context_line":"   delete these VMs, the l2 agents need to cost much time to clean"},{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, the port\u0027s status change"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba8a016a_b0192624","line":14,"updated":"2015-11-19 15:27:16.000000000","message":"nit: s/need to cost much to clean/will block when cleaning/ and then pull some of the next line up","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"02715d1a1f93eb0173126e10a5ab1504d37ab332","unresolved":false,"context_lines":[{"line_number":13,"context_line":"1. there are many VMs in a default sg(etc. 200 VMs), when we bulk"},{"line_number":14,"context_line":"   delete these VMs, the l2 agents need to cost much time to clean"},{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, the port\u0027s status change"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"},{"line_number":18,"context_line":"   IptablesFirewallDriver record twice, so conntrack command exec"},{"line_number":19,"context_line":"   twice for one ip_conntrack."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba8a016a_50b23ae6","line":16,"updated":"2015-11-19 15:27:16.000000000","message":"nit: which port?  the VM\u0027s port?","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"02715d1a1f93eb0173126e10a5ab1504d37ab332","unresolved":false,"context_lines":[{"line_number":14,"context_line":"   delete these VMs, the l2 agents need to cost much time to clean"},{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, the port\u0027s status change"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"},{"line_number":18,"context_line":"   IptablesFirewallDriver record twice, so conntrack command exec"},{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba8a016a_70073e82","line":17,"updated":"2015-11-19 15:27:16.000000000","message":"nit: s/,/. These transitions fire/","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"02715d1a1f93eb0173126e10a5ab1504d37ab332","unresolved":false,"context_lines":[{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, the port\u0027s status change"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"},{"line_number":18,"context_line":"   IptablesFirewallDriver record twice, so conntrack command exec"},{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch does the below changes:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba8a016a_f0fb2e77","line":18,"updated":"2015-11-19 15:27:16.000000000","message":"nit: s/record// and s/exec/is executed/","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f63ddeed6ace8b379de8143343c209c1c2f4686d","unresolved":false,"context_lines":[{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch does the below changes:"},{"line_number":22,"context_line":"1. when we delete a port, there is no need to clean ip_conntrack,"},{"line_number":23,"context_line":"   a port is changed from sgA to sgB, and we need to clean relevant"},{"line_number":24,"context_line":"   conntrack."},{"line_number":25,"context_line":"2. make devices_with_udpated_sg_members just record the ACTIVE"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba8a016a_00659ddf","line":22,"updated":"2015-11-18 11:21:57.000000000","message":"a comma (at EOL) -\u003e a period","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"edd5901ee87e262bcd841b1aca9cce32503f6be4","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver record twice, so conntrack command exec"},{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"I plan to use two patches to solve this problem, this is the first"},{"line_number":22,"context_line":"patch, it change the RPC method \u0027security_groups_member_updated\u0027 that"},{"line_number":23,"context_line":"neutron-server sends to l2-agent, it add a new parameter named"},{"line_number":24,"context_line":"\u0027sg_method\u0027, if a security group members change, l2-agent can clearly"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a8ffd7b_7b1b2fcb","line":21,"updated":"2015-12-01 13:50:47.000000000","message":"I\u0027m curious about the second patch. When I review this first one, I cannot get a clearer view of your implementation. I suggest you submit the follow-up patch to review together and you can set the dependency between the two patches.","commit_id":"eefd1f0082083d4c58ce8fdf760dc4d63fe71704"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"96e7d301a295300d8ec17215c9968e5c5b18d6ae","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver record twice, so conntrack command exec"},{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"I plan to use two patches to solve this problem, this is the first"},{"line_number":22,"context_line":"patch, it change the RPC method \u0027security_groups_member_updated\u0027 that"},{"line_number":23,"context_line":"neutron-server sends to l2-agent, it add a new parameter named"},{"line_number":24,"context_line":"\u0027sg_method\u0027, if a security group members change, l2-agent can clearly"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a8ffd7b_bef2b798","line":21,"in_reply_to":"9a8ffd7b_7b1b2fcb","updated":"2015-12-02 07:11:14.000000000","message":"I will update this commit message to explain it, thx for your suggestion","commit_id":"eefd1f0082083d4c58ce8fdf760dc4d63fe71704"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"edd5901ee87e262bcd841b1aca9cce32503f6be4","unresolved":false,"context_lines":[{"line_number":25,"context_line":"get the change."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: I4e2fa16bf59df26d6aea0d9b94ee8204c4743d4d"},{"line_number":28,"context_line":"Closes-bug: #1513765"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a8ffd7b_1b63031c","line":28,"updated":"2015-12-01 13:50:47.000000000","message":"Partial-Bug mark is suitable here.","commit_id":"eefd1f0082083d4c58ce8fdf760dc4d63fe71704"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"96e7d301a295300d8ec17215c9968e5c5b18d6ae","unresolved":false,"context_lines":[{"line_number":25,"context_line":"get the change."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: I4e2fa16bf59df26d6aea0d9b94ee8204c4743d4d"},{"line_number":28,"context_line":"Closes-bug: #1513765"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a8ffd7b_1ecd035d","line":28,"in_reply_to":"9a8ffd7b_1b63031c","updated":"2015-12-02 07:11:14.000000000","message":"agree","commit_id":"eefd1f0082083d4c58ce8fdf760dc4d63fe71704"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab14f42f9a64a7f7157c4db11a297bec7a744276","unresolved":false,"context_lines":[{"line_number":11,"context_line":"unused ip_conntrack between VMs, but there are some problems in"},{"line_number":12,"context_line":"below use cases:"},{"line_number":13,"context_line":"1. there are many VMs in a default sg(etc. 200 VMs), when we bulk"},{"line_number":14,"context_line":"   delete these VMs, the l2 agents need to cost much time to clean"},{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, the port\u0027s status change"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a8ffd7b_3f045848","line":14,"updated":"2015-12-02 19:33:29.000000000","message":"needs to cost much time -\u003e takes a lot of time?","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"96628abf0a76c920d4d9f388be022c9a8a89e397","unresolved":false,"context_lines":[{"line_number":11,"context_line":"unused ip_conntrack between VMs, but there are some problems in"},{"line_number":12,"context_line":"below use cases:"},{"line_number":13,"context_line":"1. there are many VMs in a default sg(etc. 200 VMs), when we bulk"},{"line_number":14,"context_line":"   delete these VMs, the l2 agents need to cost much time to clean"},{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, the port\u0027s status change"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a8ffd7b_96ee7ceb","line":14,"in_reply_to":"9a8ffd7b_3f045848","updated":"2015-12-03 03:13:02.000000000","message":"got it, thanks for you suggestion","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab14f42f9a64a7f7157c4db11a297bec7a744276","unresolved":false,"context_lines":[{"line_number":13,"context_line":"1. there are many VMs in a default sg(etc. 200 VMs), when we bulk"},{"line_number":14,"context_line":"   delete these VMs, the l2 agents need to cost much time to clean"},{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, the port\u0027s status change"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"},{"line_number":18,"context_line":"   IptablesFirewallDriver record twice, so conntrack command exec"},{"line_number":19,"context_line":"   twice for one ip_conntrack."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a8ffd7b_ff9010ef","line":16,"updated":"2015-12-02 19:33:29.000000000","message":"the -\u003e and the\nchange -\u003e changes","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"96628abf0a76c920d4d9f388be022c9a8a89e397","unresolved":false,"context_lines":[{"line_number":13,"context_line":"1. there are many VMs in a default sg(etc. 200 VMs), when we bulk"},{"line_number":14,"context_line":"   delete these VMs, the l2 agents need to cost much time to clean"},{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, the port\u0027s status change"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"},{"line_number":18,"context_line":"   IptablesFirewallDriver record twice, so conntrack command exec"},{"line_number":19,"context_line":"   twice for one ip_conntrack."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a8ffd7b_56bb34e5","line":16,"in_reply_to":"9a8ffd7b_ff9010ef","updated":"2015-12-03 03:13:02.000000000","message":"Done","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab14f42f9a64a7f7157c4db11a297bec7a744276","unresolved":false,"context_lines":[{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, the port\u0027s status change"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"},{"line_number":18,"context_line":"   IptablesFirewallDriver record twice, so conntrack command exec"},{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"I plan to use two patches to solve this problem, this is the first"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a8ffd7b_df50ac34","line":18,"updated":"2015-12-02 19:33:29.000000000","message":"record -\u003e records\nexec -\u003e executes","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"96628abf0a76c920d4d9f388be022c9a8a89e397","unresolved":false,"context_lines":[{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, the port\u0027s status change"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"},{"line_number":18,"context_line":"   IptablesFirewallDriver record twice, so conntrack command exec"},{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"I plan to use two patches to solve this problem, this is the first"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a8ffd7b_76c0b850","line":18,"in_reply_to":"9a8ffd7b_df50ac34","updated":"2015-12-03 03:13:02.000000000","message":"Done","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab14f42f9a64a7f7157c4db11a297bec7a744276","unresolved":false,"context_lines":[{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"I plan to use two patches to solve this problem, this is the first"},{"line_number":22,"context_line":"patch, it changes the RPC method \u0027security_groups_member_updated\u0027 that"},{"line_number":23,"context_line":"neutron-server sends to l2-agent, it add a new parameter named"},{"line_number":24,"context_line":"\u0027sg_method\u0027, if security group members change, l2-agent can clearly"},{"line_number":25,"context_line":"get the change, for port-delete, it is no need to clean the ip_conntrack,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a8ffd7b_5b2e0f8d","line":22,"updated":"2015-12-02 19:33:29.000000000","message":"nit: one big sentence that is hard to digest. May want to split up for clarity.","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"96628abf0a76c920d4d9f388be022c9a8a89e397","unresolved":false,"context_lines":[{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"I plan to use two patches to solve this problem, this is the first"},{"line_number":22,"context_line":"patch, it changes the RPC method \u0027security_groups_member_updated\u0027 that"},{"line_number":23,"context_line":"neutron-server sends to l2-agent, it add a new parameter named"},{"line_number":24,"context_line":"\u0027sg_method\u0027, if security group members change, l2-agent can clearly"},{"line_number":25,"context_line":"get the change, for port-delete, it is no need to clean the ip_conntrack,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a8ffd7b_16b12c01","line":22,"in_reply_to":"9a8ffd7b_5b2e0f8d","updated":"2015-12-03 03:13:02.000000000","message":"agree","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"bb6debef0e7824f41ba42b4fc275aa89de5dc7ac","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish sg members change, for port-delete, it is"},{"line_number":22,"context_line":"no need to clean ip_conntrack, for port_update which updates from one"},{"line_number":23,"context_line":"sg to another, it need to clean ip_conntrack."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a740942_87dafc4a","line":21,"updated":"2015-12-07 13:03:47.000000000","message":"nits:\n\ndistinguish -\u003e distinguish between type of\nchange, for -\u003e changes. For\nit is -\u003e there is","commit_id":"eeaa14917194cbc42e377a9d1895ca96eeaa98f2"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"c11285fb90f11271b5367a8e82b25a563ae8b106","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish sg members change, for port-delete, it is"},{"line_number":22,"context_line":"no need to clean ip_conntrack, for port_update which updates from one"},{"line_number":23,"context_line":"sg to another, it need to clean ip_conntrack."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a740942_053d2f8e","line":21,"in_reply_to":"7a740942_87dafc4a","updated":"2015-12-09 09:19:25.000000000","message":"thx for your help","commit_id":"eeaa14917194cbc42e377a9d1895ca96eeaa98f2"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"bb6debef0e7824f41ba42b4fc275aa89de5dc7ac","unresolved":false,"context_lines":[{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish sg members change, for port-delete, it is"},{"line_number":22,"context_line":"no need to clean ip_conntrack, for port_update which updates from one"},{"line_number":23,"context_line":"sg to another, it need to clean ip_conntrack."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This patch changes the RPC method \u0027security_groups_member_updated\u0027 that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a740942_678a701d","line":22,"updated":"2015-12-07 13:03:47.000000000","message":"nit ip_conntrack, for -\u003e ipconntrack. For\nport_update -\u003e port_update,","commit_id":"eeaa14917194cbc42e377a9d1895ca96eeaa98f2"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"c11285fb90f11271b5367a8e82b25a563ae8b106","unresolved":false,"context_lines":[{"line_number":19,"context_line":"   twice for one ip_conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish sg members change, for port-delete, it is"},{"line_number":22,"context_line":"no need to clean ip_conntrack, for port_update which updates from one"},{"line_number":23,"context_line":"sg to another, it need to clean ip_conntrack."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This patch changes the RPC method \u0027security_groups_member_updated\u0027 that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a740942_a53f7b85","line":22,"in_reply_to":"7a740942_678a701d","updated":"2015-12-09 09:19:25.000000000","message":"Done","commit_id":"eeaa14917194cbc42e377a9d1895ca96eeaa98f2"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"bb6debef0e7824f41ba42b4fc275aa89de5dc7ac","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish sg members change, for port-delete, it is"},{"line_number":22,"context_line":"no need to clean ip_conntrack, for port_update which updates from one"},{"line_number":23,"context_line":"sg to another, it need to clean ip_conntrack."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This patch changes the RPC method \u0027security_groups_member_updated\u0027 that"},{"line_number":26,"context_line":"neutron-server sends to l2-agent, it add a new parameter named"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a740942_87967c3d","line":23,"updated":"2015-12-07 13:03:47.000000000","message":"nit: need -\u003e needs","commit_id":"eeaa14917194cbc42e377a9d1895ca96eeaa98f2"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"c11285fb90f11271b5367a8e82b25a563ae8b106","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish sg members change, for port-delete, it is"},{"line_number":22,"context_line":"no need to clean ip_conntrack, for port_update which updates from one"},{"line_number":23,"context_line":"sg to another, it need to clean ip_conntrack."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This patch changes the RPC method \u0027security_groups_member_updated\u0027 that"},{"line_number":26,"context_line":"neutron-server sends to l2-agent, it add a new parameter named"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a740942_c542c70e","line":23,"in_reply_to":"7a740942_87967c3d","updated":"2015-12-09 09:19:25.000000000","message":"Done","commit_id":"eeaa14917194cbc42e377a9d1895ca96eeaa98f2"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"a22ea8947aba0b1a3ed10896051ebaa10c8c9c8e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between type of change, changes port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_conntrack, port_update which updates from one"},{"line_number":23,"context_line":"sg to another, it needs to clean ip conntrack."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7a740942_aecce1bb","line":21,"updated":"2015-12-10 16:37:59.000000000","message":"Sorry, I guess I should have been clearer and specified the suggested phrasing, versus differences.\n\n    This patch will distinguish between the type of change. For port-delete,\n    there is no need to clean ip_cnntrack. For port_update from one sg to\n    another, it needs to clean ip_conntrack.","commit_id":"a2dd9327a51d6fb3dd5d378e5719568ab424aee6"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"45590faa14ab42fc7cd09a39345d8b69b47e2420","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between type of change, changes port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_conntrack, port_update which updates from one"},{"line_number":23,"context_line":"sg to another, it needs to clean ip conntrack."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"fa69d971_806b58b6","line":21,"in_reply_to":"7a740942_aecce1bb","updated":"2016-01-07 03:26:56.000000000","message":"thx for your suggestion","commit_id":"a2dd9327a51d6fb3dd5d378e5719568ab424aee6"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"e86dc096ce0742761582c42bb5b425305728cb17","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This patch changes the RPC method \u0027security_groups_member_updated\u0027 that"},{"line_number":26,"context_line":"neutron-server sends to l2-agent, it add a new parameter named"},{"line_number":27,"context_line":"\u0027sg_method\u0027, if security group members change, l2-agent can clearly"},{"line_number":28,"context_line":"get the change."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I4e2fa16bf59df26d6aea0d9b94ee8204c4743d4d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5a710552_6e57f902","line":27,"updated":"2015-12-15 13:38:16.000000000","message":"Is it possible to pass a constant instead of string?","commit_id":"a2dd9327a51d6fb3dd5d378e5719568ab424aee6"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"45590faa14ab42fc7cd09a39345d8b69b47e2420","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This patch changes the RPC method \u0027security_groups_member_updated\u0027 that"},{"line_number":26,"context_line":"neutron-server sends to l2-agent, it add a new parameter named"},{"line_number":27,"context_line":"\u0027sg_method\u0027, if security group members change, l2-agent can clearly"},{"line_number":28,"context_line":"get the change."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I4e2fa16bf59df26d6aea0d9b94ee8204c4743d4d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"fa69d971_20a14cf8","line":27,"in_reply_to":"5a710552_6e57f902","updated":"2016-01-07 03:26:56.000000000","message":"let me check it","commit_id":"a2dd9327a51d6fb3dd5d378e5719568ab424aee6"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"596baa356ac93a1cb6e75dfd793945f36c9a5489","unresolved":false,"context_lines":[{"line_number":23,"context_line":"another, it needs to clean ip_conntrack."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This patch changes the RPC method \u0027security_groups_member_updated\u0027 that"},{"line_number":26,"context_line":"neutron-server sends to l2-agent, it add a new parameter named"},{"line_number":27,"context_line":"\u0027sg_method\u0027, if security group members change, l2-agent can clearly"},{"line_number":28,"context_line":"get the change."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"da6ed579_27404d56","line":26,"range":{"start_line":26,"start_character":37,"end_line":26,"end_character":40},"updated":"2016-01-12 15:23:02.000000000","message":"adds","commit_id":"d33a6a0242dd71cd330ee0537c91de3a515a6c0a"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"6395acdb35f1543e1a7fb452890a5111572aaa92","unresolved":false,"context_lines":[{"line_number":23,"context_line":"another, it needs to clean ip_conntrack."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This patch changes the RPC method \u0027security_groups_member_updated\u0027 that"},{"line_number":26,"context_line":"neutron-server sends to l2-agent, it add a new parameter named"},{"line_number":27,"context_line":"\u0027sg_method\u0027, if security group members change, l2-agent can clearly"},{"line_number":28,"context_line":"get the change."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"da6ed579_2630e1e7","line":26,"range":{"start_line":26,"start_character":37,"end_line":26,"end_character":40},"in_reply_to":"da6ed579_27404d56","updated":"2016-01-14 12:16:24.000000000","message":"Done","commit_id":"d33a6a0242dd71cd330ee0537c91de3a515a6c0a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be592cb71f8d7f79bd1c200bcf41ac86718a1891","unresolved":false,"context_lines":[{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between the type of change. For port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_cnntrack. For port_update from one sg to"},{"line_number":23,"context_line":"another, it needs to clean ip_conntrack."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This patch changes the RPC method \u0027security_groups_member_updated\u0027 that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7a5de9d1_58cbca1e","line":22,"updated":"2016-01-28 14:20:58.000000000","message":"nit: ip_conntrack","commit_id":"b6e5d2be4d1bf984b83a683324549ca8256af2a2"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"b4791b6c02002c05e2bebfcebf4c913ea11546db","unresolved":false,"context_lines":[{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between the type of change. For port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_cnntrack. For port_update from one sg to"},{"line_number":23,"context_line":"another, it needs to clean ip_conntrack."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This patch changes the RPC method \u0027security_groups_member_updated\u0027 that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7a5de9d1_4dc76645","line":22,"in_reply_to":"7a5de9d1_58cbca1e","updated":"2016-01-29 00:57:50.000000000","message":"Done","commit_id":"b6e5d2be4d1bf984b83a683324549ca8256af2a2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"cbfbfb6aff73f55b0876baa6339ea8a6c0379236","unresolved":false,"context_lines":[{"line_number":14,"context_line":"   delete these VMs, the l2 agents take a lot of time to clean"},{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, and port\u0027s status changes"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"},{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3afc51ec_03141742","line":17,"range":{"start_line":17,"start_character":46,"end_line":17,"end_character":53},"updated":"2016-03-13 22:39:20.000000000","message":"updated","commit_id":"d535e5f88319384714aa27b7b8ca588926f855d6"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"bb9a1b97dd3ba82b231deeeeb09d8ba7d1cb47a6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"   delete these VMs, the l2 agents take a lot of time to clean"},{"line_number":15,"context_line":"   up the ip_conntrack."},{"line_number":16,"context_line":"2. when we create a VM in one compute node, and port\u0027s status changes"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"},{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3afc51ec_faff09ff","line":17,"range":{"start_line":17,"start_character":46,"end_line":17,"end_character":53},"in_reply_to":"3afc51ec_03141742","updated":"2016-03-14 03:25:54.000000000","message":"got it","commit_id":"d535e5f88319384714aa27b7b8ca588926f855d6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"cbfbfb6aff73f55b0876baa6339ea8a6c0379236","unresolved":false,"context_lines":[{"line_number":16,"context_line":"2. when we create a VM in one compute node, and port\u0027s status changes"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"},{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between the type of change. For port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_conntrack. For port_update from one sg to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3afc51ec_a32563ac","line":19,"updated":"2016-03-13 22:39:20.000000000","message":"I am not sure whether the patch tries to solve 2. In that case, I would assume that \u0027member_update\u0027 is triggered for each port state transition, which still probably means conntrack call per port status change.\n\nAm I missing something?","commit_id":"d535e5f88319384714aa27b7b8ca588926f855d6"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"bb9a1b97dd3ba82b231deeeeb09d8ba7d1cb47a6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"2. when we create a VM in one compute node, and port\u0027s status changes"},{"line_number":17,"context_line":"   from DOWN -\u003e BUILD -\u003e ACTIVE, devices_with_udpated_sg_members in"},{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between the type of change. For port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_conntrack. For port_update from one sg to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3afc51ec_9a47e54a","line":19,"in_reply_to":"3afc51ec_a32563ac","updated":"2016-03-14 03:25:54.000000000","message":"hi Ihar Hrachyshka, you are right, if we update a port from sgA to sgB, \u0027member_update\u0027 is triggered, but I don\u0027t think there are use cases to bulk update port\u0027s sg","commit_id":"d535e5f88319384714aa27b7b8ca588926f855d6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8a6f78e4ea9669bae40069214ffc15f7557f919c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between the type of change. For port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_conntrack. For port_update from one sg to"},{"line_number":23,"context_line":"another, it needs to clean ip_conntrack."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3afc51ec_6616b8f2","line":21,"updated":"2016-03-14 11:17:41.000000000","message":"I\u0027m not sure I agree for port-delete.\n\nWouldn\u0027t ignoring port-delete leave the conntrack information, and when we create a new port with the same conntrack zone, will that take that state again?, it would be very unlucky that it get\u0027s the exact same IP address, but couldn\u0027t it happen? or am I wrong?, \n\nmay be that\u0027s less critical that the current very slow bulk port delete, but we should be aware and consider such implications.\n\nMay be we should ensure zone cleanup at *port creation* when a zone is assigned? This way we defer the cleanup to the last necessary moment. To decrease the chance of that happening, we could randomize the zone id assignment, or may be it was random already..","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"6ffcb2c9cb05bb7cb680a3f9ca4e59d36d3b4096","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between the type of change. For port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_conntrack. For port_update from one sg to"},{"line_number":23,"context_line":"another, it needs to clean ip_conntrack."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3afc51ec_3b5f7ae6","line":21,"in_reply_to":"3afc51ec_047eaf18","updated":"2016-03-15 02:58:19.000000000","message":"got it","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"2b3b3fd7c94208a634ff94bc821182987975bf16","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between the type of change. For port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_conntrack. For port_update from one sg to"},{"line_number":23,"context_line":"another, it needs to clean ip_conntrack."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3afc51ec_c2a67f0f","line":21,"in_reply_to":"3afc51ec_292123b5","updated":"2016-03-14 17:15:40.000000000","message":"I think that the connection is not tracked to the port device, as it indicated the non-zone implementation where tracked connections for port-a was also accepted in port-b with same IP just in different net.\n\nSo when you delete the port, the connection won\u0027t be terminated in the conntrack. \n\nStill, the probability of what I\u0027m describing to happen I\u0027d guess is very low or zero.\n\nI\u0027d like @kevinbenton to chime in here too. And I\u0027d probably be happy to let it happen in favor of better scale, although it may need to be documented.\n\nThe 2nd option is cleaning the zone at new port creation, but we\u0027d be just moving the problem from one place to another.","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"5d51b7f96e5c19f05977ca451d11fe8cda64b2ca","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between the type of change. For port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_conntrack. For port_update from one sg to"},{"line_number":23,"context_line":"another, it needs to clean ip_conntrack."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3afc51ec_292123b5","line":21,"in_reply_to":"3afc51ec_6616b8f2","updated":"2016-03-14 11:48:26.000000000","message":"hi ajo, thx for your review and comments. when we delete a port, the connection will termination and the ip conntrack will be expired, so I think even if a new port use and same IP and same zone, there is no problem, what do you think","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ddafca78597aca721f236a53b43b7f56e0c842a6","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between the type of change. For port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_conntrack. For port_update from one sg to"},{"line_number":23,"context_line":"another, it needs to clean ip_conntrack."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3afc51ec_047eaf18","line":21,"in_reply_to":"3afc51ec_c2a67f0f","updated":"2016-03-14 18:59:39.000000000","message":"Yes, Miguel is right. I would actually like to see a TODO comment in the code itself saying that deletes should be handled somehow in a little bit safer manner.","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"6ffcb2c9cb05bb7cb680a3f9ca4e59d36d3b4096","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   IptablesFirewallDriver records twice, so conntrack command executes"},{"line_number":19,"context_line":"   twice for one ip conntrack."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This patch will distinguish between the type of change. For port-delete,"},{"line_number":22,"context_line":"there is no need to clean ip_conntrack. For port_update from one sg to"},{"line_number":23,"context_line":"another, it needs to clean ip_conntrack."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3afc51ec_9b47ae1c","line":21,"in_reply_to":"3afc51ec_c2a67f0f","updated":"2016-03-15 02:58:19.000000000","message":"very agree","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"df2b7cf482bc1f6a7f1c70e8513b416281b6ba43","unresolved":false,"context_lines":[{"line_number":28,"context_line":"get the change."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I4e2fa16bf59df26d6aea0d9b94ee8204c4743d4d"},{"line_number":31,"context_line":"Partial-Bug: #1513765"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3afc51ec_1b9c74bf","line":31,"updated":"2016-03-14 08:10:28.000000000","message":"what would it take to close the bug?","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"6ca40328c58344f0b635829f38493d2ef8b37cc4","unresolved":false,"context_lines":[{"line_number":28,"context_line":"get the change."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I4e2fa16bf59df26d6aea0d9b94ee8204c4743d4d"},{"line_number":31,"context_line":"Partial-Bug: #1513765"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3afc51ec_11057379","line":31,"in_reply_to":"3afc51ec_1b9c74bf","updated":"2016-03-14 09:18:00.000000000","message":"yes, it should be Closes-bug","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"}],"neutron/agent/firewall.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"1442fa73206010c40ffb8f168bffc5db72564896","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        raise NotImplementedError()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def security_group_updated(self, action_type, sec_group_ids,"},{"line_number":121,"context_line":"                               device_id\u003dNone, method\u003dNone):"},{"line_number":122,"context_line":"        \"\"\"Called when a security group is updated.\"\"\""},{"line_number":123,"context_line":"        raise NotImplementedError()"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_700e5b8d","line":121,"updated":"2015-11-12 08:53:49.000000000","message":"Introducing a method here on the FirewallDriver will not allow backportability (consider that out-of-tree drivers could be implementing the FirewallDriver API).\n\nWe should make something backportable for the big-tent if possible, or otherwise / alternatively, the backport must differ from this, but not sure if that\u0027s a good thing.","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"4353d6c180aa66e376b422b405a8b2c71cc57a97","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        raise NotImplementedError()"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def security_group_updated(self, action_type, sec_group_ids,"},{"line_number":139,"context_line":"                               device_id\u003dNone, method\u003dNone):"},{"line_number":140,"context_line":"        \"\"\"Called when a security group is updated."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        Note: This method needs to be implemented by the firewall drivers"}],"source_content_type":"text/x-python","patch_set":17,"id":"5aef4532_2860e700","line":139,"updated":"2016-03-08 20:07:31.000000000","message":"This is not backward compatible for out-of-tree firewall drivers. They will have defined this method without the \u0027method\u0027 kwarg and will now break.\n\nTo do this in a backward-compatible way, add a new method that accepts this \u0027method\u0027 kwarg that raises NotImplementedError() by default just like these. Then on L212 of security groups RPC try to call the new method first and catch NotImplementedError to fallback to the old method that doesn\u0027t take this new kwarg.","commit_id":"d535e5f88319384714aa27b7b8ca588926f855d6"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"294089b1c2b6cc85c001b38d3658c6687b90f9ad","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        raise NotImplementedError()"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def security_group_updated(self, action_type, sec_group_ids,"},{"line_number":139,"context_line":"                               device_id\u003dNone, method\u003dNone):"},{"line_number":140,"context_line":"        \"\"\"Called when a security group is updated."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        Note: This method needs to be implemented by the firewall drivers"}],"source_content_type":"text/x-python","patch_set":17,"id":"5aef4532_2a4bb1ca","line":139,"in_reply_to":"5aef4532_2860e700","updated":"2016-03-10 05:58:30.000000000","message":"I think you are right, thx for your suggestion, kevin :)","commit_id":"d535e5f88319384714aa27b7b8ca588926f855d6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8a6f78e4ea9669bae40069214ffc15f7557f919c","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        Note: This method needs to be implemented by the firewall drivers"},{"line_number":153,"context_line":"        which use enhanced RPC for security_groups."},{"line_number":154,"context_line":"        \"\"\""},{"line_number":155,"context_line":"        raise NotImplementedError()"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class NoopFirewallDriver(FirewallDriver):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3afc51ec_66199879","line":155,"updated":"2016-03-14 11:17:41.000000000","message":"see later comments here, you could provide a default method that calls t o self.security_group_updated(...) with no method, so you avoid the later try/except block, resulting cleaner code.\n\nYou could even consider adding a debug log message, so developers could see the opportunity to implement this new method if they find it useful.","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"7bc908f96389b0369e4ed9ef6b3b1ffe09b16f9b","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        Note: This method needs to be implemented by the firewall drivers"},{"line_number":153,"context_line":"        which use enhanced RPC for security_groups."},{"line_number":154,"context_line":"        \"\"\""},{"line_number":155,"context_line":"        raise NotImplementedError()"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class NoopFirewallDriver(FirewallDriver):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3afc51ec_b6dc3fe5","line":155,"in_reply_to":"3afc51ec_66199879","updated":"2016-03-15 04:03:10.000000000","message":"very good suggestion","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"}],"neutron/agent/linux/iptables_firewall.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f63ddeed6ace8b379de8143343c209c1c2f4686d","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        elif action_type \u003d\u003d \u0027sg_member\u0027:"},{"line_number":138,"context_line":"            if device_ids:"},{"line_number":139,"context_line":"                self.updated_sg_members.update(device_ids)"},{"line_number":140,"context_line":"            elif method \u003d\u003d \u0027member_update\u0027:"},{"line_number":141,"context_line":"                self._update_remote_security_group_members(sec_group_ids)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def update_security_group_rules(self, sg_id, sg_rules):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_34a33802","line":140,"updated":"2015-11-18 11:21:57.000000000","message":"This is the only place where a new argument \"method\" is used.\nI understand it is useful, but a new argument in RPC method prevents us from backporting a patch.\n\nCan we split your patch into two pieces?\n\n- what we can do without adding \"method\" parameter in the RPC method, and\n- what we can do by passing \"method\" parameter in the RPC method\n\nI think some of improvements proposed here can be applicable even without \"method\" parameter.\n\nCan you confirm?","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"1df6f3556753c622d88d30b6fc9bfa0a1a40d787","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        elif action_type \u003d\u003d \u0027sg_member\u0027:"},{"line_number":138,"context_line":"            if device_ids:"},{"line_number":139,"context_line":"                self.updated_sg_members.update(device_ids)"},{"line_number":140,"context_line":"            elif method \u003d\u003d \u0027member_update\u0027:"},{"line_number":141,"context_line":"                self._update_remote_security_group_members(sec_group_ids)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def update_security_group_rules(self, sg_id, sg_rules):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_f25fd9e2","line":140,"in_reply_to":"ba8a016a_34a33802","updated":"2015-11-19 01:12:31.000000000","message":"your suggestion is very good, it is better to split this patch into two patch","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab14f42f9a64a7f7157c4db11a297bec7a744276","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        elif action_type \u003d\u003d \u0027sg_member\u0027:"},{"line_number":136,"context_line":"            if device_ids:"},{"line_number":137,"context_line":"                self.updated_sg_members.update(device_ids)"},{"line_number":138,"context_line":"            elif method \u003d\u003d \u0027member_update\u0027:"},{"line_number":139,"context_line":"                self._update_remote_security_group_members(sec_group_ids)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def update_security_group_rules(self, sg_id, sg_rules):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_1b0ba7d7","line":138,"updated":"2015-12-02 19:33:29.000000000","message":"Will caller enforce default of member_update, such that there cannot be any other case? If so, is above change being done for readability? If not, should we log a (programming) error?","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"96628abf0a76c920d4d9f388be022c9a8a89e397","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        elif action_type \u003d\u003d \u0027sg_member\u0027:"},{"line_number":136,"context_line":"            if device_ids:"},{"line_number":137,"context_line":"                self.updated_sg_members.update(device_ids)"},{"line_number":138,"context_line":"            elif method \u003d\u003d \u0027member_update\u0027:"},{"line_number":139,"context_line":"                self._update_remote_security_group_members(sec_group_ids)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def update_security_group_rules(self, sg_id, sg_rules):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_3637904e","line":138,"in_reply_to":"9a8ffd7b_1b0ba7d7","updated":"2015-12-03 03:13:02.000000000","message":"the value of method: member_update, member_add, member_delete, but just member_update method need to update \u0027devices_with_updated_sg_members\u0027","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"bb6debef0e7824f41ba42b4fc275aa89de5dc7ac","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        elif action_type \u003d\u003d \u0027sg_member\u0027:"},{"line_number":136,"context_line":"            if device_ids:"},{"line_number":137,"context_line":"                self.updated_sg_members.update(device_ids)"},{"line_number":138,"context_line":"            elif method \u003d\u003d \u0027member_update\u0027:"},{"line_number":139,"context_line":"                self._update_remote_security_group_members(sec_group_ids)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def update_security_group_rules(self, sg_id, sg_rules):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_c701e407","line":138,"updated":"2015-12-07 13:03:47.000000000","message":"So, it\u0027s a subtle change that we\u0027ll only update sg, when member_update method, whereas original did it for any method. Do we have a negative test case that shows call is NOT made, if method is not member_update (I see the positive test)?","commit_id":"eeaa14917194cbc42e377a9d1895ca96eeaa98f2"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"74a6264f77a2edd3f6154e2ca79cf1bdf5e1ab0f","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        elif action_type \u003d\u003d \u0027sg_member\u0027:"},{"line_number":136,"context_line":"            if device_ids:"},{"line_number":137,"context_line":"                self.updated_sg_members.update(device_ids)"},{"line_number":138,"context_line":"            elif method \u003d\u003d \u0027member_update\u0027:"},{"line_number":139,"context_line":"                self._update_remote_security_group_members(sec_group_ids)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def update_security_group_rules(self, sg_id, sg_rules):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_c842de0e","line":138,"in_reply_to":"7a740942_c701e407","updated":"2015-12-09 09:38:30.000000000","message":"I check the unit tests, you can see the negative test in test_securitygroups_rpc.py in line #2760 and #2763","commit_id":"eeaa14917194cbc42e377a9d1895ca96eeaa98f2"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"c11285fb90f11271b5367a8e82b25a563ae8b106","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        elif action_type \u003d\u003d \u0027sg_member\u0027:"},{"line_number":136,"context_line":"            if device_ids:"},{"line_number":137,"context_line":"                self.updated_sg_members.update(device_ids)"},{"line_number":138,"context_line":"            elif method \u003d\u003d \u0027member_update\u0027:"},{"line_number":139,"context_line":"                self._update_remote_security_group_members(sec_group_ids)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def update_security_group_rules(self, sg_id, sg_rules):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_e53903a5","line":138,"in_reply_to":"7a740942_c701e407","updated":"2015-12-09 09:19:25.000000000","message":"agree to add negative test","commit_id":"eeaa14917194cbc42e377a9d1895ca96eeaa98f2"}],"neutron/agent/securitygroups_rpc.py":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"8b8cb76812d15c1095f30dbd7b91641e97073276","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            \u0027security_group_source_groups\u0027,"},{"line_number":192,"context_line":"            \u0027sg_member\u0027, method)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _security_group_updated(self, security_groups, attribute, action_type,"},{"line_number":195,"context_line":"                                method\u003dNone):"},{"line_number":196,"context_line":"        devices \u003d []"},{"line_number":197,"context_line":"        sec_grp_set \u003d set(security_groups)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_ee1948d8","line":194,"updated":"2015-11-11 08:23:48.000000000","message":"If this function is not going to be used anywhere else, then a sugestion may be to move the default parameter ( method\u003dNone) from this function to security_groups_member_updated","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"2355ef5fd096e5486998e23dab53bb1d3d4a7cd9","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            \u0027security_group_source_groups\u0027,"},{"line_number":192,"context_line":"            \u0027sg_member\u0027, method)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _security_group_updated(self, security_groups, attribute, action_type,"},{"line_number":195,"context_line":"                                method\u003dNone):"},{"line_number":196,"context_line":"        devices \u003d []"},{"line_number":197,"context_line":"        sec_grp_set \u003d set(security_groups)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_9140af08","line":194,"in_reply_to":"da85f559_ee1948d8","updated":"2015-11-12 02:34:42.000000000","message":"method security_groups_rule_updated and security_groups_member_updated all use this method, so I set default value for parameter method\u003dNone","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8a6f78e4ea9669bae40069214ffc15f7557f919c","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            if sec_grp_set \u0026 set(device.get(attribute, [])):"},{"line_number":210,"context_line":"                devices.append(device[\u0027device\u0027])"},{"line_number":211,"context_line":"        if devices:"},{"line_number":212,"context_line":"            if self.use_enhanced_rpc:"},{"line_number":213,"context_line":"                try:"},{"line_number":214,"context_line":"                    self.firewall.security_group_updated_with_operation("},{"line_number":215,"context_line":"                        action_type, sec_grp_set, method\u003dmethod)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3afc51ec_e0946fe3","line":212,"updated":"2016-03-14 11:17:41.000000000","message":"I know this is unrelated, but I believe it\u0027s time to look at deprecating the older \"non-enhanced\" RPC, we\u0027ve had enough headroom to verify things work fine (better in enhanced mode), and we can cleanup the older code paths now.\n\n@shz, do you have time to tackle that during Newton?, it was in fact in my TODO list, but it keeps falling through the cracks.","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"5d51b7f96e5c19f05977ca451d11fe8cda64b2ca","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            if sec_grp_set \u0026 set(device.get(attribute, [])):"},{"line_number":210,"context_line":"                devices.append(device[\u0027device\u0027])"},{"line_number":211,"context_line":"        if devices:"},{"line_number":212,"context_line":"            if self.use_enhanced_rpc:"},{"line_number":213,"context_line":"                try:"},{"line_number":214,"context_line":"                    self.firewall.security_group_updated_with_operation("},{"line_number":215,"context_line":"                        action_type, sec_grp_set, method\u003dmethod)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3afc51ec_ec23c9a5","line":212,"in_reply_to":"3afc51ec_e0946fe3","updated":"2016-03-14 11:48:26.000000000","message":"I think I can do it in Newton :)","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8a6f78e4ea9669bae40069214ffc15f7557f919c","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        if devices:"},{"line_number":212,"context_line":"            if self.use_enhanced_rpc:"},{"line_number":213,"context_line":"                try:"},{"line_number":214,"context_line":"                    self.firewall.security_group_updated_with_operation("},{"line_number":215,"context_line":"                        action_type, sec_grp_set, method\u003dmethod)"},{"line_number":216,"context_line":"                except NotImplementedError:"},{"line_number":217,"context_line":"                    self.firewall.security_group_updated("}],"source_content_type":"text/x-python","patch_set":18,"id":"3afc51ec_40d563b7","line":214,"updated":"2016-03-14 11:17:41.000000000","message":"good, I see we try , and retry if the new operation is not available on the older agents.\n\nWe could put this in the default security_group_updated_with_operation, so if the firewall doesn\u0027t override the block, it will be automatically translated to security_group_updated without the method type, and you save a try/except block here","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"5d51b7f96e5c19f05977ca451d11fe8cda64b2ca","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        if devices:"},{"line_number":212,"context_line":"            if self.use_enhanced_rpc:"},{"line_number":213,"context_line":"                try:"},{"line_number":214,"context_line":"                    self.firewall.security_group_updated_with_operation("},{"line_number":215,"context_line":"                        action_type, sec_grp_set, method\u003dmethod)"},{"line_number":216,"context_line":"                except NotImplementedError:"},{"line_number":217,"context_line":"                    self.firewall.security_group_updated("}],"source_content_type":"text/x-python","patch_set":18,"id":"3afc51ec_6c5e9913","line":214,"in_reply_to":"3afc51ec_40d563b7","updated":"2016-03-14 11:48:26.000000000","message":"let me try it as your suggestion","commit_id":"8402c68cd0b36c127a5a5d86abb50bda8be23f41"}],"neutron/api/rpc/handlers/securitygroups_rpc.py":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"8b8cb76812d15c1095f30dbd7b91641e97073276","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.4\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_2e4af0ac","line":152,"updated":"2015-11-11 08:23:48.000000000","message":"Maybe you can define this constant somewhere, instead of hardcoding it here, so that if the RPC version ever changes or is required to change, then you wont have to grep the hard-coded value in the code","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"2355ef5fd096e5486998e23dab53bb1d3d4a7cd9","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.4\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_f1efbb1b","line":152,"in_reply_to":"da85f559_2e4af0ac","updated":"2015-11-12 02:34:42.000000000","message":"Reedip, thx for your suggestion, I very agree with you, but I \ndon\u0027t know why method security_groups_provider_updated directly use 1.3 version in line #162, but I don\u0027t find 1.2 version","commit_id":"d8b3fad5de84122439e84c38d74245f6130d9441"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"1442fa73206010c40ffb8f168bffc5db72564896","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.4\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_50e797ab","line":152,"updated":"2015-11-12 08:53:49.000000000","message":"I guess this is also non-backportable :/","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9b94e3be9e0a0131f4222267c41ec5adac646bcd","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.4\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_b2ce312b","line":152,"in_reply_to":"ba8a016a_120cddeb","updated":"2015-11-19 01:27:29.000000000","message":"Sorry for confusing. It seems I thought to revisit this comment but I push the review button before doing it :-(\n\nWhen we add a new parameter to an RPC method, we need to bump the RPC version. What I would like to say in the above comment is that if we would like to backport it, bumping RPC version need s to be avoided.","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"9dd9137ebcd2e17127545ee3dff4719dba1a8774","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.4\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_95e0ad97","line":152,"in_reply_to":"ba8a016a_43013204","updated":"2015-11-19 08:40:49.000000000","message":"I got it, thanks, I will split in into two patch as soon as possible as your suggestion","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"72b763c027f088cfbfd40276d3f5b8410ba5368f","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.4\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_43013204","line":152,"in_reply_to":"ba8a016a_4865d11b","updated":"2015-11-19 07:39:13.000000000","message":"After looking at ovs-agent code, I think a new version should be 1.5.\n1.4 is already used [1].\n\n- [1] https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L137","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"1df6f3556753c622d88d30b6fc9bfa0a1a40d787","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.4\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_120cddeb","line":152,"in_reply_to":"ba8a016a_5a5f3b41","updated":"2015-11-19 01:12:31.000000000","message":"if we split this patch into two patches, do you mean I don\u0027t bump the RPC version, but add the new parameter or in new patch bumping RPC version and adding new parameter?","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"04693a5a86ff70112d1faaebf90ff39b0695aa93","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.4\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_4865d11b","line":152,"in_reply_to":"ba8a016a_7260c901","updated":"2015-11-19 07:36:16.000000000","message":"This is the tricky point of our current agent RPC :-(\n\nThis class is a sender side of RPC from server to l2-agent.\nIf you see l2-agent side (neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py),\nyou can find the history of the RPC version.\nRPC version (server -\u003e agent) 1.2 is used for DVR support.\nThis is because all of the callback classes (agent side) are implemented as mix-ins and as a result RPC version needs to be unique among all RPC version (from neutron-server to l2-agent),\n\najo and I discussed about this before and agreed this is a problem to be fixed soon.","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"450930d9006917dabc5dee18d201717d5cfd5c56","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.4\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_7260c901","line":152,"in_reply_to":"ba8a016a_b2ce312b","updated":"2015-11-19 01:31:44.000000000","message":"I got it, thanks very much for your clarifying! I have another question, why there is no version 1.2, and #line 162 directly use version 1.3","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"f63ddeed6ace8b379de8143343c209c1c2f4686d","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.4\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_5a5f3b41","line":152,"in_reply_to":"da85f559_50e797ab","updated":"2015-11-18 11:21:57.000000000","message":"Yes. bumping RPC version needs to be avoided.","commit_id":"e4ecda311b262f3426d6fe8cf3bb776bcd802126"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"e5a0d89a777064a0cce2237fa507bb91274a5bce","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.5\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_c42597c2","line":152,"updated":"2015-12-01 15:42:58.000000000","message":"Where does 1.5 come from?  It should at least me documented in the comments above.","commit_id":"eefd1f0082083d4c58ce8fdf760dc4d63fe71704"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"96e7d301a295300d8ec17215c9968e5c5b18d6ae","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.5\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_7e60cf35","line":152,"in_reply_to":"9a8ffd7b_c42597c2","updated":"2015-12-02 07:11:14.000000000","message":"please read the comments at patch set#2, we have talk about it:\n\"This class is a sender side of RPC from server to l2-agent. If you see l2-agent side (neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py), you can find the history of the RPC version. RPC version (server -\u003e agent) 1.2 is used for DVR support. This is because all of the callback classes (agent side) are implemented as mix-ins and as a result RPC version needs to be unique among all RPC version (from neutron-server to l2-agent)\"","commit_id":"eefd1f0082083d4c58ce8fdf760dc4d63fe71704"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"e5a0d89a777064a0cce2237fa507bb91274a5bce","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        :param security_groups: list of updated security_groups"},{"line_number":202,"context_line":"        \"\"\""},{"line_number":203,"context_line":"        security_groups \u003d kwargs.get(\u0027security_groups\u0027, [])"},{"line_number":204,"context_line":"        method \u003d kwargs.get(\u0027sg_method\u0027, \u0027member_update\u0027)"},{"line_number":205,"context_line":"        LOG.debug(\"Security group member updated on remote: %s\","},{"line_number":206,"context_line":"                  security_groups)"},{"line_number":207,"context_line":"        if not self.sg_agent:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_ff1f0259","line":204,"updated":"2015-12-01 15:42:58.000000000","message":"Every interface that includes SecurityGroupAgentRpcCallbackMixin should now reflect an increased version, but I dont\u0027 see that anywhere in this patch","commit_id":"eefd1f0082083d4c58ce8fdf760dc4d63fe71704"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"96e7d301a295300d8ec17215c9968e5c5b18d6ae","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        :param security_groups: list of updated security_groups"},{"line_number":202,"context_line":"        \"\"\""},{"line_number":203,"context_line":"        security_groups \u003d kwargs.get(\u0027security_groups\u0027, [])"},{"line_number":204,"context_line":"        method \u003d kwargs.get(\u0027sg_method\u0027, \u0027member_update\u0027)"},{"line_number":205,"context_line":"        LOG.debug(\"Security group member updated on remote: %s\","},{"line_number":206,"context_line":"                  security_groups)"},{"line_number":207,"context_line":"        if not self.sg_agent:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_3eb6c78a","line":204,"in_reply_to":"9a8ffd7b_ff1f0259","updated":"2015-12-02 07:11:14.000000000","message":"got it","commit_id":"eefd1f0082083d4c58ce8fdf760dc4d63fe71704"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab14f42f9a64a7f7157c4db11a297bec7a744276","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.5\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_5bbe0faf","line":152,"updated":"2015-12-02 19:33:29.000000000","message":"Should this be a literal/constant vs magic #/string?","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"96628abf0a76c920d4d9f388be022c9a8a89e397","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.5\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_767f58e0","line":152,"in_reply_to":"9a8ffd7b_5bbe0faf","updated":"2015-12-03 03:13:02.000000000","message":"because the RPC version is not continuous, in line#162, version is 1.3","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"596baa356ac93a1cb6e75dfd793945f36c9a5489","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.5\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da6ed579_a24bcb58","line":152,"range":{"start_line":152,"start_character":46,"end_line":152,"end_character":47},"updated":"2016-01-12 15:23:02.000000000","message":"why did we move to hardcoding the version?","commit_id":"d33a6a0242dd71cd330ee0537c91de3a515a6c0a"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"6395acdb35f1543e1a7fb452890a5111572aaa92","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":150,"context_line":"        if not security_groups:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.5\u0027,"},{"line_number":153,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":154,"context_line":"                                    fanout\u003dTrue)"},{"line_number":155,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da6ed579_a939f9d8","line":152,"range":{"start_line":152,"start_character":46,"end_line":152,"end_character":47},"in_reply_to":"da6ed579_a24bcb58","updated":"2016-01-14 12:16:24.000000000","message":"Done","commit_id":"d33a6a0242dd71cd330ee0537c91de3a515a6c0a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"65d8162459f2825cf12b4d5f170d461db35d7dd2","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":151,"context_line":"        if not security_groups:"},{"line_number":152,"context_line":"            return"},{"line_number":153,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.5\u0027,"},{"line_number":154,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":155,"context_line":"                                    fanout\u003dTrue)"},{"line_number":156,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"dae33548_9fceca58","line":153,"updated":"2016-02-15 16:51:38.000000000","message":"increasing the version is right but this is going to break rolling upgrades. The neutron server is upgraded first and will start requiring version 1.5 from agents that won\u0027t support it. See https://review.openstack.org/#/c/266886","commit_id":"bdde7a6b34b0080280646276e2cb73bd7d1df847"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"915dafddc823a702ea787058b51abd8ab30f3416","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        \"\"\"Notify member updated security groups.\"\"\""},{"line_number":151,"context_line":"        if not security_groups:"},{"line_number":152,"context_line":"            return"},{"line_number":153,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.5\u0027,"},{"line_number":154,"context_line":"                                    topic\u003dself._get_security_group_topic(),"},{"line_number":155,"context_line":"                                    fanout\u003dTrue)"},{"line_number":156,"context_line":"        cctxt.cast(context, \u0027security_groups_member_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"dae33548_0e23a5be","line":153,"in_reply_to":"dae33548_9fceca58","updated":"2016-02-15 17:03:41.000000000","message":"Right. See line 163. We should avoid bumping the version here for at least a cycle. Also, see: https://review.openstack.org/#/c/268125/","commit_id":"bdde7a6b34b0080280646276e2cb73bd7d1df847"}],"neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"cbfbfb6aff73f55b0876baa6339ea8a6c0379236","unresolved":false,"context_lines":[{"line_number":741,"context_line":"    #   1.3 Added param devices_to_update to security_groups_provider_updated"},{"line_number":742,"context_line":"    #   1.4 Added support for network_update"},{"line_number":743,"context_line":"    #   1.5 Added param sg_method to security_groups_member_updated"},{"line_number":744,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.5\u0027)"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    def network_delete(self, context, **kwargs):"},{"line_number":747,"context_line":"        LOG.debug(\"network_delete received\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afc51ec_e8090a33","line":744,"updated":"2016-03-13 22:39:20.000000000","message":"Should we bump sr-iov rpc version too?","commit_id":"d535e5f88319384714aa27b7b8ca588926f855d6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2b174d86a277f8a0403ba53776d569d2825e4ffc","unresolved":false,"context_lines":[{"line_number":741,"context_line":"    #   1.3 Added param devices_to_update to security_groups_provider_updated"},{"line_number":742,"context_line":"    #   1.4 Added support for network_update"},{"line_number":743,"context_line":"    #   1.5 Added param sg_method to security_groups_member_updated"},{"line_number":744,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.5\u0027)"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    def network_delete(self, context, **kwargs):"},{"line_number":747,"context_line":"        LOG.debug(\"network_delete received\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afc51ec_693df5ba","line":744,"in_reply_to":"3afc51ec_7a0db93d","updated":"2016-03-14 07:38:22.000000000","message":"Then why does it inherit from the secgroup mixin?","commit_id":"d535e5f88319384714aa27b7b8ca588926f855d6"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"bf2420f3912f2b41530ca9324ae29304fbea9287","unresolved":false,"context_lines":[{"line_number":741,"context_line":"    #   1.3 Added param devices_to_update to security_groups_provider_updated"},{"line_number":742,"context_line":"    #   1.4 Added support for network_update"},{"line_number":743,"context_line":"    #   1.5 Added param sg_method to security_groups_member_updated"},{"line_number":744,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.5\u0027)"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    def network_delete(self, context, **kwargs):"},{"line_number":747,"context_line":"        LOG.debug(\"network_delete received\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"3afc51ec_7a0db93d","line":744,"in_reply_to":"3afc51ec_e8090a33","updated":"2016-03-14 04:10:31.000000000","message":"SRIOV agent does not support security group, so I think there is no need to bump sr-iov rpc version, what do you think?","commit_id":"d535e5f88319384714aa27b7b8ca588926f855d6"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3ef6b99adfe63db98dd6ce653387a318c6d7b46c","unresolved":false,"context_lines":[{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"        # REVISIT(rkukura): Is there any point in calling this before"},{"line_number":1064,"context_line":"        # a binding has been successfully established?"},{"line_number":1065,"context_line":"        self.notify_security_groups_member_updated("},{"line_number":1066,"context_line":"            context, result, \u0027member_add\u0027)"},{"line_number":1067,"context_line":""},{"line_number":1068,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"da6ed579_2e9eea56","line":1065,"updated":"2016-01-12 14:35:11.000000000","message":"The change breaks rolling upgrade scenario: your old Liberty agents should be able to work with notifications issued by Mitaka server. I don\u0027t see how it\u0027s gonna to work. Note we have a similar issue reported for Kilo to Liberty: https://bugs.launchpad.net/neutron/+bug/1531772","commit_id":"d33a6a0242dd71cd330ee0537c91de3a515a6c0a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5c3f8480d02d9e69f9120053efc478b5c6e730d3","unresolved":false,"context_lines":[{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"        # REVISIT(rkukura): Is there any point in calling this before"},{"line_number":1064,"context_line":"        # a binding has been successfully established?"},{"line_number":1065,"context_line":"        self.notify_security_groups_member_updated("},{"line_number":1066,"context_line":"            context, result, \u0027member_add\u0027)"},{"line_number":1067,"context_line":""},{"line_number":1068,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"da6ed579_49d95d21","line":1065,"in_reply_to":"da6ed579_29dae94c","updated":"2016-01-14 12:19:41.000000000","message":"You are right, sorry. I missed you don\u0027t bump the minimal version for the API.","commit_id":"d33a6a0242dd71cd330ee0537c91de3a515a6c0a"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"6395acdb35f1543e1a7fb452890a5111572aaa92","unresolved":false,"context_lines":[{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"        # REVISIT(rkukura): Is there any point in calling this before"},{"line_number":1064,"context_line":"        # a binding has been successfully established?"},{"line_number":1065,"context_line":"        self.notify_security_groups_member_updated("},{"line_number":1066,"context_line":"            context, result, \u0027member_add\u0027)"},{"line_number":1067,"context_line":""},{"line_number":1068,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"da6ed579_29dae94c","line":1065,"in_reply_to":"da6ed579_2e9eea56","updated":"2016-01-14 12:16:24.000000000","message":"hi Ihar Hrachyshka, thx for your review, I have consider the upgrade scenario, notify_security_groups_member_updated use cast RPC method:\ncctxt.cast(context, \u0027security_groups_member_updated\u0027, security_groups\u003dsecurity_groups), and def cast(self, ctxt, method, **kwargs), so there is no problem in your scenario:your old Liberty agents should be able to work with notifications issued by Mitaka server","commit_id":"d33a6a0242dd71cd330ee0537c91de3a515a6c0a"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"9464a619829713518a8576bcc735e1c022075dd2","unresolved":false,"context_lines":[{"line_number":1063,"context_line":"        # REVISIT(rkukura): Is there any point in calling this before"},{"line_number":1064,"context_line":"        # a binding has been successfully established?"},{"line_number":1065,"context_line":"        self.notify_security_groups_member_updated("},{"line_number":1066,"context_line":"            context, result, \u0027member_add\u0027)"},{"line_number":1067,"context_line":""},{"line_number":1068,"context_line":"        try:"},{"line_number":1069,"context_line":"            bound_context \u003d self._bind_port_if_needed(mech_context)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da6ed579_9a1715a3","line":1066,"updated":"2016-01-12 14:30:08.000000000","message":"Can we have just something like an enum for the \u0027member_add\u0027 \u0027member_update\u0027, and \u0027member_delete\u0027 constants?\n\nUsing literals in this way is not the best approach to maintainable code.","commit_id":"d33a6a0242dd71cd330ee0537c91de3a515a6c0a"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"6395acdb35f1543e1a7fb452890a5111572aaa92","unresolved":false,"context_lines":[{"line_number":1063,"context_line":"        # REVISIT(rkukura): Is there any point in calling this before"},{"line_number":1064,"context_line":"        # a binding has been successfully established?"},{"line_number":1065,"context_line":"        self.notify_security_groups_member_updated("},{"line_number":1066,"context_line":"            context, result, \u0027member_add\u0027)"},{"line_number":1067,"context_line":""},{"line_number":1068,"context_line":"        try:"},{"line_number":1069,"context_line":"            bound_context \u003d self._bind_port_if_needed(mech_context)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da6ed579_49495d5f","line":1066,"in_reply_to":"da6ed579_9a1715a3","updated":"2016-01-14 12:16:24.000000000","message":"agree","commit_id":"d33a6a0242dd71cd330ee0537c91de3a515a6c0a"}],"neutron/tests/unit/agent/test_securitygroups_rpc.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"ab14f42f9a64a7f7157c4db11a297bec7a744276","unresolved":false,"context_lines":[{"line_number":1190,"context_line":"        self.agent.refresh_firewall \u003d mock.Mock()"},{"line_number":1191,"context_line":"        self.agent.prepare_devices_filter([\u0027fake_port_id\u0027])"},{"line_number":1192,"context_line":"        self.agent.security_groups_member_updated("},{"line_number":1193,"context_line":"            [\u0027fake_sgid2\u0027, \u0027fake_sgid3\u0027], \u0027member_update\u0027)"},{"line_number":1194,"context_line":"        self.agent.refresh_firewall.assert_has_calls("},{"line_number":1195,"context_line":"            [mock.call.refresh_firewall([self.fake_device[\u0027device\u0027]])])"},{"line_number":1196,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_be536915","line":1193,"updated":"2015-12-02 19:33:29.000000000","message":"Are you adding this for clarity purposes (since it\u0027s the default value, right)?","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"96628abf0a76c920d4d9f388be022c9a8a89e397","unresolved":false,"context_lines":[{"line_number":1190,"context_line":"        self.agent.refresh_firewall \u003d mock.Mock()"},{"line_number":1191,"context_line":"        self.agent.prepare_devices_filter([\u0027fake_port_id\u0027])"},{"line_number":1192,"context_line":"        self.agent.security_groups_member_updated("},{"line_number":1193,"context_line":"            [\u0027fake_sgid2\u0027, \u0027fake_sgid3\u0027], \u0027member_update\u0027)"},{"line_number":1194,"context_line":"        self.agent.refresh_firewall.assert_has_calls("},{"line_number":1195,"context_line":"            [mock.call.refresh_firewall([self.fake_device[\u0027device\u0027]])])"},{"line_number":1196,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_5661f437","line":1193,"in_reply_to":"9a8ffd7b_be536915","updated":"2015-12-03 03:13:02.000000000","message":"yes","commit_id":"43fcb7bf71cd9f121c5ab13556f3adb2e0ed579e"},{"author":{"_account_id":17958,"name":"NGUYEN TUONG THANH","email":"ngtthanh1010@gmail.com","username":"thanhnt"},"change_message_id":"6da4856409dee55ac3ceab5aea2894d199752ca1","unresolved":false,"context_lines":[{"line_number":1335,"context_line":"        self.agent.security_groups_member_updated("},{"line_number":1336,"context_line":"            [\u0027fake_sgid2\u0027, \u0027fake_sgid3\u0027], \u0027member_update\u0027)"},{"line_number":1337,"context_line":""},{"line_number":1338,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e Optimize conntrack: modify RPC method"},{"line_number":1339,"context_line":"        self.agent.refresh_firewall.assert_called_once_with("},{"line_number":1340,"context_line":"            [self.fake_device[\u0027device\u0027]])"},{"line_number":1341,"context_line":"        self.firewall.security_group_updated.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_4d4d4271","line":1338,"updated":"2016-01-08 08:22:01.000000000","message":"This is conflicted. You need to rebase.","commit_id":"37a034d286748cc1d334c8588c2804c8f2538865"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"01e4d1644c6590e9c595f82b948eae9ecb3b784e","unresolved":false,"context_lines":[{"line_number":1203,"context_line":"        self.agent.refresh_firewall \u003d mock.Mock()"},{"line_number":1204,"context_line":"        self.agent.prepare_devices_filter([\u0027fake_port_id\u0027])"},{"line_number":1205,"context_line":"        self.agent.security_groups_member_updated("},{"line_number":1206,"context_line":"            [\u0027fake_sgid2\u0027, \u0027fake_sgid3\u0027], \u0027member_update\u0027)"},{"line_number":1207,"context_line":"        self.agent.refresh_firewall.assert_has_calls("},{"line_number":1208,"context_line":"            [mock.call.refresh_firewall([self.fake_device[\u0027device\u0027]])])"},{"line_number":1209,"context_line":"        self.assertFalse(self.firewall.security_group_updated.called)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da6ed579_54ebe3db","line":1206,"range":{"start_line":1206,"start_character":43,"end_line":1206,"end_character":56},"updated":"2016-01-15 17:06:28.000000000","message":"Would be useful to use the new literals, in the tests as well, for maintainability.","commit_id":"a3f25b5ea672112359f40c54926afaa159cbcee4"}],"neutron/tests/unit/api/rpc/handlers/test_securitygroups_rpc.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be592cb71f8d7f79bd1c200bcf41ac86718a1891","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                                                security_groups\u003d[\u0027fake_sgid\u0027])"},{"line_number":53,"context_line":"        self.rpc.sg_agent.assert_has_calls("},{"line_number":54,"context_line":"            [mock.call.security_groups_member_updated("},{"line_number":55,"context_line":"                [\u0027fake_sgid\u0027], \u0027member_update\u0027)])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def test_security_groups_provider_updated(self):"},{"line_number":58,"context_line":"        self.rpc.security_groups_provider_updated(None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_4bed3224","line":55,"updated":"2016-01-28 14:20:58.000000000","message":"In the agent test you use ext_sg.SG_MEMBER_ACTIONS[\u0027update\u0027] - you should probably be consistent and use it here as well.","commit_id":"b6e5d2be4d1bf984b83a683324549ca8256af2a2"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"b4791b6c02002c05e2bebfcebf4c913ea11546db","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                                                security_groups\u003d[\u0027fake_sgid\u0027])"},{"line_number":53,"context_line":"        self.rpc.sg_agent.assert_has_calls("},{"line_number":54,"context_line":"            [mock.call.security_groups_member_updated("},{"line_number":55,"context_line":"                [\u0027fake_sgid\u0027], \u0027member_update\u0027)])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def test_security_groups_provider_updated(self):"},{"line_number":58,"context_line":"        self.rpc.security_groups_provider_updated(None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_2dd30a06","line":55,"in_reply_to":"7a5de9d1_4bed3224","updated":"2016-01-29 00:57:50.000000000","message":"got it","commit_id":"b6e5d2be4d1bf984b83a683324549ca8256af2a2"}],"neutron/tests/unit/plugins/ml2/test_plugin.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be592cb71f8d7f79bd1c200bcf41ac86718a1891","unresolved":false,"context_lines":[{"line_number":594,"context_line":"                                         \u0027test\u0027, True, context\u003dctx)"},{"line_number":595,"context_line":"            ports \u003d self.deserialize(self.fmt, res)"},{"line_number":596,"context_line":"            used_sg \u003d ports[\u0027ports\u0027][0][\u0027security_groups\u0027]"},{"line_number":597,"context_line":"            m_upd.assert_called_once_with(ctx, used_sg, \u0027member_update\u0027)"},{"line_number":598,"context_line":"            self.assertFalse(p_upd.called)"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    def _check_security_groups_provider_updated_args(self, p_upd_mock, net_id):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_0bf73af6","line":597,"updated":"2016-01-28 14:20:58.000000000","message":"Ditto","commit_id":"b6e5d2be4d1bf984b83a683324549ca8256af2a2"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"b4791b6c02002c05e2bebfcebf4c913ea11546db","unresolved":false,"context_lines":[{"line_number":594,"context_line":"                                         \u0027test\u0027, True, context\u003dctx)"},{"line_number":595,"context_line":"            ports \u003d self.deserialize(self.fmt, res)"},{"line_number":596,"context_line":"            used_sg \u003d ports[\u0027ports\u0027][0][\u0027security_groups\u0027]"},{"line_number":597,"context_line":"            m_upd.assert_called_once_with(ctx, used_sg, \u0027member_update\u0027)"},{"line_number":598,"context_line":"            self.assertFalse(p_upd.called)"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    def _check_security_groups_provider_updated_args(self, p_upd_mock, net_id):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_cd083694","line":597,"in_reply_to":"7a5de9d1_0bf73af6","updated":"2016-01-29 00:57:50.000000000","message":"Done","commit_id":"b6e5d2be4d1bf984b83a683324549ca8256af2a2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"be592cb71f8d7f79bd1c200bcf41ac86718a1891","unresolved":false,"context_lines":[{"line_number":631,"context_line":"                                              data, context\u003dctx)"},{"line_number":632,"context_line":"            ports \u003d self.deserialize(self.fmt, res)"},{"line_number":633,"context_line":"            used_sg \u003d ports[\u0027ports\u0027][0][\u0027security_groups\u0027]"},{"line_number":634,"context_line":"            m_upd.assert_called_once_with(ctx, used_sg, \u0027member_update\u0027)"},{"line_number":635,"context_line":"            self._check_security_groups_provider_updated_args(p_upd, net_id)"},{"line_number":636,"context_line":"            m_upd.reset_mock()"},{"line_number":637,"context_line":"            p_upd.reset_mock()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_2bd1d657","line":634,"updated":"2016-01-28 14:20:58.000000000","message":"Ditto","commit_id":"b6e5d2be4d1bf984b83a683324549ca8256af2a2"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"b4791b6c02002c05e2bebfcebf4c913ea11546db","unresolved":false,"context_lines":[{"line_number":631,"context_line":"                                              data, context\u003dctx)"},{"line_number":632,"context_line":"            ports \u003d self.deserialize(self.fmt, res)"},{"line_number":633,"context_line":"            used_sg \u003d ports[\u0027ports\u0027][0][\u0027security_groups\u0027]"},{"line_number":634,"context_line":"            m_upd.assert_called_once_with(ctx, used_sg, \u0027member_update\u0027)"},{"line_number":635,"context_line":"            self._check_security_groups_provider_updated_args(p_upd, net_id)"},{"line_number":636,"context_line":"            m_upd.reset_mock()"},{"line_number":637,"context_line":"            p_upd.reset_mock()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_8d023e6e","line":634,"in_reply_to":"7a5de9d1_2bd1d657","updated":"2016-01-29 00:57:50.000000000","message":"Done","commit_id":"b6e5d2be4d1bf984b83a683324549ca8256af2a2"}]}
