)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"9afa31c30458f5034f4cb4de6198237e5aa4dff1","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch implements the L2 Agent and"},{"line_number":10,"context_line":"ML2 plugin changes required for the"},{"line_number":11,"context_line":"Blueprint neutron-ovs-dvr."},{"line_number":12,"context_line":"This patch has a dependency on the"},{"line_number":13,"context_line":"L3 extension for DVR."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: If75225898a6f0aeea8b0300b711ca7e01f6b4f9a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAXH%2F%2Ft%2Bk%3D","line":12,"updated":"2014-04-17 23:38:22.000000000","message":"You should make this dependency explicitly by rebasing this patch to any version of the L3 extension patch in review.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch implements the L2 Agent and"},{"line_number":10,"context_line":"ML2 plugin changes required for the"},{"line_number":11,"context_line":"Blueprint neutron-ovs-dvr."},{"line_number":12,"context_line":"This patch has a dependency on the"},{"line_number":13,"context_line":"L3 extension for DVR."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: If75225898a6f0aeea8b0300b711ca7e01f6b4f9a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9ad9bd40_01acca9f","line":12,"in_reply_to":"AAAAXH%2F%2Ft%2Bk%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"L2 Agent/ML2 Plugin changes for L3 DVR"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch implements the L2 Agent and"},{"line_number":10,"context_line":"ML2 plugin changes required for the"},{"line_number":11,"context_line":"Blueprint neutron-ovs-dvr."},{"line_number":12,"context_line":"This patch has a dependency on the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1ae5cdf2_73e54d09","line":9,"updated":"2014-06-23 18:42:40.000000000","message":"nit:  This commit message seems to wrap at an excessively narrow margin.  I don\u0027t know, maybe that\u0027s okay.","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":10,"context_line":"ML2 plugin changes required for the"},{"line_number":11,"context_line":"Blueprint neutron-ovs-dvr."},{"line_number":12,"context_line":"This patch has a dependency on the"},{"line_number":13,"context_line":"L3 extension for DVR."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: If75225898a6f0aeea8b0300b711ca7e01f6b4f9a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ae5cdf2_8b5ff074","line":13,"updated":"2014-06-17 16:41:13.000000000","message":"I would add DocImpact here too, to track the documentation of the agent-side differently from the server-side","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":10,"context_line":"ML2 plugin changes required for the"},{"line_number":11,"context_line":"Blueprint neutron-ovs-dvr."},{"line_number":12,"context_line":"This patch has a dependency on the"},{"line_number":13,"context_line":"L3 extension for DVR."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: If75225898a6f0aeea8b0300b711ca7e01f6b4f9a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ae5cdf2_6a4eb939","line":13,"in_reply_to":"1ae5cdf2_8b5ff074","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"}],"etc/neutron.conf":[{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"1ea51e5922b774361fc3d6353b6fceb198dda0b2","unresolved":false,"context_lines":[{"line_number":78,"context_line":"# base_mac \u003d fa:16:3e:4f:00:00"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"# DVR Base MAC address. The first 3 octets will remain unchanged. If the"},{"line_number":81,"context_line":"# 4th octet is not 00, it will also used. The others will be"},{"line_number":82,"context_line":"# randomly generated."},{"line_number":83,"context_line":"# 3 octet"},{"line_number":84,"context_line":"# dvr_base_mac \u003d fa:16:3f:00:00:00"}],"source_content_type":"text/plain","patch_set":1,"id":"AAAAW3%2F%2FQ9Q%3D","line":81,"updated":"2014-04-15 17:30:18.000000000","message":"Change \"it will also used.\" to \"it will also be used.\"","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":78,"context_line":"# base_mac \u003d fa:16:3e:4f:00:00"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"# DVR Base MAC address. The first 3 octets will remain unchanged. If the"},{"line_number":81,"context_line":"# 4th octet is not 00, it will also used. The others will be"},{"line_number":82,"context_line":"# randomly generated."},{"line_number":83,"context_line":"# 3 octet"},{"line_number":84,"context_line":"# dvr_base_mac \u003d fa:16:3f:00:00:00"}],"source_content_type":"text/plain","patch_set":1,"id":"9ad9bd40_6192f658","line":81,"in_reply_to":"AAAAW3%2F%2FQ9Q%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":86,"context_line":"# 4 octet"},{"line_number":87,"context_line":"# base_mac \u003d fa:16:3e:4f:00:00"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"# DVR Base MAC address. The first 3 octets will remain unchanged. If the"},{"line_number":90,"context_line":"# 4th octet is not 00, it will also be used. The others will be"},{"line_number":91,"context_line":"# randomly generated."},{"line_number":92,"context_line":"# 3 octet"}],"source_content_type":"text/plain","patch_set":3,"id":"1ae5cdf2_8acd9733","line":89,"updated":"2014-06-05 17:49:47.000000000","message":"Why does dvr require it\u0027s own mac address pool?","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":86,"context_line":"# 4 octet"},{"line_number":87,"context_line":"# base_mac \u003d fa:16:3e:4f:00:00"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"# DVR Base MAC address. The first 3 octets will remain unchanged. If the"},{"line_number":90,"context_line":"# 4th octet is not 00, it will also be used. The others will be"},{"line_number":91,"context_line":"# randomly generated."},{"line_number":92,"context_line":"# 3 octet"}],"source_content_type":"text/plain","patch_set":3,"id":"1ae5cdf2_c1cab9a0","line":89,"in_reply_to":"1ae5cdf2_8acd9733","updated":"2014-06-10 05:49:18.000000000","message":"DVR uses a Unique MAC Address per Compute Node to route traffic between VMs residing on different CNs.  This is Unique MAC Address per CN and so it will be carried in frames with different VXLAN identifier each time (based on packets routed between VMs). Further it is based on this MAC Address we identify whether its a DVR Routed frame in OVS rules on both side CNs.  So we wanted to use Unique base mac pool different from the original pool.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"# 4th octet is not 00, it will also be used. The others will be"},{"line_number":92,"context_line":"# randomly generated."},{"line_number":93,"context_line":"# 3 octet"},{"line_number":94,"context_line":"# dvr_base_mac \u003d fa:16:3f:00:00:00"},{"line_number":95,"context_line":"# 4 octet"},{"line_number":96,"context_line":"# dvr_base_mac \u003d fa:16:3f:4f:00:00"},{"line_number":97,"context_line":""}],"source_content_type":"text/plain","patch_set":7,"id":"1ae5cdf2_456074a4","line":94,"updated":"2014-06-17 16:41:13.000000000","message":"I\u0027d rather keep a single option in the example, and explain the two potential values in the comment; a quick scan of this file may confuse people that two options actually exist","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":91,"context_line":"# 4th octet is not 00, it will also be used. The others will be"},{"line_number":92,"context_line":"# randomly generated."},{"line_number":93,"context_line":"# 3 octet"},{"line_number":94,"context_line":"# dvr_base_mac \u003d fa:16:3f:00:00:00"},{"line_number":95,"context_line":"# 4 octet"},{"line_number":96,"context_line":"# dvr_base_mac \u003d fa:16:3f:4f:00:00"},{"line_number":97,"context_line":""}],"source_content_type":"text/plain","patch_set":7,"id":"1ae5cdf2_3e2c014a","line":94,"in_reply_to":"1ae5cdf2_456074a4","updated":"2014-06-19 11:57:20.000000000","message":"I took the cue from the base_mac comments just above this.\r\n\r\nHowever, i fixed the comment here appropriately now.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":92,"context_line":"# randomly generated."},{"line_number":93,"context_line":"# A 4 octet example would be dvr_base_mac \u003d fa:16:3f:4f:00:00"},{"line_number":94,"context_line":"# The default is 3 octet"},{"line_number":95,"context_line":"# dvr_base_mac \u003d fa:16:3f:00:00:00"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"# Maximum amount of retries to generate a unique MAC address"},{"line_number":98,"context_line":"# mac_generation_retries \u003d 16"}],"source_content_type":"text/plain","patch_set":11,"id":"1ae5cdf2_c036c950","line":95,"updated":"2014-06-19 15:46:13.000000000","message":"why does dvr need a separate base mac?","commit_id":"32b4effe3238dff4e7ace9ddd76f4e57a70eae44"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":92,"context_line":"# randomly generated."},{"line_number":93,"context_line":"# A 4 octet example would be dvr_base_mac \u003d fa:16:3f:4f:00:00"},{"line_number":94,"context_line":"# The default is 3 octet"},{"line_number":95,"context_line":"# dvr_base_mac \u003d fa:16:3f:00:00:00"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"# Maximum amount of retries to generate a unique MAC address"},{"line_number":98,"context_line":"# mac_generation_retries \u003d 16"}],"source_content_type":"text/plain","patch_set":11,"id":"1ae5cdf2_f42eba41","line":95,"in_reply_to":"1ae5cdf2_9ec6de9a","updated":"2014-06-24 00:08:38.000000000","message":"I think it\u0027s fair to spend a few word as to why this needs to be different, as I am sure every admin might wonder the same)","commit_id":"32b4effe3238dff4e7ace9ddd76f4e57a70eae44"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":92,"context_line":"# randomly generated."},{"line_number":93,"context_line":"# A 4 octet example would be dvr_base_mac \u003d fa:16:3f:4f:00:00"},{"line_number":94,"context_line":"# The default is 3 octet"},{"line_number":95,"context_line":"# dvr_base_mac \u003d fa:16:3f:00:00:00"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"# Maximum amount of retries to generate a unique MAC address"},{"line_number":98,"context_line":"# mac_generation_retries \u003d 16"}],"source_content_type":"text/plain","patch_set":11,"id":"1ae5cdf2_9ec6de9a","line":95,"in_reply_to":"1ae5cdf2_c036c950","updated":"2014-06-19 16:25:55.000000000","message":"DVR uses Unique MACs to transfer frames between compute nodes.  These MACs are not supposed to match tenant identifiable MACs.  So DVR uses a separate base mac.","commit_id":"32b4effe3238dff4e7ace9ddd76f4e57a70eae44"}],"etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4f8d103a552ad4f28bab253b076243845facd3fa","unresolved":false,"context_lines":[{"line_number":132,"context_line":"# for distributed virtual routing support."},{"line_number":133,"context_line":"#"},{"line_number":134,"context_line":"# enable_distributed_routing \u003d False"},{"line_number":135,"context_line":"enable_distributed_routing \u003d False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"[securitygroup]"},{"line_number":138,"context_line":"# Firewall driver for realizing neutron security group function."}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAXH%2F%2F%2FjY%3D","line":135,"updated":"2014-04-16 01:50:15.000000000","message":"You can remove this line since the default in config.py is already False.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":132,"context_line":"# for distributed virtual routing support."},{"line_number":133,"context_line":"#"},{"line_number":134,"context_line":"# enable_distributed_routing \u003d False"},{"line_number":135,"context_line":"enable_distributed_routing \u003d False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"[securitygroup]"},{"line_number":138,"context_line":"# Firewall driver for realizing neutron security group function."}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAXH%2F%2FkrU%3D","line":135,"in_reply_to":"AAAAXH%2F%2F%2FjY%3D","updated":"2014-04-19 08:08:33.000000000","message":"+1","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":132,"context_line":"# for distributed virtual routing support."},{"line_number":133,"context_line":"#"},{"line_number":134,"context_line":"# enable_distributed_routing \u003d False"},{"line_number":135,"context_line":"enable_distributed_routing \u003d False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"[securitygroup]"},{"line_number":138,"context_line":"# Firewall driver for realizing neutron security group function."}],"source_content_type":"text/x-properties","patch_set":1,"id":"9ad9bd40_21b1cef8","line":135,"in_reply_to":"AAAAXH%2F%2F%2FjY%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":132,"context_line":"# for distributed virtual routing support."},{"line_number":133,"context_line":"#"},{"line_number":134,"context_line":"# enable_distributed_routing \u003d False"},{"line_number":135,"context_line":"enable_distributed_routing \u003d False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"[securitygroup]"},{"line_number":138,"context_line":"# Firewall driver for realizing neutron security group function."}],"source_content_type":"text/x-properties","patch_set":1,"id":"9ad9bd40_819ffa5e","line":135,"in_reply_to":"AAAAXH%2F%2F%2FjY%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":132,"context_line":"# for distributed virtual routing support."},{"line_number":133,"context_line":"#"},{"line_number":134,"context_line":"# enable_distributed_routing \u003d False"},{"line_number":135,"context_line":"enable_distributed_routing \u003d False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"[securitygroup]"},{"line_number":138,"context_line":"# Firewall driver for realizing neutron security group function."}],"source_content_type":"text/x-properties","patch_set":1,"id":"9ad9bd40_4195f23e","line":135,"in_reply_to":"AAAAXH%2F%2FkrU%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":132,"context_line":"# for distributed virtual routing support."},{"line_number":133,"context_line":"#"},{"line_number":134,"context_line":"# enable_distributed_routing \u003d False"},{"line_number":135,"context_line":"enable_distributed_routing \u003d False"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"[securitygroup]"},{"line_number":138,"context_line":"# Firewall driver for realizing neutron security group function."}],"source_content_type":"text/x-properties","patch_set":2,"id":"3ae8d1ca_4cedfd24","line":135,"updated":"2014-05-28 23:34:07.000000000","message":"Don\u0027t think you need this last line as the default is false in the code.","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":133,"context_line":"#"},{"line_number":134,"context_line":"# arp_responder \u003d False"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"# (BoolOpt) Set to True in the server and the agents to enable support"},{"line_number":137,"context_line":"# for distributed virtual routing support."},{"line_number":138,"context_line":"#"},{"line_number":139,"context_line":"# enable_distributed_routing \u003d False"}],"source_content_type":"text/x-properties","patch_set":3,"id":"1ae5cdf2_aeb5c332","line":136,"updated":"2014-06-09 06:44:55.000000000","message":"Seems like enable_distributed_routing is an agent opt and only used in agent code. Should this line be changed to \"Set True in the agents ...\"","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":133,"context_line":"#"},{"line_number":134,"context_line":"# arp_responder \u003d False"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"# (BoolOpt) Set to True in the server and the agents to enable support"},{"line_number":137,"context_line":"# for distributed virtual routing support."},{"line_number":138,"context_line":"#"},{"line_number":139,"context_line":"# enable_distributed_routing \u003d False"}],"source_content_type":"text/x-properties","patch_set":3,"id":"1ae5cdf2_01c4a190","line":136,"in_reply_to":"1ae5cdf2_aeb5c332","updated":"2014-06-10 05:49:18.000000000","message":"Your observation is correct.  This is used only in agent side.  So i will fix the comment appropriately.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":133,"context_line":"#"},{"line_number":134,"context_line":"# arp_responder \u003d False"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"# (BoolOpt) Set to True on L2 agents to enable support "},{"line_number":137,"context_line":"# for distributed virtual routing."},{"line_number":138,"context_line":"#"},{"line_number":139,"context_line":"# enable_distributed_routing \u003d False"}],"source_content_type":"text/x-properties","patch_set":6,"id":"1ae5cdf2_6bb47bd1","line":136,"updated":"2014-06-17 06:20:28.000000000","message":"nit: whitespace","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":136,"context_line":"# (BoolOpt) Set to True on L2 agents to enable support "},{"line_number":137,"context_line":"# for distributed virtual routing."},{"line_number":138,"context_line":"#"},{"line_number":139,"context_line":"# enable_distributed_routing \u003d False"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"[securitygroup]"},{"line_number":142,"context_line":"# Firewall driver for realizing neutron security group function."}],"source_content_type":"text/x-properties","patch_set":7,"id":"1ae5cdf2_eb84f40c","line":139,"updated":"2014-06-17 16:41:13.000000000","message":"Why do we really need this config value? neutron.conf already has \u0027router_distributed\u0027; would it make sense to have router_distributed\u003dTrue on the server side and enable_distributed_routing\u003dFalse on the agent side? Can we have a mixed deployment distributed and non-distributed enabled agents? Could you elaborate?","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":136,"context_line":"# (BoolOpt) Set to True on L2 agents to enable support "},{"line_number":137,"context_line":"# for distributed virtual routing."},{"line_number":138,"context_line":"#"},{"line_number":139,"context_line":"# enable_distributed_routing \u003d False"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"[securitygroup]"},{"line_number":142,"context_line":"# Firewall driver for realizing neutron security group function."}],"source_content_type":"text/x-properties","patch_set":7,"id":"1ae5cdf2_1eeae5d7","line":139,"in_reply_to":"1ae5cdf2_eb84f40c","updated":"2014-06-19 11:57:20.000000000","message":"Ths config value is required in order to have flexibility to make L2 Agent operate in a classic mode (or) DVR mode.  If this flag is available and set to TRUE, the l2 agent will operate in DVR mode, otherwise it will operate as classic L2 Agent.  Customers can choose in their deployment on which nodes they need to run the L2 in DVR Mode.  For example on NN, the customer can retain classid mode of operation of L2 Agent.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"}],"neutron/agent/dvr_rpc.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"9afa31c30458f5034f4cb4de6198237e5aa4dff1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2014, Hewlett Packard, Inc."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2Ft9c%3D","line":1,"updated":"2014-04-17 23:38:22.000000000","message":"I think the current convention is to not include these mode lines in file.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2014, Hewlett Packard, Inc."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_611d960f","line":1,"in_reply_to":"AAAAXH%2F%2Ft9c%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from neutron.common import topics"},{"line_number":23,"context_line":"from neutron.openstack.common import importutils"},{"line_number":24,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FkuI%3D","line":23,"updated":"2014-04-19 08:08:33.000000000","message":"importutils is not used","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from neutron.common import topics"},{"line_number":23,"context_line":"from neutron.openstack.common import importutils"},{"line_number":24,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_41209249","line":23,"in_reply_to":"AAAAXH%2F%2FkuI%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"DVR_RPC_VERSION \u003d \"1.0\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class DVRServerRpcApiMixin(object):"},{"line_number":30,"context_line":"    \"\"\"A mix-in that enable DVR Mac Address support in plugin rpc.\"\"\""},{"line_number":31,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"},{"line_number":32,"context_line":"        LOG.debug(_(\"Get dvr mac address for host \""},{"line_number":33,"context_line":"                    \"via rpc %r\"), host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FkrQ%3D","line":30,"updated":"2014-04-19 08:08:33.000000000","message":"nit: enable -\u003e enables","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":27,"context_line":"DVR_RPC_VERSION \u003d \"1.0\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class DVRServerRpcApiMixin(object):"},{"line_number":30,"context_line":"    \"\"\"A mix-in that enable DVR Mac Address support in plugin rpc.\"\"\""},{"line_number":31,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"},{"line_number":32,"context_line":"        LOG.debug(_(\"Get dvr mac address for host \""},{"line_number":33,"context_line":"                    \"via rpc %r\"), host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_212c6e47","line":30,"in_reply_to":"AAAAXH%2F%2FkrQ%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"\"\"A mix-in that enable DVR Mac Address support in plugin rpc.\"\"\""},{"line_number":31,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"},{"line_number":32,"context_line":"        LOG.debug(_(\"Get dvr mac address for host \""},{"line_number":33,"context_line":"                    \"via rpc %r\"), host)"},{"line_number":34,"context_line":"        return self.call(context,"},{"line_number":35,"context_line":"                         self.make_msg(\u0027get_dvr_mac_address_by_host\u0027,"},{"line_number":36,"context_line":"                                       host\u003dhost),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FkrM%3D","line":33,"updated":"2014-04-19 08:08:33.000000000","message":"move %r after host.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"\"\"A mix-in that enable DVR Mac Address support in plugin rpc.\"\"\""},{"line_number":31,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"},{"line_number":32,"context_line":"        LOG.debug(_(\"Get dvr mac address for host \""},{"line_number":33,"context_line":"                    \"via rpc %r\"), host)"},{"line_number":34,"context_line":"        return self.call(context,"},{"line_number":35,"context_line":"                         self.make_msg(\u0027get_dvr_mac_address_by_host\u0027,"},{"line_number":36,"context_line":"                                       host\u003dhost),"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_41ced284","line":33,"in_reply_to":"AAAAXH%2F%2FkrM%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":"                                       host\u003dhost),"},{"line_number":37,"context_line":"                         version\u003dDVR_RPC_VERSION,"},{"line_number":38,"context_line":"                         topic\u003dself.topic)"},{"line_number":39,"context_line":"        "},{"line_number":40,"context_line":"    def get_dvr_mac_address(self, context):"},{"line_number":41,"context_line":"        LOG.debug(_(\"Get dvr mac address all\"))"},{"line_number":42,"context_line":"        return self.call(context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FkuE%3D","line":39,"updated":"2014-04-19 08:08:33.000000000","message":"remove tab, same to below tabs.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                                       host\u003dhost),"},{"line_number":37,"context_line":"                         version\u003dDVR_RPC_VERSION,"},{"line_number":38,"context_line":"                         topic\u003dself.topic)"},{"line_number":39,"context_line":"        "},{"line_number":40,"context_line":"    def get_dvr_mac_address(self, context):"},{"line_number":41,"context_line":"        LOG.debug(_(\"Get dvr mac address all\"))"},{"line_number":42,"context_line":"        return self.call(context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_61cbd672","line":39,"in_reply_to":"AAAAXH%2F%2FkuE%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":45,"context_line":"                         topic\u003dself.topic)"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"    def get_compute_ports_on_host_by_subnet(self, context, host, subnet):"},{"line_number":48,"context_line":"        LOG.debug(_(\"Get compute ports on host by subnet\"))"},{"line_number":49,"context_line":"        return self.call(context,"},{"line_number":50,"context_line":"                         self.make_msg(\u0027get_compute_ports_on_host_by_subnet\u0027, "},{"line_number":51,"context_line":"                                       host\u003dhost,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FkrI%3D","line":48,"updated":"2014-04-19 08:08:33.000000000","message":"at host and subnet info like line 32.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                         topic\u003dself.topic)"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"    def get_compute_ports_on_host_by_subnet(self, context, host, subnet):"},{"line_number":48,"context_line":"        LOG.debug(_(\"Get compute ports on host by subnet\"))"},{"line_number":49,"context_line":"        return self.call(context,"},{"line_number":50,"context_line":"                         self.make_msg(\u0027get_compute_ports_on_host_by_subnet\u0027, "},{"line_number":51,"context_line":"                                       host\u003dhost,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_81c8da75","line":48,"in_reply_to":"AAAAXH%2F%2FkrI%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class DVRServerRpcApiMixin(object):"},{"line_number":30,"context_line":"    \"\"\"A mix-in that enables DVR Mac Address support in plugin rpc.\"\"\""},{"line_number":31,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"},{"line_number":32,"context_line":"        LOG.debug(_(\"Get dvr mac address for host \""},{"line_number":33,"context_line":"                    \"via rpc for host %(host)\"), {\u0027host\u0027: host})"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_00997f1f","line":30,"updated":"2014-06-05 08:46:17.000000000","message":"Maybe import neutron.common.log and then use the @log.log decorator above these functions instead of the LOG.debug statement showing that the function was called with its arguments.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"class DVRServerRpcApiMixin(object):"},{"line_number":30,"context_line":"    \"\"\"A mix-in that enables DVR Mac Address support in plugin rpc.\"\"\""},{"line_number":31,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"},{"line_number":32,"context_line":"        LOG.debug(_(\"Get dvr mac address for host \""},{"line_number":33,"context_line":"                    \"via rpc for host %(host)\"), {\u0027host\u0027: host})"},{"line_number":34,"context_line":"        return self.call(context,"},{"line_number":35,"context_line":"                         self.make_msg(\u0027get_dvr_mac_address_by_host\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_eeed0b27","line":32,"updated":"2014-06-09 06:44:55.000000000","message":"nit: remove \"for host\" in this line since \"for host\" is in next line.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":38,"context_line":"                         topic\u003dself.topic)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def get_dvr_mac_address(self, context):"},{"line_number":41,"context_line":"        LOG.debug(_(\"Get dvr mac address all\"))"},{"line_number":42,"context_line":"        return self.call(context,"},{"line_number":43,"context_line":"                         self.make_msg(\u0027get_dvr_mac_address\u0027),"},{"line_number":44,"context_line":"                         version\u003dDVR_RPC_VERSION,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_2ef8d3e4","line":41,"updated":"2014-06-09 06:44:55.000000000","message":"nit: Get all dvr mac addresses.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                         topic\u003dself.topic)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def get_dvr_mac_address(self, context):"},{"line_number":41,"context_line":"        LOG.debug(_(\"Get dvr mac address all\"))"},{"line_number":42,"context_line":"        return self.call(context,"},{"line_number":43,"context_line":"                         self.make_msg(\u0027get_dvr_mac_address\u0027),"},{"line_number":44,"context_line":"                         version\u003dDVR_RPC_VERSION,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_014bc12b","line":41,"in_reply_to":"1ae5cdf2_2ef8d3e4","updated":"2014-06-10 05:49:18.000000000","message":"Will fix this comment.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":"class DVRServerRpcApiMixin(object):"},{"line_number":27,"context_line":"    \"\"\"A mix-in that enables DVR Mac Address support in plugin rpc.\"\"\""},{"line_number":28,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"},{"line_number":29,"context_line":"        LOG.debug(_(\"Get dvr mac address for host \""},{"line_number":30,"context_line":"                    \"via rpc for host %(host)\"), {\u0027host\u0027: host})"},{"line_number":31,"context_line":"        return self.call(context,"},{"line_number":32,"context_line":"                         self.make_msg(\u0027get_dvr_mac_address_by_host\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_9f235cbc","line":29,"updated":"2014-06-11 17:52:35.000000000","message":"Please don\u0027t translate debug log message (.e.g remove the _()). This applies everywhere in the code submission. See here:\n\nhttps://wiki.openstack.org/wiki/LoggingStandards#Log_Translation","commit_id":"acc814ee64decfd4c733862d0c22ae1e8a1fc107"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class DVRServerRpcApiMixin(object):"},{"line_number":27,"context_line":"    \"\"\"A mix-in that enables DVR Mac Address support in plugin rpc.\"\"\""},{"line_number":28,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"},{"line_number":29,"context_line":"        LOG.debug(_(\"Get dvr mac address for host \""},{"line_number":30,"context_line":"                    \"via rpc for host %(host)\"), {\u0027host\u0027: host})"},{"line_number":31,"context_line":"        return self.call(context,"},{"line_number":32,"context_line":"                         self.make_msg(\u0027get_dvr_mac_address_by_host\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_a7964192","line":29,"in_reply_to":"1ae5cdf2_9f235cbc","updated":"2014-06-16 14:21:28.000000000","message":"Thanks. I will be addressing this for all LOG  statements.","commit_id":"acc814ee64decfd4c733862d0c22ae1e8a1fc107"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"class DVRAgentRpcCallbackMixin(object):"},{"line_number":63,"context_line":"    \"\"\"A mix-in that enable DVR agent"},{"line_number":64,"context_line":"    support in agent implementations."},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":"    #mix-in object should have dvr_agent"},{"line_number":67,"context_line":"    dvr_agent \u003d None"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_939e5953","line":65,"updated":"2014-06-23 18:42:40.000000000","message":"nit:  This could be a one-line docstring without changing the text.  I think wrapping at 37 characters is excessively narrow.","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":64,"context_line":"    support in agent implementations."},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":"    #mix-in object should have dvr_agent"},{"line_number":67,"context_line":"    dvr_agent \u003d None"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _dvr_agent_not_set(self):"},{"line_number":70,"context_line":"        LOG.warning(_(\"DVR agent binding currently not set. \""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_4bfb2847","line":67,"updated":"2014-06-17 16:41:13.000000000","message":"consider setting this variable via __init__ method.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    support in agent implementations."},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":"    #mix-in object should have dvr_agent"},{"line_number":67,"context_line":"    dvr_agent \u003d None"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _dvr_agent_not_set(self):"},{"line_number":70,"context_line":"        LOG.warning(_(\"DVR agent binding currently not set. \""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_3ec7a113","line":67,"in_reply_to":"1ae5cdf2_4bfb2847","updated":"2014-06-19 11:57:20.000000000","message":"__init__() becomes constructor.  When this object is constructed, i don\u0027t have object pointer to dvr_agent.  So I cannot do this in init__().  \r\n\r\nAlso if you please look at securitygroups_rpc , this the approach they have taken for all North-South calls i.e, from controller to node RPCs. So i have pursued the same approach.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"        LOG.debug("},{"line_number":81,"context_line":"            _(\"dvr_macs updated on remote: %s\"), dvr_macs)"},{"line_number":82,"context_line":"        if not self.dvr_agent:"},{"line_number":83,"context_line":"            return self._dvr_agent_not_set()"},{"line_number":84,"context_line":"        self.dvr_agent.dvr_mac_address_update(dvr_macs)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_abbe6c62","line":83,"updated":"2014-06-17 16:41:13.000000000","message":"shouldn\u0027t we fail here?","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        LOG.debug("},{"line_number":81,"context_line":"            _(\"dvr_macs updated on remote: %s\"), dvr_macs)"},{"line_number":82,"context_line":"        if not self.dvr_agent:"},{"line_number":83,"context_line":"            return self._dvr_agent_not_set()"},{"line_number":84,"context_line":"        self.dvr_agent.dvr_mac_address_update(dvr_macs)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_fef7f957","line":83,"in_reply_to":"1ae5cdf2_abbe6c62","updated":"2014-06-19 11:57:20.000000000","message":"We are throwing a warning.  We need not fail here. As as soon as we queue the rpc consumer for DVR topic, we may start getting this RPC invoked by the controller.  But until our L2 Agent manufactures the dvr_agent object, these calls can be ignored.  So we have put a warning indiating the fact that DVR Agent binding is not available and so we ignore this call.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"}],"neutron/agent/rpc.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    \u0027\u0027\u0027"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.2\u0027"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def __init__(self, topic):"},{"line_number":88,"context_line":"        super(PluginApi, self).__init__("}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_eb3dd4de","line":85,"updated":"2014-06-17 16:41:13.000000000","message":"if looks like you might want to track the change at line 81 too","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    \u0027\u0027\u0027"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.2\u0027"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def __init__(self, topic):"},{"line_number":88,"context_line":"        super(PluginApi, self).__init__("}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_beaf312a","line":85,"in_reply_to":"1ae5cdf2_eb3dd4de","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"}],"neutron/common/constants.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"9afa31c30458f5034f4cb4de6198237e5aa4dff1","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"DEVICE_OWNER_ROUTER_INTF \u003d \"network:router_interface\""},{"line_number":33,"context_line":"DEVICE_OWNER_ROUTER_GW \u003d \"network:router_gateway\""},{"line_number":34,"context_line":"DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED \u003d \"network:router_interface_distributed\""},{"line_number":35,"context_line":"DEVICE_OWNER_FLOATINGIP \u003d \"network:floatingip\""},{"line_number":36,"context_line":"DEVICE_OWNER_DHCP \u003d \"network:dhcp\""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2Ft6I%3D","line":34,"updated":"2014-04-17 23:38:22.000000000","message":"This is duplicated in the L3 patch.  Another reason to rebase this patch to a version of that patch.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"DEVICE_OWNER_ROUTER_INTF \u003d \"network:router_interface\""},{"line_number":33,"context_line":"DEVICE_OWNER_ROUTER_GW \u003d \"network:router_gateway\""},{"line_number":34,"context_line":"DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED \u003d \"network:router_interface_distributed\""},{"line_number":35,"context_line":"DEVICE_OWNER_FLOATINGIP \u003d \"network:floatingip\""},{"line_number":36,"context_line":"DEVICE_OWNER_DHCP \u003d \"network:dhcp\""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_c1a102ab","line":34,"in_reply_to":"AAAAXH%2F%2Ft6I%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"DEVICE_OWNER_ROUTER_INTF \u003d \"network:router_interface\""},{"line_number":33,"context_line":"DEVICE_OWNER_ROUTER_GW \u003d \"network:router_gateway\""},{"line_number":34,"context_line":"DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED \u003d \"network:router_interface_distributed\""},{"line_number":35,"context_line":"DEVICE_OWNER_FLOATINGIP \u003d \"network:floatingip\""},{"line_number":36,"context_line":"DEVICE_OWNER_DHCP \u003d \"network:dhcp\""},{"line_number":37,"context_line":"DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED \u003d \"network:router_interface_distributed\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_e886e364","line":34,"updated":"2014-06-09 07:10:33.000000000","message":"The same entry exists at L.37.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"DEVICE_OWNER_ROUTER_INTF \u003d \"network:router_interface\""},{"line_number":33,"context_line":"DEVICE_OWNER_ROUTER_GW \u003d \"network:router_gateway\""},{"line_number":34,"context_line":"DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED \u003d \"network:router_interface_distributed\""},{"line_number":35,"context_line":"DEVICE_OWNER_FLOATINGIP \u003d \"network:floatingip\""},{"line_number":36,"context_line":"DEVICE_OWNER_DHCP \u003d \"network:dhcp\""},{"line_number":37,"context_line":"DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED \u003d \"network:router_interface_distributed\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_0e6dd704","line":34,"updated":"2014-06-09 06:44:55.000000000","message":"This constant is already defined in the depended review:\n\nhttps://review.openstack.org/#/c/84223/24/neutron/common/constants.py\n\nShould not be needed in this patch.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"DEVICE_OWNER_ROUTER_INTF \u003d \"network:router_interface\""},{"line_number":33,"context_line":"DEVICE_OWNER_ROUTER_GW \u003d \"network:router_gateway\""},{"line_number":34,"context_line":"DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED \u003d \"network:router_interface_distributed\""},{"line_number":35,"context_line":"DEVICE_OWNER_FLOATINGIP \u003d \"network:floatingip\""},{"line_number":36,"context_line":"DEVICE_OWNER_DHCP \u003d \"network:dhcp\""},{"line_number":37,"context_line":"DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED \u003d \"network:router_interface_distributed\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_2146fd21","line":34,"in_reply_to":"1ae5cdf2_e886e364","updated":"2014-06-10 05:49:18.000000000","message":"OK, looks like this duplication happened when dependent review merged.  I will fix this in the next patch set.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"}],"neutron/db/dvr_db.py":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e7a25039632eef953927512a0595bb158d6461bd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2014 Hewlett Packard, Inc.  All rights reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAW3%2F%2FREc%3D","line":1,"updated":"2014-04-15 17:12:59.000000000","message":"Remove the #vim line.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"9afa31c30458f5034f4cb4de6198237e5aa4dff1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Vivekanandan Narasimhan, Hewlett-Packard Inc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import random"},{"line_number":20,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2Ft5A%3D","line":17,"updated":"2014-04-17 23:38:22.000000000","message":"This entire file is duplicated in the L3 patch.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Vivekanandan Narasimhan, Hewlett-Packard Inc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import random"},{"line_number":20,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_219f0e54","line":17,"in_reply_to":"AAAAXH%2F%2Ft5A%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e7a25039632eef953927512a0595bb158d6461bd","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class DVRDbMixin(ext_dvr.DVRMacAddressPluginBase):"},{"line_number":47,"context_line":"    \"\"\"Mixin class to add dvr mac address to db_plugin_base_v2.\"\"\""},{"line_number":48,"context_line":"    "},{"line_number":49,"context_line":"    @property"},{"line_number":50,"context_line":"    def _core_plugin(self):"},{"line_number":51,"context_line":"        return manager.NeutronManager.get_plugin()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAW3%2F%2FRGs%3D","line":48,"updated":"2014-04-15 17:12:59.000000000","message":"Whitespace. Run pep8 on all the files before you push the code.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class DVRDbMixin(ext_dvr.DVRMacAddressPluginBase):"},{"line_number":47,"context_line":"    \"\"\"Mixin class to add dvr mac address to db_plugin_base_v2.\"\"\""},{"line_number":48,"context_line":"    "},{"line_number":49,"context_line":"    @property"},{"line_number":50,"context_line":"    def _core_plugin(self):"},{"line_number":51,"context_line":"        return manager.NeutronManager.get_plugin()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_c1882225","line":48,"in_reply_to":"AAAAW3%2F%2FRGs%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4f8d103a552ad4f28bab253b076243845facd3fa","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                           \u0027max_retries\u0027: max_retries - (i + 1)})"},{"line_number":124,"context_line":"        LOG.error(_(\"Unable to generate dvr mac address after %s attempts\"),"},{"line_number":125,"context_line":"                  max_retries)"},{"line_number":126,"context_line":"        raise ext_dvr.MacAddressGenerationFailure(host\u003dhost)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @staticmethod"},{"line_number":129,"context_line":"    def _check_unique_dvr_mac(context, mac_address):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F%2Fe4%3D","line":126,"updated":"2014-04-16 01:50:15.000000000","message":"You\u0027ve basically copied _generate_mac() from db_base_plugin_v2.py here, is it better to make a common function that just takes an additional argument or two?","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4f8d103a552ad4f28bab253b076243845facd3fa","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        try:"},{"line_number":179,"context_line":"            subnet_info \u003d self._core_plugin.get_subnet(context, subnet)"},{"line_number":180,"context_line":"        except q_exc.SubnetNotFound:"},{"line_number":181,"context_line":"            return {} "},{"line_number":182,"context_line":"        LOG.debug(_(\"Obtained subnet info as %s\"), subnet_info)"},{"line_number":183,"context_line":"        return subnet_info"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F%2Fgk%3D","line":181,"updated":"2014-04-16 01:50:15.000000000","message":"Can this just be \u0027return\u0027 or is the caller expecting a dict?","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        try:"},{"line_number":179,"context_line":"            subnet_info \u003d self._core_plugin.get_subnet(context, subnet)"},{"line_number":180,"context_line":"        except q_exc.SubnetNotFound:"},{"line_number":181,"context_line":"            return {} "},{"line_number":182,"context_line":"        LOG.debug(_(\"Obtained subnet info as %s\"), subnet_info)"},{"line_number":183,"context_line":"        return subnet_info"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_81ad3a8b","line":181,"in_reply_to":"AAAAXH%2F%2F%2Fgk%3D","updated":"2014-05-01 00:01:29.000000000","message":"Caller expecting return value. I drove \u0027None\u0027 explicitly as return value here to indicate the fact that this method will return subnet if available.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"# @author: Vivekanandan Narasimhan, Hewlett-Packard Inc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import random"},{"line_number":19,"context_line":"import sqlalchemy as sa"},{"line_number":20,"context_line":"from sqlalchemy import orm"},{"line_number":21,"context_line":"from sqlalchemy.orm import exc"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_48dc3775","line":18,"updated":"2014-06-09 07:10:33.000000000","message":"Blank line here.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"# @author: Vivekanandan Narasimhan, Hewlett-Packard Inc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import random"},{"line_number":19,"context_line":"import sqlalchemy as sa"},{"line_number":20,"context_line":"from sqlalchemy import orm"},{"line_number":21,"context_line":"from sqlalchemy.orm import exc"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_e1e095fc","line":18,"in_reply_to":"1ae5cdf2_48dc3775","updated":"2014-06-10 05:49:18.000000000","message":"will remove.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"    @staticmethod"},{"line_number":106,"context_line":"    def _generate_dvr_mac_address(context, host):"},{"line_number":107,"context_line":"        dvr_base_mac \u003d cfg.CONF.dvr_base_mac.split(\u0027:\u0027)"},{"line_number":108,"context_line":"        max_retries \u003d cfg.CONF.mac_generation_retries"},{"line_number":109,"context_line":"        for i in range(max_retries):"},{"line_number":110,"context_line":"            mac \u003d [int(dvr_base_mac[0], 16), int(dvr_base_mac[1], 16),"},{"line_number":111,"context_line":"                   int(dvr_base_mac[2], 16), random.randint(0x00, 0xff),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_7b16724d","line":108,"updated":"2014-06-05 08:46:17.000000000","message":"It\u0027s up to you, but I would make \u0027dvr_base_mac\u0027 and \u0027max_retries\u0027 arguments to this function and then have the caller read the cfg. It makes it easy to test the function without a bunch of cfg override calls and will make it flexible if it needs to allow more generation retries or change the base MAC in certain cases in the future.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    @staticmethod"},{"line_number":106,"context_line":"    def _generate_dvr_mac_address(context, host):"},{"line_number":107,"context_line":"        dvr_base_mac \u003d cfg.CONF.dvr_base_mac.split(\u0027:\u0027)"},{"line_number":108,"context_line":"        max_retries \u003d cfg.CONF.mac_generation_retries"},{"line_number":109,"context_line":"        for i in range(max_retries):"},{"line_number":110,"context_line":"            mac \u003d [int(dvr_base_mac[0], 16), int(dvr_base_mac[1], 16),"},{"line_number":111,"context_line":"                   int(dvr_base_mac[2], 16), random.randint(0x00, 0xff),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_61ec85f4","line":108,"in_reply_to":"1ae5cdf2_7b16724d","updated":"2014-06-10 05:49:18.000000000","message":"Makes sense from UT point of view as well.  I will make this change in the repost.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":111,"context_line":"                   int(dvr_base_mac[2], 16), random.randint(0x00, 0xff),"},{"line_number":112,"context_line":"                   random.randint(0x00, 0xff), random.randint(0x00, 0xff)]"},{"line_number":113,"context_line":"            if dvr_base_mac[3] !\u003d \u002700\u0027:"},{"line_number":114,"context_line":"                dvr_base_mac[3] \u003d int(dvr_base_mac[3], 16)"},{"line_number":115,"context_line":"            mac_address \u003d \u0027:\u0027.join(map(lambda x: \"%02x\" % x, mac))"},{"line_number":116,"context_line":"            if DVRDbMixin._check_unique_dvr_mac(context, mac_address):"},{"line_number":117,"context_line":"                LOG.debug(_(\"Generated dvr mac for host %(host)s \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_ae3063e9","line":114,"updated":"2014-06-09 06:44:55.000000000","message":"dvr_base_mac[3] on the left side should be changed to mac[3] because dvr_base_mac is no longer used below.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                   int(dvr_base_mac[2], 16), random.randint(0x00, 0xff),"},{"line_number":112,"context_line":"                   random.randint(0x00, 0xff), random.randint(0x00, 0xff)]"},{"line_number":113,"context_line":"            if dvr_base_mac[3] !\u003d \u002700\u0027:"},{"line_number":114,"context_line":"                dvr_base_mac[3] \u003d int(dvr_base_mac[3], 16)"},{"line_number":115,"context_line":"            mac_address \u003d \u0027:\u0027.join(map(lambda x: \"%02x\" % x, mac))"},{"line_number":116,"context_line":"            if DVRDbMixin._check_unique_dvr_mac(context, mac_address):"},{"line_number":117,"context_line":"                LOG.debug(_(\"Generated dvr mac for host %(host)s \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_0195813f","line":114,"in_reply_to":"1ae5cdf2_ae3063e9","updated":"2014-06-10 05:49:18.000000000","message":"Good catch. Thanks.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"                   random.randint(0x00, 0xff), random.randint(0x00, 0xff)]"},{"line_number":113,"context_line":"            if dvr_base_mac[3] !\u003d \u002700\u0027:"},{"line_number":114,"context_line":"                dvr_base_mac[3] \u003d int(dvr_base_mac[3], 16)"},{"line_number":115,"context_line":"            mac_address \u003d \u0027:\u0027.join(map(lambda x: \"%02x\" % x, mac))"},{"line_number":116,"context_line":"            if DVRDbMixin._check_unique_dvr_mac(context, mac_address):"},{"line_number":117,"context_line":"                LOG.debug(_(\"Generated dvr mac for host %(host)s \""},{"line_number":118,"context_line":"                            \"is %(mac_address)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_1b656eb4","line":115,"updated":"2014-06-05 08:46:17.000000000","message":"I think list comprehensions are usually preferred over map calls. A quick grep of the code base shows only 4 instances of it not from the openstack common code.\n\n\u0027:\u0027.join([\"%02x\" % x for x in mac])","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                   random.randint(0x00, 0xff), random.randint(0x00, 0xff)]"},{"line_number":113,"context_line":"            if dvr_base_mac[3] !\u003d \u002700\u0027:"},{"line_number":114,"context_line":"                dvr_base_mac[3] \u003d int(dvr_base_mac[3], 16)"},{"line_number":115,"context_line":"            mac_address \u003d \u0027:\u0027.join(map(lambda x: \"%02x\" % x, mac))"},{"line_number":116,"context_line":"            if DVRDbMixin._check_unique_dvr_mac(context, mac_address):"},{"line_number":117,"context_line":"                LOG.debug(_(\"Generated dvr mac for host %(host)s \""},{"line_number":118,"context_line":"                            \"is %(mac_address)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_e185f507","line":115,"in_reply_to":"1ae5cdf2_1b656eb4","updated":"2014-06-10 05:49:18.000000000","message":"I took the original from _generate_mac() method of db_base_plugin_v2.py.   I will fix the way you\u0027ve recommended.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def get_compute_ports_on_host_by_subnet(self, context, host, subnet):"},{"line_number":146,"context_line":"        LOG.debug(_(\"Got host %r\"), host)"},{"line_number":147,"context_line":"        LOG.debug(_(\"Got subnet %r\"), subnet)"},{"line_number":148,"context_line":"        vm_ports_by_host \u003d []"},{"line_number":149,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: [subnet]}}"},{"line_number":150,"context_line":"        ports \u003d self._core_plugin.get_ports(context, filters\u003dfilter)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_db66a6ba","line":147,"updated":"2014-06-05 08:46:17.000000000","message":"use the @log.log decorator instead of these two","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"unresolved":false,"context_lines":[{"line_number":153,"context_line":"            if \u0027compute:\u0027 in port[\u0027device_owner\u0027]:"},{"line_number":154,"context_line":"                # try:"},{"line_number":155,"context_line":"                if port[\u0027binding:host_id\u0027] \u003d\u003d host:"},{"line_number":156,"context_line":"                    port_dict \u003d self._core_plugin.\\"},{"line_number":157,"context_line":"                        _make_port_dict(port, process_extensions\u003dFalse)"},{"line_number":158,"context_line":"                    vm_ports_by_host.append(port_dict)"},{"line_number":159,"context_line":"        LOG.debug(_(\"Returning list of VM Ports on host,  %r\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_fbd60227","line":156,"updated":"2014-06-05 08:46:17.000000000","message":"I can\u0027t quite tell, but doesn\u0027t this fit without the escape char?\n\nport_dict \u003d self._core_plugin._make_port_dict(\n    port, process_extensions\u003dFalse)","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":153,"context_line":"            if \u0027compute:\u0027 in port[\u0027device_owner\u0027]:"},{"line_number":154,"context_line":"                # try:"},{"line_number":155,"context_line":"                if port[\u0027binding:host_id\u0027] \u003d\u003d host:"},{"line_number":156,"context_line":"                    port_dict \u003d self._core_plugin.\\"},{"line_number":157,"context_line":"                        _make_port_dict(port, process_extensions\u003dFalse)"},{"line_number":158,"context_line":"                    vm_ports_by_host.append(port_dict)"},{"line_number":159,"context_line":"        LOG.debug(_(\"Returning list of VM Ports on host,  %r\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_ca5cff7f","line":156,"updated":"2014-06-05 17:49:47.000000000","message":"line continuation","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            if \u0027compute:\u0027 in port[\u0027device_owner\u0027]:"},{"line_number":154,"context_line":"                # try:"},{"line_number":155,"context_line":"                if port[\u0027binding:host_id\u0027] \u003d\u003d host:"},{"line_number":156,"context_line":"                    port_dict \u003d self._core_plugin.\\"},{"line_number":157,"context_line":"                        _make_port_dict(port, process_extensions\u003dFalse)"},{"line_number":158,"context_line":"                    vm_ports_by_host.append(port_dict)"},{"line_number":159,"context_line":"        LOG.debug(_(\"Returning list of VM Ports on host,  %r\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_6171e543","line":156,"in_reply_to":"1ae5cdf2_fbd60227","updated":"2014-06-10 05:49:18.000000000","message":"Will ensure if that fits.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"unresolved":false,"context_lines":[{"line_number":161,"context_line":"        return vm_ports_by_host"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def get_compute_ports_by_subnet(self, context, subnet):"},{"line_number":164,"context_line":"        LOG.debug(_(\"Got subnet %r\"), subnet)"},{"line_number":165,"context_line":"        vm_ports \u003d []"},{"line_number":166,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: [subnet]}}"},{"line_number":167,"context_line":"        ports \u003d self._core_plugin.get_ports(context, filters\u003dfilter)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_9be5fe0a","line":164,"updated":"2014-06-05 08:46:17.000000000","message":"@log.log","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":168,"context_line":"        LOG.debug(_(\"List of Ports on subnet received %r\"), ports)"},{"line_number":169,"context_line":"        for port in ports:"},{"line_number":170,"context_line":"            if \u0027compute:\u0027 in port[\u0027device_owner\u0027]:"},{"line_number":171,"context_line":"                port_dict \u003d self._core_plugin.\\"},{"line_number":172,"context_line":"                    _make_port_dict(port, process_extensions\u003dFalse)"},{"line_number":173,"context_line":"                port_dict[\u0027binding:host_id\u0027] \u003d port[\u0027binding:host_id\u0027]"},{"line_number":174,"context_line":"                vm_ports.append(port_dict)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_ea561b5b","line":171,"updated":"2014-06-05 17:49:47.000000000","message":"line continuation is not allowed here","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        LOG.debug(_(\"List of Ports on subnet received %r\"), ports)"},{"line_number":169,"context_line":"        for port in ports:"},{"line_number":170,"context_line":"            if \u0027compute:\u0027 in port[\u0027device_owner\u0027]:"},{"line_number":171,"context_line":"                port_dict \u003d self._core_plugin.\\"},{"line_number":172,"context_line":"                    _make_port_dict(port, process_extensions\u003dFalse)"},{"line_number":173,"context_line":"                port_dict[\u0027binding:host_id\u0027] \u003d port[\u0027binding:host_id\u0027]"},{"line_number":174,"context_line":"                vm_ports.append(port_dict)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_219efd54","line":171,"in_reply_to":"1ae5cdf2_ea561b5b","updated":"2014-06-10 05:49:18.000000000","message":"Ok. will fix this.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"unresolved":false,"context_lines":[{"line_number":181,"context_line":"            # retrieve the gateway port on this subnet"},{"line_number":182,"context_line":"            filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: [subnet],"},{"line_number":183,"context_line":"                                    \u0027ip_address\u0027: [subnet_info[\u0027gateway_ip\u0027]]}}"},{"line_number":184,"context_line":"            internal_gateway_ports \u003d self._core_plugin.\\"},{"line_number":185,"context_line":"                get_ports(context, filters\u003dfilter)"},{"line_number":186,"context_line":"            if internal_gateway_ports:"},{"line_number":187,"context_line":"                subnet_info[\u0027gateway_mac\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_7bd11222","line":184,"updated":"2014-06-05 08:46:17.000000000","message":"internal_gateway_ports \u003d self._core_plugin.get_ports(\n    context, filters\u003dfilter)","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":181,"context_line":"            # retrieve the gateway port on this subnet"},{"line_number":182,"context_line":"            filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: [subnet],"},{"line_number":183,"context_line":"                                    \u0027ip_address\u0027: [subnet_info[\u0027gateway_ip\u0027]]}}"},{"line_number":184,"context_line":"            internal_gateway_ports \u003d self._core_plugin.\\"},{"line_number":185,"context_line":"                get_ports(context, filters\u003dfilter)"},{"line_number":186,"context_line":"            if internal_gateway_ports:"},{"line_number":187,"context_line":"                subnet_info[\u0027gateway_mac\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_0a526766","line":184,"updated":"2014-06-05 17:49:47.000000000","message":"line continuation","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            # retrieve the gateway port on this subnet"},{"line_number":182,"context_line":"            filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: [subnet],"},{"line_number":183,"context_line":"                                    \u0027ip_address\u0027: [subnet_info[\u0027gateway_ip\u0027]]}}"},{"line_number":184,"context_line":"            internal_gateway_ports \u003d self._core_plugin.\\"},{"line_number":185,"context_line":"                get_ports(context, filters\u003dfilter)"},{"line_number":186,"context_line":"            if internal_gateway_ports:"},{"line_number":187,"context_line":"                subnet_info[\u0027gateway_mac\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_01cae14e","line":184,"in_reply_to":"1ae5cdf2_0a526766","updated":"2014-06-10 05:49:18.000000000","message":"Ok will fix this.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":184,"context_line":"            internal_gateway_ports \u003d self._core_plugin.\\"},{"line_number":185,"context_line":"                get_ports(context, filters\u003dfilter)"},{"line_number":186,"context_line":"            if internal_gateway_ports:"},{"line_number":187,"context_line":"                subnet_info[\u0027gateway_mac\u0027] \u003d \\"},{"line_number":188,"context_line":"                    internal_gateway_ports[0][\u0027mac_address\u0027]"},{"line_number":189,"context_line":"            else:"},{"line_number":190,"context_line":"                LOG.error(_(\"get_subnet() Could not retrieve gateway port\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_2a4d63c4","line":187,"updated":"2014-06-05 17:49:47.000000000","message":"same as above","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            internal_gateway_ports \u003d self._core_plugin.\\"},{"line_number":185,"context_line":"                get_ports(context, filters\u003dfilter)"},{"line_number":186,"context_line":"            if internal_gateway_ports:"},{"line_number":187,"context_line":"                subnet_info[\u0027gateway_mac\u0027] \u003d \\"},{"line_number":188,"context_line":"                    internal_gateway_ports[0][\u0027mac_address\u0027]"},{"line_number":189,"context_line":"            else:"},{"line_number":190,"context_line":"                LOG.error(_(\"get_subnet() Could not retrieve gateway port\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_41adc987","line":187,"in_reply_to":"1ae5cdf2_2a4d63c4","updated":"2014-06-10 05:49:18.000000000","message":"Ok, will fix this too.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":189,"context_line":"            else:"},{"line_number":190,"context_line":"                LOG.error(_(\"get_subnet() Could not retrieve gateway port\""},{"line_number":191,"context_line":"                            \" for Subnet %s\"), subnet_info)"},{"line_number":192,"context_line":"                return None"},{"line_number":193,"context_line":"        except q_exc.SubnetNotFound:"},{"line_number":194,"context_line":"            return None"},{"line_number":195,"context_line":"        return subnet_info"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_4a48efb2","line":192,"updated":"2014-06-05 17:49:47.000000000","message":"return","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            else:"},{"line_number":190,"context_line":"                LOG.error(_(\"get_subnet() Could not retrieve gateway port\""},{"line_number":191,"context_line":"                            \" for Subnet %s\"), subnet_info)"},{"line_number":192,"context_line":"                return None"},{"line_number":193,"context_line":"        except q_exc.SubnetNotFound:"},{"line_number":194,"context_line":"            return None"},{"line_number":195,"context_line":"        return subnet_info"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_61a80578","line":192,"in_reply_to":"1ae5cdf2_4a48efb2","updated":"2014-06-10 05:49:18.000000000","message":"Ok.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":191,"context_line":"                            \" for Subnet %s\"), subnet_info)"},{"line_number":192,"context_line":"                return None"},{"line_number":193,"context_line":"        except q_exc.SubnetNotFound:"},{"line_number":194,"context_line":"            return None"},{"line_number":195,"context_line":"        return subnet_info"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_6aca0b1c","line":194,"updated":"2014-06-05 17:49:47.000000000","message":"return","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                            \" for Subnet %s\"), subnet_info)"},{"line_number":192,"context_line":"                return None"},{"line_number":193,"context_line":"        except q_exc.SubnetNotFound:"},{"line_number":194,"context_line":"            return None"},{"line_number":195,"context_line":"        return subnet_info"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_e1b335e7","line":194,"in_reply_to":"1ae5cdf2_6aca0b1c","updated":"2014-06-10 05:49:18.000000000","message":"Ok.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"from neutron import manager"},{"line_number":26,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":27,"context_line":"from oslo.config import cfg"},{"line_number":28,"context_line":"from sqlalchemy.orm import exc"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_933ad932","line":28,"updated":"2014-06-23 18:42:40.000000000","message":"nit:  This should go up above the project imports where the other sqlalchemy import is.","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2014 Hewlett Packard, Inc.  All rights reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_cb11f85e","line":1,"updated":"2014-06-17 16:41:13.000000000","message":"this # can be dropped","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2014 Hewlett Packard, Inc.  All rights reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_9e451571","line":1,"in_reply_to":"1ae5cdf2_cb11f85e","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"# @author: Vivekanandan Narasimhan, Hewlett-Packard Inc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import random"},{"line_number":19,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_66b3bb4d","line":16,"updated":"2014-06-17 16:41:13.000000000","message":"have you considered merging the content of this file with https://review.openstack.org/#/c/84223/25/neutron/db/l3_dvr_db.py? It seems there\u0027s certain affinity between the two.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"# @author: Vivekanandan Narasimhan, Hewlett-Packard Inc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import random"},{"line_number":19,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_292dad8f","line":16,"in_reply_to":"1ae5cdf2_66b3bb4d","updated":"2014-06-19 11:57:20.000000000","message":"That file deals with l3 side db upgrades required for DVR.  This file deals with l2 side upgrades.  \r\n\r\nThere is no commonlatiy between these files.  So I feel it is better to leave them separate.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class DistributedVirtualRouterMacAddress(model_base.BASEV2):"},{"line_number":34,"context_line":"    \"\"\"Represents a v2 neutron distributed virtual router mac address.\"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    host \u003d sa.Column(sa.String(255), primary_key\u003dTrue, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_26be1301","line":33,"updated":"2014-06-17 16:41:13.000000000","message":"where\u0027s the db migration for this model change?","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class DistributedVirtualRouterMacAddress(model_base.BASEV2):"},{"line_number":34,"context_line":"    \"\"\"Represents a v2 neutron distributed virtual router mac address.\"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    host \u003d sa.Column(sa.String(255), primary_key\u003dTrue, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c9dc4977","line":33,"in_reply_to":"1ae5cdf2_26be1301","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \"\"\"Represents a v2 neutron distributed virtual router mac address.\"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    host \u003d sa.Column(sa.String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":37,"context_line":"    mac_address \u003d sa.Column(sa.String(32), nullable\u003dFalse)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class DVRDbMixin(ext_dvr.DVRMacAddressPluginBase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_06daf7e8","line":37,"updated":"2014-06-17 16:41:13.000000000","message":"consider adding a unique constraint to get rid of the uniqueness logic enforcement you do at line 111","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \"\"\"Represents a v2 neutron distributed virtual router mac address.\"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    host \u003d sa.Column(sa.String(255), primary_key\u003dTrue, nullable\u003dFalse)"},{"line_number":37,"context_line":"    mac_address \u003d sa.Column(sa.String(32), nullable\u003dFalse)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class DVRDbMixin(ext_dvr.DVRMacAddressPluginBase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_841ce867","line":37,"in_reply_to":"1ae5cdf2_06daf7e8","updated":"2014-06-19 11:57:20.000000000","message":"Given that earlier changeset is abandoned, i wouldn\u0027t take this risk in the initial merge.  I would like to address the uniqueness enforcement directly via DB as a later patch.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"    \"\"\"Mixin class to add dvr mac address to db_plugin_base_v2.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @property"},{"line_number":44,"context_line":"    def _core_plugin(self):"},{"line_number":45,"context_line":"        return manager.NeutronManager.get_plugin()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _get_dvr_mac_address_by_host(self, context, host):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_66665bbd","line":44,"updated":"2014-06-17 16:41:13.000000000","message":"consider getting this plugin once. Like here:\n\nhttps://github.com/openstack/neutron/blob/master/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py#L47","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    \"\"\"Mixin class to add dvr mac address to db_plugin_base_v2.\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @property"},{"line_number":44,"context_line":"    def _core_plugin(self):"},{"line_number":45,"context_line":"        return manager.NeutronManager.get_plugin()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _get_dvr_mac_address_by_host(self, context, host):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e9fe6537","line":44,"in_reply_to":"1ae5cdf2_66665bbd","updated":"2014-06-19 11:57:20.000000000","message":"The __init__()  is not getting invoked for this class from ML2 plugin\u0027s super() call. must be some python mro issue.  So i have made the property as plugin , but fetch the plugin in every call.\r\n\r\nThis may need to be troubleshot later.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def _get_dvr_mac_address_by_host(self, context, host):"},{"line_number":48,"context_line":"        try:"},{"line_number":49,"context_line":"            query \u003d context.session.query(DistributedVirtualRouterMacAddress)"},{"line_number":50,"context_line":"            dvrma \u003d query.\\"},{"line_number":51,"context_line":"                filter(DistributedVirtualRouterMacAddress.host \u003d\u003d host).one()"},{"line_number":52,"context_line":"        except exc.NoResultFound:"},{"line_number":53,"context_line":"            raise ext_dvr.DVRMacAddressNotFound(host\u003dhost)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c6256f5d","line":50,"updated":"2014-06-17 16:41:13.000000000","message":"please consider using () instead of \\ to break this in multiple lines. Like so:\n\ndvrma \u003d (bla bla\n    bla bla)","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def _get_dvr_mac_address_by_host(self, context, host):"},{"line_number":48,"context_line":"        try:"},{"line_number":49,"context_line":"            query \u003d context.session.query(DistributedVirtualRouterMacAddress)"},{"line_number":50,"context_line":"            dvrma \u003d query.\\"},{"line_number":51,"context_line":"                filter(DistributedVirtualRouterMacAddress.host \u003d\u003d host).one()"},{"line_number":52,"context_line":"        except exc.NoResultFound:"},{"line_number":53,"context_line":"            raise ext_dvr.DVRMacAddressNotFound(host\u003dhost)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_4173a815","line":50,"in_reply_to":"1ae5cdf2_c6256f5d","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":53,"context_line":"            raise ext_dvr.DVRMacAddressNotFound(host\u003dhost)"},{"line_number":54,"context_line":"        return dvrma"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _create_dvr_mac_address(self, context, host):"},{"line_number":57,"context_line":"        \"\"\"Create dvr mac address for a given host."},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_618ac565","line":56,"updated":"2014-06-17 16:41:13.000000000","message":"I\u0027d rather see a logic where the uniqueness constraint is implemented at the DB level, like it was attempted here:\n\nhttps://review.openstack.org/#/c/34823 (but never completed)","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"            mac_address \u003d self._generate_dvr_mac_address(context, host,"},{"line_number":63,"context_line":"                                                         dvr_base_mac,"},{"line_number":64,"context_line":"                                                         max_retries)"},{"line_number":65,"context_line":"            dvr_mac_address_entry \u003d \\"},{"line_number":66,"context_line":"                DistributedVirtualRouterMacAddress(host\u003dhost,"},{"line_number":67,"context_line":"                                                   mac_address\u003dmac_address)"},{"line_number":68,"context_line":"            context.session.add(dvr_mac_address_entry)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_469ebf64","line":65,"updated":"2014-06-17 16:41:13.000000000","message":"comment on line 50 applies everywhere. I think there\u0027s also a pep8 validation for it.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            mac_address \u003d self._generate_dvr_mac_address(context, host,"},{"line_number":63,"context_line":"                                                         dvr_base_mac,"},{"line_number":64,"context_line":"                                                         max_retries)"},{"line_number":65,"context_line":"            dvr_mac_address_entry \u003d \\"},{"line_number":66,"context_line":"                DistributedVirtualRouterMacAddress(host\u003dhost,"},{"line_number":67,"context_line":"                                                   mac_address\u003dmac_address)"},{"line_number":68,"context_line":"            context.session.add(dvr_mac_address_entry)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_09ed51f0","line":65,"in_reply_to":"1ae5cdf2_469ebf64","updated":"2014-06-19 11:57:20.000000000","message":"There was no pep8 validation for this, as otherwise I would have caught it. BTW, i fixed all these.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":79,"context_line":"            LOG.error(_(\"delete_dvr_mac_address host input is empty\"))"},{"line_number":80,"context_line":"            return"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        dvrma \u003d self._get_dvr_mac_address_by_host(context, host)"},{"line_number":83,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":84,"context_line":"            context.session.delete(dvrma)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c15719c9","line":82,"updated":"2014-06-17 16:41:13.000000000","message":"consider a single step query along these lines:\n\ncontext.session.query(DistributedVirtualRouterMacAddress).filter(DistributedVirtualRouterMacAddress.host \u003d\u003d host).delete()\n\nThere is no need to select and delete as it can be race-y.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            LOG.error(_(\"delete_dvr_mac_address host input is empty\"))"},{"line_number":80,"context_line":"            return"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        dvrma \u003d self._get_dvr_mac_address_by_host(context, host)"},{"line_number":83,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":84,"context_line":"            context.session.delete(dvrma)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_a9ac5da0","line":82,"in_reply_to":"1ae5cdf2_c15719c9","updated":"2014-06-19 11:57:20.000000000","message":"i am deleting the row inside the transaction.  That should prevent it from introducing racing.  Further _get_dvr_mac_address_by_host() is a common method, so using that helps here.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":96,"context_line":"        try:"},{"line_number":97,"context_line":"            dvrma \u003d self._get_dvr_mac_address_by_host(context, host)"},{"line_number":98,"context_line":"        except ext_dvr.DVRMacAddressNotFound:"},{"line_number":99,"context_line":"            return self._create_dvr_mac_address(context, host)"},{"line_number":100,"context_line":"        return dvrma"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_61eba5dc","line":99,"updated":"2014-06-17 16:41:13.000000000","message":"yuk: getters that create as side-effects are dangerous...please revise your logic.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        try:"},{"line_number":97,"context_line":"            dvrma \u003d self._get_dvr_mac_address_by_host(context, host)"},{"line_number":98,"context_line":"        except ext_dvr.DVRMacAddressNotFound:"},{"line_number":99,"context_line":"            return self._create_dvr_mac_address(context, host)"},{"line_number":100,"context_line":"        return dvrma"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_a99a9d5f","line":99,"in_reply_to":"1ae5cdf2_61eba5dc","updated":"2014-06-19 11:57:20.000000000","message":"I agree with your premise that generally getters() are supposed to be idempotent.  \r\n\r\nBut the logic here is intended to ship the same dvr_mac address for multiple restarts of ovs-agent on a given compute server.  This is to conserve mac generation logic and promote re-use of mac address for the the same host.\r\n\r\nFurther the ovs agent needs to obtain a unique mac address as part of this call and this is similar to the tunnel_syc() logic residing for vxlan where tunnel_sync() feeds info to db but also gets back other tunnel stuff.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":124,"context_line":"        raise ext_dvr.MacAddressGenerationFailure(host\u003dhost)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @staticmethod"},{"line_number":127,"context_line":"    def _check_unique_dvr_mac(context, mac_address):"},{"line_number":128,"context_line":"        mac_qry \u003d context.session.query(DistributedVirtualRouterMacAddress)"},{"line_number":129,"context_line":"        try:"},{"line_number":130,"context_line":"            mac_qry.filter_by(mac_address\u003dmac_address).one()"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_869447e9","line":127,"updated":"2014-06-17 16:41:13.000000000","message":"this is not needed if uniqueness constraint is enforced at DB level.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        raise ext_dvr.MacAddressGenerationFailure(host\u003dhost)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @staticmethod"},{"line_number":127,"context_line":"    def _check_unique_dvr_mac(context, mac_address):"},{"line_number":128,"context_line":"        mac_qry \u003d context.session.query(DistributedVirtualRouterMacAddress)"},{"line_number":129,"context_line":"        try:"},{"line_number":130,"context_line":"            mac_qry.filter_by(mac_address\u003dmac_address).one()"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e4368ce6","line":127,"in_reply_to":"1ae5cdf2_869447e9","updated":"2014-06-19 11:57:20.000000000","message":"Answered earlier.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return res"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @log.log"},{"line_number":141,"context_line":"    def get_compute_ports_on_host_by_subnet(self, context, host, subnet):"},{"line_number":142,"context_line":"        vm_ports_by_host \u003d []"},{"line_number":143,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: [subnet]}}"},{"line_number":144,"context_line":"        ports \u003d self._core_plugin.get_ports(context, filters\u003dfilter)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e185f5cf","line":141,"updated":"2014-06-17 16:41:13.000000000","message":"I\u0027d explore ways to improve the query rather than doing a two-step filtering...please consider adding a TODO for future optimization","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return res"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @log.log"},{"line_number":141,"context_line":"    def get_compute_ports_on_host_by_subnet(self, context, host, subnet):"},{"line_number":142,"context_line":"        vm_ports_by_host \u003d []"},{"line_number":143,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: [subnet]}}"},{"line_number":144,"context_line":"        ports \u003d self._core_plugin.get_ports(context, filters\u003dfilter)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c9c9a95b","line":141,"in_reply_to":"1ae5cdf2_e185f5cf","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":144,"context_line":"        ports \u003d self._core_plugin.get_ports(context, filters\u003dfilter)"},{"line_number":145,"context_line":"        LOG.debug(\"List of Ports on subnet %{subnet} received as %{ports}\","},{"line_number":146,"context_line":"                  {\u0027subnet\u0027: subnet, \u0027ports\u0027: ports})"},{"line_number":147,"context_line":"        for port in ports:"},{"line_number":148,"context_line":"            if \u0027compute:\u0027 in port[\u0027device_owner\u0027]:"},{"line_number":149,"context_line":"                # try:"},{"line_number":150,"context_line":"                if port[\u0027binding:host_id\u0027] \u003d\u003d host:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e137b54b","line":147,"updated":"2014-06-17 16:41:13.000000000","message":"consider a comprehension here.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":145,"context_line":"        LOG.debug(\"List of Ports on subnet %{subnet} received as %{ports}\","},{"line_number":146,"context_line":"                  {\u0027subnet\u0027: subnet, \u0027ports\u0027: ports})"},{"line_number":147,"context_line":"        for port in ports:"},{"line_number":148,"context_line":"            if \u0027compute:\u0027 in port[\u0027device_owner\u0027]:"},{"line_number":149,"context_line":"                # try:"},{"line_number":150,"context_line":"                if port[\u0027binding:host_id\u0027] \u003d\u003d host:"},{"line_number":151,"context_line":"                    port_dict \u003d self._core_plugin._make_port_dict("}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_811191b1","line":148,"updated":"2014-06-17 16:41:13.000000000","message":"these two ifs can be combined","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":157,"context_line":"        return vm_ports_by_host"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    @log.log"},{"line_number":160,"context_line":"    def get_compute_ports_by_subnet(self, context, subnet):"},{"line_number":161,"context_line":"        vm_ports \u003d []"},{"line_number":162,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: [subnet]}}"},{"line_number":163,"context_line":"        ports \u003d self._core_plugin.get_ports(context, filters\u003dfilter)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_414dc9c3","line":160,"updated":"2014-06-17 16:41:13.000000000","message":"this method is almost equivalent to get_compute_ports_on_host_by_subnet. There\u0027s got to be a way to reduce code duplication and merge the functionality into a single method.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        return vm_ports_by_host"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    @log.log"},{"line_number":160,"context_line":"    def get_compute_ports_by_subnet(self, context, subnet):"},{"line_number":161,"context_line":"        vm_ports \u003d []"},{"line_number":162,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: [subnet]}}"},{"line_number":163,"context_line":"        ports \u003d self._core_plugin.get_ports(context, filters\u003dfilter)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_a9845dd3","line":160,"in_reply_to":"1ae5cdf2_414dc9c3","updated":"2014-06-19 11:57:20.000000000","message":"Method does not seem to be used.  Was initially written. Removed this now.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":187,"context_line":"                            \" for subnet %s\"), subnet_info)"},{"line_number":188,"context_line":"                return {}"},{"line_number":189,"context_line":"            internal_port \u003d internal_gateway_ports[0]"},{"line_number":190,"context_line":"            subnet_info[\u0027gateway_mac\u0027] \u003d internal_port[\u0027mac_address\u0027]"},{"line_number":191,"context_line":"        except q_exc.SubnetNotFound:"},{"line_number":192,"context_line":"            return {}"},{"line_number":193,"context_line":"        return subnet_info"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_21d51db7","line":190,"updated":"2014-06-17 16:41:13.000000000","message":"consider returning here.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                            \" for subnet %s\"), subnet_info)"},{"line_number":188,"context_line":"                return {}"},{"line_number":189,"context_line":"            internal_port \u003d internal_gateway_ports[0]"},{"line_number":190,"context_line":"            subnet_info[\u0027gateway_mac\u0027] \u003d internal_port[\u0027mac_address\u0027]"},{"line_number":191,"context_line":"        except q_exc.SubnetNotFound:"},{"line_number":192,"context_line":"            return {}"},{"line_number":193,"context_line":"        return subnet_info"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_6965f543","line":190,"in_reply_to":"1ae5cdf2_21d51db7","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"}],"neutron/db/dvr_rpc_base.py":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e7a25039632eef953927512a0595bb158d6461bd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class DVRServerRpcMixin(dvr_db.DVRDbMixin):"},{"line_number":30,"context_line":"    "},{"line_number":31,"context_line":"    def delete_dvr_mac_address(self, context, host):"},{"line_number":32,"context_line":"        return super(DVRServerRpcMixin, self).\\"},{"line_number":33,"context_line":"                delete_dvr_mac_address(context,host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAW3%2F%2FRGE%3D","line":30,"updated":"2014-04-15 17:12:59.000000000","message":"Whitespace. Run pep8 on all files before you push the code.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class DVRServerRpcMixin(dvr_db.DVRDbMixin):"},{"line_number":30,"context_line":"    "},{"line_number":31,"context_line":"    def delete_dvr_mac_address(self, context, host):"},{"line_number":32,"context_line":"        return super(DVRServerRpcMixin, self).\\"},{"line_number":33,"context_line":"                delete_dvr_mac_address(context,host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_41ca5250","line":30,"in_reply_to":"AAAAW3%2F%2FRGE%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class DVRServerRpcMixin(dvr_db.DVRDbMixin):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def delete_dvr_mac_address(self, context, host):"},{"line_number":32,"context_line":"        return super(DVRServerRpcMixin, self).\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_681c9314","line":29,"updated":"2014-06-09 07:10:33.000000000","message":"I am not sure why this class is needed. ML2 plugin can inherit DVRDbMixin directly and the two methods below have no difference from those in the parent class.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class DVRServerRpcMixin(dvr_db.DVRDbMixin):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def delete_dvr_mac_address(self, context, host):"},{"line_number":32,"context_line":"        return super(DVRServerRpcMixin, self).\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_6b20df9b","line":29,"in_reply_to":"1ae5cdf2_681c9314","updated":"2014-06-10 05:49:18.000000000","message":"We took example of SecurityGroupServerRpcMixin (available in security_groups_rpc_base.py) and remodeled it to this file.\r\n\r\nIf ML2 plugin can inherit DVRDbMixin directly, that makes the code lot simpler for us.  We will make that change.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":37,"context_line":"            get_compute_ports_by_subnet(context, subnet)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class DVRServerRpcCallbackMixin(dvr_db.DVRDbMixin):"},{"line_number":41,"context_line":"    \"\"\"A mix-in that gives plugin implementation to enable mac address"},{"line_number":42,"context_line":"    support required for l2 agent operating in  dvr mode."},{"line_number":43,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_e8a503b6","line":40,"updated":"2014-06-09 07:10:33.000000000","message":"It is a callback class and passed to RPC dispatcher, so the class should not inherit the main db based implementation.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":37,"context_line":"            get_compute_ports_by_subnet(context, subnet)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class DVRServerRpcCallbackMixin(dvr_db.DVRDbMixin):"},{"line_number":41,"context_line":"    \"\"\"A mix-in that gives plugin implementation to enable mac address"},{"line_number":42,"context_line":"    support required for l2 agent operating in  dvr mode."},{"line_number":43,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_ce0d8137","line":40,"in_reply_to":"1ae5cdf2_4b296388","updated":"2014-06-10 07:00:57.000000000","message":"Please see my comment below at L.47. The example is to access core_plugin. If you need to access L3-plugin instead, you can use \n\n        l3plugin \u003d manager.NeutronManager.get_service_plugins()[\n            plugin_constants.L3_ROUTER_NAT]\n\nThere is an example in neutron/db/l3_rpc_base.py.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            get_compute_ports_by_subnet(context, subnet)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class DVRServerRpcCallbackMixin(dvr_db.DVRDbMixin):"},{"line_number":41,"context_line":"    \"\"\"A mix-in that gives plugin implementation to enable mac address"},{"line_number":42,"context_line":"    support required for l2 agent operating in  dvr mode."},{"line_number":43,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_4b296388","line":40,"in_reply_to":"1ae5cdf2_e8a503b6","updated":"2014-06-10 05:49:18.000000000","message":"But to generate a mac address during the call to get_dvr_mac_address_by_host, we need access to dvr_db implementation.  How do we satisfy that?","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def get_dvr_mac_address(self, context):"},{"line_number":46,"context_line":"        return super(DVRServerRpcCallbackMixin, self).\\"},{"line_number":47,"context_line":"            get_dvr_mac_address(context)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"},{"line_number":50,"context_line":"        return super(DVRServerRpcCallbackMixin, self).\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_c8876711","line":47,"updated":"2014-06-09 07:10:33.000000000","message":"Based on the above comment, each callback method should call a plugin method as follows:\n\n  core_plugin \u003d manager.NeutronManager.get_plugin()\n  return core_plugin.get_dvr_mac_address(context)","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":55,"context_line":"            get_compute_ports_on_host_by_subnet(context, host, subnet)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_subnet(self, context, subnet):"},{"line_number":58,"context_line":"        return super(DVRServerRpcCallbackMixin, self).\\"},{"line_number":59,"context_line":"            get_subnet(context, subnet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_aa59738f","line":58,"updated":"2014-06-05 17:49:47.000000000","message":"same","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            get_compute_ports_on_host_by_subnet(context, host, subnet)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_subnet(self, context, subnet):"},{"line_number":58,"context_line":"        return super(DVRServerRpcCallbackMixin, self).\\"},{"line_number":59,"context_line":"            get_subnet(context, subnet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_ab3907da","line":58,"in_reply_to":"1ae5cdf2_aa59738f","updated":"2014-06-10 05:49:18.000000000","message":"Ok.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2014, Hewlett Packard, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_a1976dea","line":1,"updated":"2014-06-17 16:41:13.000000000","message":"this # can go","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"from neutron import manager"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class DVRServerRpcCallbackMixin(object):"},{"line_number":23,"context_line":"    \"\"\"A mix-in that gives plugin implementation to enable mac address"},{"line_number":24,"context_line":"    support required for l2 agent operating in dvr mode."},{"line_number":25,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_05174c46","line":22,"updated":"2014-06-17 16:41:13.000000000","message":"I am confused by the use of this one and DVRDbMixin","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from neutron import manager"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class DVRServerRpcCallbackMixin(object):"},{"line_number":23,"context_line":"    \"\"\"A mix-in that gives plugin implementation to enable mac address"},{"line_number":24,"context_line":"    support required for l2 agent operating in dvr mode."},{"line_number":25,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c4d0b0f9","line":22,"in_reply_to":"1ae5cdf2_05174c46","updated":"2014-06-19 11:57:20.000000000","message":"Please look for earlier comment by amotoki.  RPC dispatcher object should not directly access DB stuff.  This class will be instantiated by RPC Dispatcher.\r\n\r\nSo this class is decoupled and will invoke core-plugin.  The core-plugin is derived from DVRDbMixin and so accesses DB to complete the functionality.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def get_dvr_mac_address(self, context):"},{"line_number":28,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":29,"context_line":"        return core_plugin.get_dvr_mac_address(context)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c1b5597f","line":28,"updated":"2014-06-17 16:41:13.000000000","message":"consider using a property to get the core plugin as you did in dvr_db.py","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def get_dvr_mac_address(self, context):"},{"line_number":28,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":29,"context_line":"        return core_plugin.get_dvr_mac_address(context)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e4cdac5e","line":28,"in_reply_to":"1ae5cdf2_c1b5597f","updated":"2014-06-19 11:57:20.000000000","message":"This could not be pursued due to constructor not getting invoked from RpcCallbacks as per the comment by Kyle in that file:\r\n\r\n    def __init__(self, notifier, type_manager):\r\n        # REVISIT(kmestery): This depends on the first three super classes\r\n        # not having their own __init__ functions. If an __init__() is added\r\n        # to one, this could break. Fix this and add a unit test to cover this\r\n        # test in H3.\r\n\r\nSo for now put the plugin property in place and fetch plugin everytime.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"        return core_plugin.get_dvr_mac_address(context)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"},{"line_number":32,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":33,"context_line":"        return core_plugin.get_dvr_mac_address_by_host(context, host)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def get_compute_ports_on_host_by_subnet(self, context, host, subnet):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_81627114","line":32,"updated":"2014-06-17 16:41:13.000000000","message":"ditto","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        return core_plugin.get_dvr_mac_address(context)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_dvr_mac_address_by_host(self, context, host):"},{"line_number":32,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":33,"context_line":"        return core_plugin.get_dvr_mac_address_by_host(context, host)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def get_compute_ports_on_host_by_subnet(self, context, host, subnet):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_a48484d3","line":32,"in_reply_to":"1ae5cdf2_81627114","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":33,"context_line":"        return core_plugin.get_dvr_mac_address_by_host(context, host)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def get_compute_ports_on_host_by_subnet(self, context, host, subnet):"},{"line_number":36,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":37,"context_line":"        return core_plugin.get_compute_ports_on_host_by_subnet(context,"},{"line_number":38,"context_line":"                                                               host,"},{"line_number":39,"context_line":"                                                               subnet)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_a165ad1e","line":36,"updated":"2014-06-17 16:41:13.000000000","message":"ditto","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        return core_plugin.get_dvr_mac_address_by_host(context, host)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def get_compute_ports_on_host_by_subnet(self, context, host, subnet):"},{"line_number":36,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":37,"context_line":"        return core_plugin.get_compute_ports_on_host_by_subnet(context,"},{"line_number":38,"context_line":"                                                               host,"},{"line_number":39,"context_line":"                                                               subnet)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e4692c26","line":36,"in_reply_to":"1ae5cdf2_a165ad1e","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                                               subnet)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_subnet_for_dvr(self, context, subnet):"},{"line_number":42,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":43,"context_line":"        return core_plugin.get_subnet_for_dvr(context, subnet)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e16fb5fa","line":42,"updated":"2014-06-17 16:41:13.000000000","message":"ditto","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                                               subnet)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_subnet_for_dvr(self, context, subnet):"},{"line_number":42,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":43,"context_line":"        return core_plugin.get_subnet_for_dvr(context, subnet)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_24707407","line":42,"in_reply_to":"1ae5cdf2_e16fb5fa","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"}],"neutron/db/l3_rpc_base.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":76,"context_line":"                self._ensure_host_set_on_port(context, plugin, host,"},{"line_number":77,"context_line":"                                              interface, router[\u0027id\u0027])"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _ensure_host_set_on_port(self, context, plugin,"},{"line_number":80,"context_line":"                                 host, port, router_id\u003dNone):"},{"line_number":81,"context_line":"        if (port and port.get(\u0027device_owner\u0027) \u003d\u003d"},{"line_number":82,"context_line":"                constants.DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_a594d88c","line":79,"updated":"2014-06-17 16:41:13.000000000","message":"this diff will look a lot better if you did the dvr specific stuff in the else branch rather than the if...but I am not bothered too much.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                self._ensure_host_set_on_port(context, plugin, host,"},{"line_number":77,"context_line":"                                              interface, router[\u0027id\u0027])"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _ensure_host_set_on_port(self, context, plugin,"},{"line_number":80,"context_line":"                                 host, port, router_id\u003dNone):"},{"line_number":81,"context_line":"        if (port and port.get(\u0027device_owner\u0027) \u003d\u003d"},{"line_number":82,"context_line":"                constants.DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c4da70e8","line":79,"in_reply_to":"1ae5cdf2_a594d88c","updated":"2014-06-19 11:57:20.000000000","message":"when we have a special port, better to handle it first than in the else.  This is example where we can\u0027t do this in else because the else uses a different set of conditions.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":92,"context_line":"        elif (port and (port.get(portbindings.HOST_ID) !\u003d host"},{"line_number":93,"context_line":"                        or port.get(portbindings.VIF_TYPE) \u003d\u003d"},{"line_number":94,"context_line":"                        portbindings.VIF_TYPE_BINDING_FAILED)):"},{"line_number":95,"context_line":"            # All ports , including ports created for SNAT\u0027ing for"},{"line_number":96,"context_line":"            # DVR are handled here"},{"line_number":97,"context_line":"            plugin.update_port(context, port[\u0027id\u0027],"},{"line_number":98,"context_line":"                               {\u0027port\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e5498061","line":95,"updated":"2014-06-17 16:41:13.000000000","message":"femto-nit space between ports and ,","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        elif (port and (port.get(portbindings.HOST_ID) !\u003d host"},{"line_number":93,"context_line":"                        or port.get(portbindings.VIF_TYPE) \u003d\u003d"},{"line_number":94,"context_line":"                        portbindings.VIF_TYPE_BINDING_FAILED)):"},{"line_number":95,"context_line":"            # All ports , including ports created for SNAT\u0027ing for"},{"line_number":96,"context_line":"            # DVR are handled here"},{"line_number":97,"context_line":"            plugin.update_port(context, port[\u0027id\u0027],"},{"line_number":98,"context_line":"                               {\u0027port\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_44ee608c","line":95,"in_reply_to":"1ae5cdf2_e5498061","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"}],"neutron/extensions/dvr.py":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e7a25039632eef953927512a0595bb158d6461bd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2014 Hewlett Packard, Inc"},{"line_number":4,"context_line":"# All rights reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAW3%2F%2FRFM%3D","line":1,"updated":"2014-04-15 17:12:59.000000000","message":"Remove the \"#vim line","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e7a25039632eef953927512a0595bb158d6461bd","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @classmethod"},{"line_number":55,"context_line":"    def get_namespace(cls):"},{"line_number":56,"context_line":"        # todo"},{"line_number":57,"context_line":"        return \"http://docs.openstack.org/ext/dvr/api/v2.0\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAW3%2F%2FREs%3D","line":56,"updated":"2014-04-15 17:12:59.000000000","message":"Follow the right syntax for TODO.\n#TODO(name) Task.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @classmethod"},{"line_number":55,"context_line":"    def get_namespace(cls):"},{"line_number":56,"context_line":"        # todo"},{"line_number":57,"context_line":"        return \"http://docs.openstack.org/ext/dvr/api/v2.0\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_c1dd8216","line":56,"in_reply_to":"AAAAW3%2F%2FREs%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e7a25039632eef953927512a0595bb158d6461bd","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def get_extended_resources(self, version):"},{"line_number":69,"context_line":"        return {}"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        "},{"line_number":72,"context_line":"class DVRMacAddressPluginBase(object):"},{"line_number":73,"context_line":"    __metaclass__ \u003d ABCMeta"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAW3%2F%2FRFg%3D","line":71,"updated":"2014-04-15 17:12:59.000000000","message":"Whitespace. Run pep8 on all files before you push.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def get_extended_resources(self, version):"},{"line_number":69,"context_line":"        return {}"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        "},{"line_number":72,"context_line":"class DVRMacAddressPluginBase(object):"},{"line_number":73,"context_line":"    __metaclass__ \u003d ABCMeta"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_01e84ab3","line":71,"in_reply_to":"AAAAW3%2F%2FRFg%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1ae5cdf2_689f3351","updated":"2014-06-09 07:10:33.000000000","message":"extensions/dvr.py is added in https://review.openstack.org/84223","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cfg.StrOpt(\u0027dvr_base_mac\u0027,"},{"line_number":36,"context_line":"               default\u003d\"fa:16:3f:00:00:00\","},{"line_number":37,"context_line":"               help\u003d_(\u0027The base mac address used for unique\"\\"},{"line_number":38,"context_line":"               \" DVR instances by neutron\u0027)),"},{"line_number":39,"context_line":"]"},{"line_number":40,"context_line":"cfg.CONF.register_opts(dvr_mac_address_opts)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_bbc39a36","line":38,"updated":"2014-06-05 08:46:17.000000000","message":"double-quotes and escaping not necessary\n\nhelp\u003d_(\u0027The base mac address used for unique \u0027\n       \u0027DVR instances by neutron\u0027)),","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cfg.StrOpt(\u0027dvr_base_mac\u0027,"},{"line_number":36,"context_line":"               default\u003d\"fa:16:3f:00:00:00\","},{"line_number":37,"context_line":"               help\u003d_(\u0027The base mac address used for unique\"\\"},{"line_number":38,"context_line":"               \" DVR instances by neutron\u0027)),"},{"line_number":39,"context_line":"]"},{"line_number":40,"context_line":"cfg.CONF.register_opts(dvr_mac_address_opts)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_481b2980","line":38,"in_reply_to":"1ae5cdf2_bbc39a36","updated":"2014-06-10 05:49:18.000000000","message":"ok thanks.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class Dvr(extensions.ExtensionDescriptor):"},{"line_number":44,"context_line":"    \"\"\"Security group extension.\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"},{"line_number":47,"context_line":"    def get_name(cls):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_452422c6","line":44,"updated":"2014-06-09 06:44:55.000000000","message":"Why DVR is a security group extension?  Is this a copy and paste error?\n\nBTW, what\u0027s the difference between DVR extension here and the one in https://review.openstack.org/#/c/84223/24/neutron/extensions/dvr.py?  This code has a dependency on review 84223, so I think this extension doesn\u0027t need to be defined again.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class Dvr(extensions.ExtensionDescriptor):"},{"line_number":44,"context_line":"    \"\"\"Security group extension.\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"},{"line_number":47,"context_line":"    def get_name(cls):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_888611da","line":44,"in_reply_to":"1ae5cdf2_452422c6","updated":"2014-06-10 05:49:18.000000000","message":"This  file is the same off 84223.  I will remove this file as part of this patch set.\r\n\r\nThe security group extension is a copy paste error since we took neutron/extensions/securitygroup.py to remodel this class.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":73,"context_line":"        return {}"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class DVRMacAddressPluginBase(object):"},{"line_number":77,"context_line":"    __metaclass__ \u003d ABCMeta"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @abstractmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_aad093c9","line":76,"updated":"2014-06-05 17:49:47.000000000","message":"Why is this a plugin base?","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        return {}"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class DVRMacAddressPluginBase(object):"},{"line_number":77,"context_line":"    __metaclass__ \u003d ABCMeta"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @abstractmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_08e04195","line":76,"in_reply_to":"1ae5cdf2_aad093c9","updated":"2014-06-10 05:49:18.000000000","message":"This defines the base plugin abstract methods to be provided by the DVR extension and will be used by DVR enabled L2 Agent.   \r\nThe DVRDbMixin class in neutron/db/dvr_db.py  makes this abstract class concrete.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from neutron.api.v2 import attributes"},{"line_number":16,"context_line":"from neutron.common import constants"},{"line_number":17,"context_line":"from neutron.common import exceptions as qexception"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_49ddcf6f","line":14,"updated":"2014-06-10 18:29:29.000000000","message":"Vivek, it looks like conflict resolution lost some imports here.  ABCMeta and abstractmethod.","commit_id":"a9a776b09fff24f345e49e4dace033488ca63024"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":"                      \u0027enforce_policy\u0027: True},"},{"line_number":29,"context_line":"    }"},{"line_number":30,"context_line":"}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class DVRMacAddressNotFound(qexception.NotFound):"},{"line_number":33,"context_line":"    message \u003d _(\"Distributed Virtual Router Mac Address for\""},{"line_number":34,"context_line":"                \" host %(host) does not exist\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_a9e2d32c","line":31,"updated":"2014-06-10 18:29:29.000000000","message":"Need two lines of space here instead of just one.","commit_id":"a9a776b09fff24f345e49e4dace033488ca63024"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class DVRMacAddressPluginBase(object):"},{"line_number":89,"context_line":"    __metaclass__ \u003d ABCMeta"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @abstractmethod"},{"line_number":92,"context_line":"    def delete_dvr_mac_address(self, context, host):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_a98bb366","line":89,"updated":"2014-06-10 18:29:29.000000000","message":"ABCMeta is not imported above.","commit_id":"a9a776b09fff24f345e49e4dace033488ca63024"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":88,"context_line":"class DVRMacAddressPluginBase(object):"},{"line_number":89,"context_line":"    __metaclass__ \u003d ABCMeta"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @abstractmethod"},{"line_number":92,"context_line":"    def delete_dvr_mac_address(self, context, host):"},{"line_number":93,"context_line":"        pass"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_c9e9df1b","line":91,"updated":"2014-06-10 18:29:29.000000000","message":"abstractmethod has not been imported.","commit_id":"a9a776b09fff24f345e49e4dace033488ca63024"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class DVRMacAddressNotFound(qexception.NotFound):"},{"line_number":38,"context_line":"    message \u003d _(\"Distributed Virtual Router Mac Address for\""},{"line_number":39,"context_line":"                \" host %(host) does not exist\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class MacAddressGenerationFailure(qexception.ServiceUnavailable):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_25cfe8b4","line":39,"updated":"2014-06-17 16:41:13.000000000","message":"you missed trailing s after %(host)","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class MacAddressGenerationFailure(qexception.ServiceUnavailable):"},{"line_number":43,"context_line":"    message \u003d _(\"Unable to generate unique dvr mac for host %(host).\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"dvr_mac_address_opts \u003d ["},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027dvr_base_mac\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_45d2345c","line":43,"updated":"2014-06-17 16:41:13.000000000","message":"ditto","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":43,"context_line":"    message \u003d _(\"Unable to generate unique dvr mac for host %(host).\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"dvr_mac_address_opts \u003d ["},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027dvr_base_mac\u0027,"},{"line_number":47,"context_line":"               default\u003d\"fa:16:3f:00:00:00\","},{"line_number":48,"context_line":"               help\u003d_(\u0027The base mac address used for unique \u0027"},{"line_number":49,"context_line":"               \u0027DVR instances by neutron\u0027)),"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e5bc2009","line":46,"updated":"2014-06-17 16:41:13.000000000","message":"what about the other?","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    message \u003d _(\"Unable to generate unique dvr mac for host %(host).\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"dvr_mac_address_opts \u003d ["},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027dvr_base_mac\u0027,"},{"line_number":47,"context_line":"               default\u003d\"fa:16:3f:00:00:00\","},{"line_number":48,"context_line":"               help\u003d_(\u0027The base mac address used for unique \u0027"},{"line_number":49,"context_line":"               \u0027DVR instances by neutron\u0027)),"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_b8abc4d4","line":46,"in_reply_to":"1ae5cdf2_e5bc2009","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"dvr_mac_address_opts \u003d ["},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027dvr_base_mac\u0027,"},{"line_number":47,"context_line":"               default\u003d\"fa:16:3f:00:00:00\","},{"line_number":48,"context_line":"               help\u003d_(\u0027The base mac address used for unique \u0027"},{"line_number":49,"context_line":"               \u0027DVR instances by neutron\u0027)),"},{"line_number":50,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c56ba484","line":47,"updated":"2014-06-17 16:41:13.000000000","message":"what about the one with the 4th octet? Please consider revising the comment on neutron.conf","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"dvr_mac_address_opts \u003d ["},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027dvr_base_mac\u0027,"},{"line_number":47,"context_line":"               default\u003d\"fa:16:3f:00:00:00\","},{"line_number":48,"context_line":"               help\u003d_(\u0027The base mac address used for unique \u0027"},{"line_number":49,"context_line":"               \u0027DVR instances by neutron\u0027)),"},{"line_number":50,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_38797493","line":47,"in_reply_to":"1ae5cdf2_c56ba484","updated":"2014-06-19 11:57:20.000000000","message":"The 3 octet is the default.  The 4 octet can be used instead of 3 octet by configuring that in neutron.conf.  Revised comment in neutron.conf appropriately.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"}],"neutron/plugins/ml2/db.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from sqlalchemy.orm import exc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron.common import constants as q_const"},{"line_number":19,"context_line":"from neutron.db import api as db_api"},{"line_number":20,"context_line":"from neutron.db import models_v2"},{"line_number":21,"context_line":"from neutron.db import securitygroups_db as sg_db"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_85b6fcf7","line":18,"updated":"2014-06-17 16:41:13.000000000","message":"you might want to drop the q_ Quantum died long time ago ;)","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            record \u003d (session.query(models.DVRPortBinding)."},{"line_number":97,"context_line":"                      filter_by(port_id\u003dport_id, host\u003dhost)."},{"line_number":98,"context_line":"                      one())"},{"line_number":99,"context_line":"            session.delete(record)"},{"line_number":100,"context_line":"        except exc.NoResultFound:"},{"line_number":101,"context_line":"            LOG.error(_(\"Unable to find binding for dvr port %s \"), port_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_85843c0c","line":98,"updated":"2014-06-17 16:41:13.000000000","message":"you can delete in one shot. No need to select and delete.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            record \u003d (session.query(models.DVRPortBinding)."},{"line_number":97,"context_line":"                      filter_by(port_id\u003dport_id, host\u003dhost)."},{"line_number":98,"context_line":"                      one())"},{"line_number":99,"context_line":"            session.delete(record)"},{"line_number":100,"context_line":"        except exc.NoResultFound:"},{"line_number":101,"context_line":"            LOG.error(_(\"Unable to find binding for dvr port %s \"), port_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_1b4d9272","line":98,"in_reply_to":"1ae5cdf2_85843c0c","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"unresolved":false,"context_lines":[{"line_number":174,"context_line":"                     filter(models.DVRPortBinding.port_id.startswith(port_id),"},{"line_number":175,"context_line":"                            models.DVRPortBinding.host \u003d\u003d host).one())"},{"line_number":176,"context_line":"        except exc.NoResultFound:"},{"line_number":177,"context_line":"            LOG.debug(_(\"No binding found for DVR port %(port_id) with\""},{"line_number":178,"context_line":"                      \"host %(host)\"),"},{"line_number":179,"context_line":"                      {\u0027port_id\u0027: port_id, \u0027host\u0027: host})"},{"line_number":180,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_8dd5da44","line":177,"updated":"2014-06-20 02:07:33.000000000","message":"No internationalization for debug level bugs. Mention this as this rule is being enforced already by some of other projects.","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                     filter(models.DVRPortBinding.port_id.startswith(port_id),"},{"line_number":175,"context_line":"                            models.DVRPortBinding.host \u003d\u003d host).one())"},{"line_number":176,"context_line":"        except exc.NoResultFound:"},{"line_number":177,"context_line":"            LOG.debug(_(\"No binding found for DVR port %(port_id) with\""},{"line_number":178,"context_line":"                      \"host %(host)\"),"},{"line_number":179,"context_line":"                      {\u0027port_id\u0027: port_id, \u0027host\u0027: host})"},{"line_number":180,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_cab32998","line":177,"in_reply_to":"1ae5cdf2_8dd5da44","updated":"2014-06-20 11:01:18.000000000","message":"OK sure.","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"unresolved":false,"context_lines":[{"line_number":190,"context_line":"                     all())"},{"line_number":191,"context_line":"        except exc.NoResultFound:"},{"line_number":192,"context_line":"            LOG.debug(_(\"No binding found for port %(port_id)s\"),"},{"line_number":193,"context_line":"                      {\u0027port_id\u0027: port_id})"},{"line_number":194,"context_line":"            return"},{"line_number":195,"context_line":"    return query"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_4d4e7239","line":193,"updated":"2014-06-20 02:07:33.000000000","message":"No internationalization for debug level bugs. \nUsing keyword parameters not necessary for a single variable.","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                     all())"},{"line_number":191,"context_line":"        except exc.NoResultFound:"},{"line_number":192,"context_line":"            LOG.debug(_(\"No binding found for port %(port_id)s\"),"},{"line_number":193,"context_line":"                      {\u0027port_id\u0027: port_id})"},{"line_number":194,"context_line":"            return"},{"line_number":195,"context_line":"    return query"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_6aa21540","line":193,"in_reply_to":"1ae5cdf2_4d4e7239","updated":"2014-06-20 11:01:18.000000000","message":"Done","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"}],"neutron/plugins/ml2/drivers/l2pop/mech_driver.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":57,"context_line":"        if (port[\u0027device_owner\u0027] \u003d\u003d"},{"line_number":58,"context_line":"                const.DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED):"},{"line_number":59,"context_line":"            binding \u003d context.binding"},{"line_number":60,"context_line":"            agent_host \u003d binding.host"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            agent_host \u003d port[\u0027binding:host_id\u0027]"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_aa535c14","line":60,"updated":"2014-06-19 14:25:32.000000000","message":"agent_host \u003d context.binding.host","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        if (port[\u0027device_owner\u0027] \u003d\u003d"},{"line_number":58,"context_line":"                const.DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED):"},{"line_number":59,"context_line":"            binding \u003d context.binding"},{"line_number":60,"context_line":"            agent_host \u003d binding.host"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            agent_host \u003d port[\u0027binding:host_id\u0027]"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_8a32010e","line":60,"in_reply_to":"1ae5cdf2_aa535c14","updated":"2014-06-20 11:01:18.000000000","message":"Done","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        if (port[\u0027device_owner\u0027] \u003d\u003d"},{"line_number":58,"context_line":"                const.DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED):"},{"line_number":59,"context_line":"            binding \u003d context.binding"},{"line_number":60,"context_line":"            agent_host \u003d binding.host"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            agent_host \u003d port[\u0027binding:host_id\u0027]"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_ad08d680","line":60,"in_reply_to":"1ae5cdf2_aa535c14","updated":"2014-06-19 15:17:57.000000000","message":"will do","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":"            agent_host \u003d binding.host"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            agent_host \u003d port[\u0027binding:host_id\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        if port[\u0027id\u0027] not in self.remove_fdb_entries:"},{"line_number":65,"context_line":"            self.remove_fdb_entries[port[\u0027id\u0027]] \u003d {}"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_6a4dd471","line":63,"updated":"2014-06-19 14:25:32.000000000","message":"this pattern (extract agent_host from port in one of two ways)\nseems repeated in this module.  can you make it a subroutine?","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            agent_host \u003d binding.host"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            agent_host \u003d port[\u0027binding:host_id\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        if port[\u0027id\u0027] not in self.remove_fdb_entries:"},{"line_number":65,"context_line":"            self.remove_fdb_entries[port[\u0027id\u0027]] \u003d {}"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_9eb16246","line":63,"in_reply_to":"1ae5cdf2_6a4dd471","updated":"2014-06-20 11:01:18.000000000","message":"Done","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            agent_host \u003d binding.host"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            agent_host \u003d port[\u0027binding:host_id\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        if port[\u0027id\u0027] not in self.remove_fdb_entries:"},{"line_number":65,"context_line":"            self.remove_fdb_entries[port[\u0027id\u0027]] \u003d {}"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_2d73e616","line":63,"in_reply_to":"1ae5cdf2_6a4dd471","updated":"2014-06-19 15:17:57.000000000","message":"will surely try to isolate and make this a small routine.\r\nBTW, posted patch set 11 to re-run some failed UT tests after fix.","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"}],"neutron/plugins/ml2/models.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":85,"context_line":"    binding."},{"line_number":86,"context_line":"    \"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    __tablename__ \u003d \u0027ml2_dvr_port_bindings\u0027"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    port_id \u003d sa.Column(sa.String(36),"},{"line_number":91,"context_line":"                        sa.ForeignKey(\u0027ports.id\u0027, ondelete\u003d\"CASCADE\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_2e2a65e7","line":88,"updated":"2014-06-17 16:41:13.000000000","message":"DB migration?","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    binding."},{"line_number":86,"context_line":"    \"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    __tablename__ \u003d \u0027ml2_dvr_port_bindings\u0027"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    port_id \u003d sa.Column(sa.String(36),"},{"line_number":91,"context_line":"                        sa.ForeignKey(\u0027ports.id\u0027, ondelete\u003d\"CASCADE\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_3b524e13","line":88,"in_reply_to":"1ae5cdf2_2e2a65e7","updated":"2014-06-19 11:57:20.000000000","message":"Done","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":"    A port binding stores the port attributes required for the"},{"line_number":84,"context_line":"    portbindings extension, as well as internal ml2 state such as"},{"line_number":85,"context_line":"    which MechanismDriver and which segment are used by the port"},{"line_number":86,"context_line":"    binding."},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    __tablename__ \u003d \u0027ml2_dvr_port_bindings\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_a3538714","line":86,"updated":"2014-06-19 15:46:13.000000000","message":"why do you need a separate portbinding table for dvd?","commit_id":"32b4effe3238dff4e7ace9ddd76f4e57a70eae44"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":"    A port binding stores the port attributes required for the"},{"line_number":84,"context_line":"    portbindings extension, as well as internal ml2 state such as"},{"line_number":85,"context_line":"    which MechanismDriver and which segment are used by the port"},{"line_number":86,"context_line":"    binding."},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    __tablename__ \u003d \u0027ml2_dvr_port_bindings\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_19819fc3","line":86,"in_reply_to":"1ae5cdf2_5ee35a04","updated":"2014-06-23 23:41:12.000000000","message":"thank you.\nwhat\u0027s \"the L2 Agent document\"?  will you submit a separate spec?","commit_id":"32b4effe3238dff4e7ace9ddd76f4e57a70eae44"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    A port binding stores the port attributes required for the"},{"line_number":84,"context_line":"    portbindings extension, as well as internal ml2 state such as"},{"line_number":85,"context_line":"    which MechanismDriver and which segment are used by the port"},{"line_number":86,"context_line":"    binding."},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    __tablename__ \u003d \u0027ml2_dvr_port_bindings\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_fef522cb","line":86,"in_reply_to":"1ae5cdf2_a3538714","updated":"2014-06-19 16:25:55.000000000","message":"Separate port binding table is required only for dvr interfaces, because they are cloned bindings of the original dvr interface port available in the port table.  You can go through the blueprint neutron-ovs-dvr page where there are L3 and L2 design documents, which will give detailed information on this design.","commit_id":"32b4effe3238dff4e7ace9ddd76f4e57a70eae44"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":"    A port binding stores the port attributes required for the"},{"line_number":84,"context_line":"    portbindings extension, as well as internal ml2 state such as"},{"line_number":85,"context_line":"    which MechanismDriver and which segment are used by the port"},{"line_number":86,"context_line":"    binding."},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    __tablename__ \u003d \u0027ml2_dvr_port_bindings\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_74c8ea75","line":86,"in_reply_to":"1ae5cdf2_b9b574ee","updated":"2014-06-24 00:08:38.000000000","message":"It looks like this is a feedback for the wrong patch, the spec is already merged :)\n\nI guess, this is a lesson for next time.","commit_id":"32b4effe3238dff4e7ace9ddd76f4e57a70eae44"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    A port binding stores the port attributes required for the"},{"line_number":84,"context_line":"    portbindings extension, as well as internal ml2 state such as"},{"line_number":85,"context_line":"    which MechanismDriver and which segment are used by the port"},{"line_number":86,"context_line":"    binding."},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    __tablename__ \u003d \u0027ml2_dvr_port_bindings\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_5ee35a04","line":86,"in_reply_to":"1ae5cdf2_b9b574ee","updated":"2014-06-20 11:05:45.000000000","message":"Yes I will update the \"Data model impact\" section of the L2 Agent document and republish.  The dvr interface replication handling was done a little later after this document was originally published.","commit_id":"32b4effe3238dff4e7ace9ddd76f4e57a70eae44"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":"    A port binding stores the port attributes required for the"},{"line_number":84,"context_line":"    portbindings extension, as well as internal ml2 state such as"},{"line_number":85,"context_line":"    which MechanismDriver and which segment are used by the port"},{"line_number":86,"context_line":"    binding."},{"line_number":87,"context_line":"    \"\"\""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    __tablename__ \u003d \u0027ml2_dvr_port_bindings\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_b9b574ee","line":86,"in_reply_to":"1ae5cdf2_fef522cb","updated":"2014-06-19 16:43:52.000000000","message":"i looked at the spec.  https://review.openstack.org/#/c/89934\nbut its \"Data model impact\" section doesn\u0027t have any info on this.","commit_id":"32b4effe3238dff4e7ace9ddd76f4e57a70eae44"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":"                agentschedulers_db.DhcpAgentSchedulerDbMixin,"},{"line_number":70,"context_line":"                addr_pair_db.AllowedAddressPairsMixin,"},{"line_number":71,"context_line":"                extradhcpopt_db.ExtraDhcpOptMixin,"},{"line_number":72,"context_line":"                dvr_db_rpc.DVRServerRpcMixin):"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    \"\"\"Implement the Neutron L2 abstractions using modules."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F7%2B0%3D","line":72,"updated":"2014-04-16 12:27:47.000000000","message":"Doesn\u0027t seem to be the right place for rpc callbacks ?","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":"                agentschedulers_db.DhcpAgentSchedulerDbMixin,"},{"line_number":70,"context_line":"                addr_pair_db.AllowedAddressPairsMixin,"},{"line_number":71,"context_line":"                extradhcpopt_db.ExtraDhcpOptMixin,"},{"line_number":72,"context_line":"                dvr_db_rpc.DVRServerRpcMixin):"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    \"\"\"Implement the Neutron L2 abstractions using modules."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FkrY%3D","line":72,"in_reply_to":"AAAAXH%2F%2F7%2B0%3D","updated":"2014-04-19 08:08:33.000000000","message":"Can DVRServerRpcMixin be moved to l3 plugin since l2 agent doesn\u0027t need the two methods in DVRServerRpcMixin?","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                agentschedulers_db.DhcpAgentSchedulerDbMixin,"},{"line_number":70,"context_line":"                addr_pair_db.AllowedAddressPairsMixin,"},{"line_number":71,"context_line":"                extradhcpopt_db.ExtraDhcpOptMixin,"},{"line_number":72,"context_line":"                dvr_db_rpc.DVRServerRpcMixin):"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    \"\"\"Implement the Neutron L2 abstractions using modules."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_413fb225","line":72,"in_reply_to":"AAAAXH%2F%2FkrY%3D","updated":"2014-05-01 00:01:29.000000000","message":"This is in plan to be used later by dvr.  If we see no usage after full code changes, I will remove this altogether.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":2888,"name":"Mathieu Rohon","email":"mathieu.rohon@gmail.com","username":"mathieu-rohon"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"    _supported_extension_aliases \u003d [\"provider\", \"external-net\", \"binding\","},{"line_number":92,"context_line":"                                    \"quotas\", \"security-group\", \"agent\","},{"line_number":93,"context_line":"                                    \"dhcp_agent_scheduler\","},{"line_number":94,"context_line":"                                    \"multi-provider\", \"allowed-address-pairs\","},{"line_number":95,"context_line":"                                    \"extra_dhcp_opt\"]"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_68b70587","line":94,"updated":"2014-06-02 09:45:08.000000000","message":"Don\u0027t you need to add an alias for your extension?\nIf so how do you manage the fact that your extension is only compatible with OVS implementation?\nYou\u0027ll probably need this code to get merged first? : \nhttps://review.openstack.org/#/c/89208/","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    _supported_extension_aliases \u003d [\"provider\", \"external-net\", \"binding\","},{"line_number":92,"context_line":"                                    \"quotas\", \"security-group\", \"agent\","},{"line_number":93,"context_line":"                                    \"dhcp_agent_scheduler\","},{"line_number":94,"context_line":"                                    \"multi-provider\", \"allowed-address-pairs\","},{"line_number":95,"context_line":"                                    \"extra_dhcp_opt\"]"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_08fe81ae","line":94,"in_reply_to":"1ae5cdf2_27f86cc2","updated":"2014-06-10 05:49:18.000000000","message":"Yes I will be rebasing  to latest patch set of that dependency on 84223 in the next post.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"    _supported_extension_aliases \u003d [\"provider\", \"external-net\", \"binding\","},{"line_number":92,"context_line":"                                    \"quotas\", \"security-group\", \"agent\","},{"line_number":93,"context_line":"                                    \"dhcp_agent_scheduler\","},{"line_number":94,"context_line":"                                    \"multi-provider\", \"allowed-address-pairs\","},{"line_number":95,"context_line":"                                    \"extra_dhcp_opt\"]"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_6e570d03","line":94,"in_reply_to":"1ae5cdf2_482fa93e","updated":"2014-06-10 07:00:57.000000000","message":"supported_extension_aliases is used to indicate what features are provided through API. L3 plugin already defines \u0027dvr\u0027 extension, I don\u0027t see any reason to add \u0027dvr\u0027 to supported_extension_aliases of *ML2 plugin*.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    _supported_extension_aliases \u003d [\"provider\", \"external-net\", \"binding\","},{"line_number":92,"context_line":"                                    \"quotas\", \"security-group\", \"agent\","},{"line_number":93,"context_line":"                                    \"dhcp_agent_scheduler\","},{"line_number":94,"context_line":"                                    \"multi-provider\", \"allowed-address-pairs\","},{"line_number":95,"context_line":"                                    \"extra_dhcp_opt\"]"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_482fa93e","line":94,"in_reply_to":"1ae5cdf2_68b70587","updated":"2014-06-10 05:49:18.000000000","message":"I agree.  I will add \u0027dvr\u0027 keyword to the _supported_extension_aliases.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":2888,"name":"Mathieu Rohon","email":"mathieu.rohon@gmail.com","username":"mathieu-rohon"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"    _supported_extension_aliases \u003d [\"provider\", \"external-net\", \"binding\","},{"line_number":92,"context_line":"                                    \"quotas\", \"security-group\", \"agent\","},{"line_number":93,"context_line":"                                    \"dhcp_agent_scheduler\","},{"line_number":94,"context_line":"                                    \"multi-provider\", \"allowed-address-pairs\","},{"line_number":95,"context_line":"                                    \"extra_dhcp_opt\"]"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_27f86cc2","line":94,"in_reply_to":"1ae5cdf2_68b70587","updated":"2014-06-04 15:03:06.000000000","message":"Sorry for that, alias is declared https://review.openstack.org/#/c/84223/","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _process_dvr_port_binding(self, mech_context, context, attrs):"},{"line_number":280,"context_line":"        binding \u003d mech_context._binding"},{"line_number":281,"context_line":"        #port \u003d mech_context.current"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        host \u003d attrs and attrs.get(portbindings.HOST_ID)"},{"line_number":284,"context_line":"        host_set \u003d attributes.is_attr_set(host)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_8a794095","line":281,"updated":"2014-06-19 14:25:32.000000000","message":"?","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _process_dvr_port_binding(self, mech_context, context, attrs):"},{"line_number":280,"context_line":"        binding \u003d mech_context._binding"},{"line_number":281,"context_line":"        #port \u003d mech_context.current"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        host \u003d attrs and attrs.get(portbindings.HOST_ID)"},{"line_number":284,"context_line":"        host_set \u003d attributes.is_attr_set(host)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_4dbd92b0","line":281,"in_reply_to":"1ae5cdf2_8a794095","updated":"2014-06-19 15:17:57.000000000","message":"line need to be removed.  DVR interface ports will use _binding directly from mech_context and won\u0027t use \u0027current\u0027, as \u0027current\u0027 represents the original dvr interface but \u0027_binding\u0027 represents the replicated binding on a specific Compute server.\r\n\r\nml2_dvr_port_bindings table introduced will hold replicated dvr ports (or cloned ports from original port).  Status of dvr interfaces is a collective AND value of all these replicated ports.  please look for these changes in ml2/plugin.py and ml2/db.py.","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"unresolved":false,"context_lines":[{"line_number":337,"context_line":"        self._update_port_dict_binding(port, binding)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    def _check_and_delete_dvr_port_binding(self, mech_context, context):"},{"line_number":340,"context_line":"        dvr_binding \u003d mech_context._binding"},{"line_number":341,"context_line":"        if (not dvr_binding.router_id and"},{"line_number":342,"context_line":"                dvr_binding.status \u003d\u003d const.PORT_STATUS_DOWN):"},{"line_number":343,"context_line":"            with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_6ab6b4dd","line":340,"updated":"2014-06-20 02:07:33.000000000","message":"Shouldn\u0027t the method binding() that is added to mechanism context in this patch set be used here?","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        self._update_port_dict_binding(port, binding)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    def _check_and_delete_dvr_port_binding(self, mech_context, context):"},{"line_number":340,"context_line":"        dvr_binding \u003d mech_context._binding"},{"line_number":341,"context_line":"        if (not dvr_binding.router_id and"},{"line_number":342,"context_line":"                dvr_binding.status \u003d\u003d const.PORT_STATUS_DOWN):"},{"line_number":343,"context_line":"            with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_eafe2569","line":340,"in_reply_to":"1ae5cdf2_6ab6b4dd","updated":"2014-06-20 11:01:18.000000000","message":"Correct, we should avoid using private members directly.  Fixed that.","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":780,"context_line":"                                                         attrs[\u0027device_id\u0027])"},{"line_number":781,"context_line":"                orig_port \u003d super(Ml2Plugin, self).get_port(context, id)"},{"line_number":782,"context_line":"                network \u003d self.get_network(context, orig_port[\u0027network_id\u0027])"},{"line_number":783,"context_line":"                mech_context \u003d driver_context.\\"},{"line_number":784,"context_line":"                    PortContext(self, context, orig_port, network,"},{"line_number":785,"context_line":"                                original_port\u003dorig_port, binding\u003dbinding)"},{"line_number":786,"context_line":"                need_port_update_notify |\u003d \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_ea6724e8","line":783,"updated":"2014-06-19 14:25:32.000000000","message":"please use () instead of backslash","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":780,"context_line":"                                                         attrs[\u0027device_id\u0027])"},{"line_number":781,"context_line":"                orig_port \u003d super(Ml2Plugin, self).get_port(context, id)"},{"line_number":782,"context_line":"                network \u003d self.get_network(context, orig_port[\u0027network_id\u0027])"},{"line_number":783,"context_line":"                mech_context \u003d driver_context.\\"},{"line_number":784,"context_line":"                    PortContext(self, context, orig_port, network,"},{"line_number":785,"context_line":"                                original_port\u003dorig_port, binding\u003dbinding)"},{"line_number":786,"context_line":"                need_port_update_notify |\u003d \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_8a2cc103","line":783,"in_reply_to":"1ae5cdf2_cde8c2b5","updated":"2014-06-20 11:01:18.000000000","message":"Done","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":780,"context_line":"                                                         attrs[\u0027device_id\u0027])"},{"line_number":781,"context_line":"                orig_port \u003d super(Ml2Plugin, self).get_port(context, id)"},{"line_number":782,"context_line":"                network \u003d self.get_network(context, orig_port[\u0027network_id\u0027])"},{"line_number":783,"context_line":"                mech_context \u003d driver_context.\\"},{"line_number":784,"context_line":"                    PortContext(self, context, orig_port, network,"},{"line_number":785,"context_line":"                                original_port\u003dorig_port, binding\u003dbinding)"},{"line_number":786,"context_line":"                need_port_update_notify |\u003d \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_0af9917f","line":783,"in_reply_to":"1ae5cdf2_ea6724e8","updated":"2014-06-20 11:01:18.000000000","message":"Done","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":780,"context_line":"                                                         attrs[\u0027device_id\u0027])"},{"line_number":781,"context_line":"                orig_port \u003d super(Ml2Plugin, self).get_port(context, id)"},{"line_number":782,"context_line":"                network \u003d self.get_network(context, orig_port[\u0027network_id\u0027])"},{"line_number":783,"context_line":"                mech_context \u003d driver_context.\\"},{"line_number":784,"context_line":"                    PortContext(self, context, orig_port, network,"},{"line_number":785,"context_line":"                                original_port\u003dorig_port, binding\u003dbinding)"},{"line_number":786,"context_line":"                need_port_update_notify |\u003d \\"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_cde8c2b5","line":783,"in_reply_to":"1ae5cdf2_ea6724e8","updated":"2014-06-19 15:17:57.000000000","message":"will do","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"}],"neutron/plugins/ml2/rpc.py":[{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.db import dhcp_rpc_base"},{"line_number":23,"context_line":"from neutron.db import securitygroups_rpc_base as sg_db_rpc"},{"line_number":24,"context_line":"from neutron.db import dvr_rpc_base as dvr_db_rpc"},{"line_number":25,"context_line":"from neutron.agent import dvr_rpc as dvr_rpc"},{"line_number":26,"context_line":"from neutron import manager"},{"line_number":27,"context_line":"from neutron.openstack.common import log"},{"line_number":28,"context_line":"from neutron.openstack.common.rpc import proxy"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2Fkqs%3D","line":25,"updated":"2014-04-19 08:08:33.000000000","message":"\"as dvr_rpc\" is not necessary. Import order need to be changed.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.db import dhcp_rpc_base"},{"line_number":23,"context_line":"from neutron.db import securitygroups_rpc_base as sg_db_rpc"},{"line_number":24,"context_line":"from neutron.db import dvr_rpc_base as dvr_db_rpc"},{"line_number":25,"context_line":"from neutron.agent import dvr_rpc as dvr_rpc"},{"line_number":26,"context_line":"from neutron import manager"},{"line_number":27,"context_line":"from neutron.openstack.common import log"},{"line_number":28,"context_line":"from neutron.openstack.common.rpc import proxy"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_6123d605","line":25,"in_reply_to":"AAAAXH%2F%2Fkqs%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":44,"context_line":"                   type_tunnel.TunnelRpcCallbackMixin,"},{"line_number":45,"context_line":"                   dvr_db_rpc.DVRServerRpcCallbackMixin):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    RPC_API_VERSION \u003d \u00271.1\u0027"},{"line_number":48,"context_line":"    # history"},{"line_number":49,"context_line":"    #   1.0 Initial version (from openvswitch/linuxbridge)"},{"line_number":50,"context_line":"    #   1.1 Support Security Group RPC"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F7%2BY%3D","line":47,"updated":"2014-04-16 12:27:47.000000000","message":"should be increased to 1.2","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                   type_tunnel.TunnelRpcCallbackMixin,"},{"line_number":45,"context_line":"                   dvr_db_rpc.DVRServerRpcCallbackMixin):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    RPC_API_VERSION \u003d \u00271.1\u0027"},{"line_number":48,"context_line":"    # history"},{"line_number":49,"context_line":"    #   1.0 Initial version (from openvswitch/linuxbridge)"},{"line_number":50,"context_line":"    #   1.1 Support Security Group RPC"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_8120daf8","line":47,"in_reply_to":"AAAAXH%2F%2F7%2BY%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def get_compute_ports_on_host_by_subnet(self, rpc_context, **kwargs):"},{"line_number":217,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":218,"context_line":"        subnet \u003d kwargs.get(\u0027subnet\u0027)"},{"line_number":219,"context_line":"        LOG.debug(_(\"L2 Agent requests list of VM ports on host %r\"), host)"},{"line_number":220,"context_line":"        return super(RpcCallbacks, self).\\"},{"line_number":221,"context_line":"            get_compute_ports_on_host_by_subnet(rpc_context, host, subnet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_dbece6bd","line":218,"updated":"2014-06-05 08:46:17.000000000","message":"Why the use of kwargs here instead of making host and subnet part of the function args?","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def get_compute_ports_on_host_by_subnet(self, rpc_context, **kwargs):"},{"line_number":217,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":218,"context_line":"        subnet \u003d kwargs.get(\u0027subnet\u0027)"},{"line_number":219,"context_line":"        LOG.debug(_(\"L2 Agent requests list of VM ports on host %r\"), host)"},{"line_number":220,"context_line":"        return super(RpcCallbacks, self).\\"},{"line_number":221,"context_line":"            get_compute_ports_on_host_by_subnet(rpc_context, host, subnet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_6858e5fa","line":218,"in_reply_to":"1ae5cdf2_dbece6bd","updated":"2014-06-10 05:49:18.000000000","message":"All other methods were using kwargs.  So I followed that standard.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":1923,"name":"Mohammad Banikazemi","email":"mbanikazemi@gmail.com","username":"mb-s"},"unresolved":false,"context_lines":[{"line_number":98,"context_line":"        device \u003d kwargs.get(\u0027device\u0027)"},{"line_number":99,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":100,"context_line":"        LOG.debug(_(\"Device %(device)s details requested by agent \""},{"line_number":101,"context_line":"                    \"%(agent_id)s with host %(host)\"),"},{"line_number":102,"context_line":"                  {\u0027device\u0027: device, \u0027agent_id\u0027: agent_id, \u0027host\u0027: host})"},{"line_number":103,"context_line":"        port_id \u003d self._device_to_port_id(device)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_8a1780a2","line":101,"updated":"2014-06-20 02:07:33.000000000","message":"No internationalization for debug logs any more.","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        device \u003d kwargs.get(\u0027device\u0027)"},{"line_number":99,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":100,"context_line":"        LOG.debug(_(\"Device %(device)s details requested by agent \""},{"line_number":101,"context_line":"                    \"%(agent_id)s with host %(host)\"),"},{"line_number":102,"context_line":"                  {\u0027device\u0027: device, \u0027agent_id\u0027: agent_id, \u0027host\u0027: host})"},{"line_number":103,"context_line":"        port_id \u003d self._device_to_port_id(device)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_2a22cd00","line":101,"in_reply_to":"1ae5cdf2_8a1780a2","updated":"2014-06-20 11:01:18.000000000","message":"Done","commit_id":"4c7a5c6633e110527665207f83143ac4ad089d33"}],"neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py":[{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":269,"context_line":"        if not self.enable_tunneling:"},{"line_number":270,"context_line":"            return"},{"line_number":271,"context_line":"        if not self.enable_distributed_routing:"},{"line_number":272,"context_line":"            return"},{"line_number":273,"context_line":"        self.tun_br.add_flow(table\u003dconstants.TUN_TABLE[network_type],"},{"line_number":274,"context_line":"                             priority\u003d1,"},{"line_number":275,"context_line":"                             tun_id\u003dsegmentation_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_3d0e34e6","line":272,"updated":"2014-06-17 06:20:28.000000000","message":"At the place where this function is called in ovs_neutron_agent, self.enable_distributed_routing and self.enable_tunneling are already guaranteed. So I guess these two checks are not needed?","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"# Copyright 2011 VMware, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_8e5c597f","line":2,"updated":"2014-06-17 16:41:13.000000000","message":"copy and paste error?","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"# Copyright 2011 VMware, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_1b0592c1","line":2,"in_reply_to":"1ae5cdf2_8e5c597f","updated":"2014-06-19 11:57:20.000000000","message":"good catch. DONE.","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":177,"context_line":"        # Remove existing flows in integration bridge"},{"line_number":178,"context_line":"        self.int_br.remove_all_flows()"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        # Insert \u0027drop\u0027 action as the default for Table 2"},{"line_number":181,"context_line":"        self.int_br.add_flow(table\u003dconstants.DVR_TO_SRC_MAC,"},{"line_number":182,"context_line":"                             priority\u003d1,"},{"line_number":183,"context_line":"                             actions\u003d\"drop\")"}],"source_content_type":"text/x-python","patch_set":23,"id":"dab895d6_073cf42e","line":180,"updated":"2014-06-30 07:39:41.000000000","message":"this comment seems confusing as DVR_TO_SRC_MAC is actually 1","commit_id":"09dc56d16dfd9ffa295bb338e235b09cba718d6a"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        # Remove existing flows in integration bridge"},{"line_number":178,"context_line":"        self.int_br.remove_all_flows()"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        # Insert \u0027drop\u0027 action as the default for Table 2"},{"line_number":181,"context_line":"        self.int_br.add_flow(table\u003dconstants.DVR_TO_SRC_MAC,"},{"line_number":182,"context_line":"                             priority\u003d1,"},{"line_number":183,"context_line":"                             actions\u003d\"drop\")"}],"source_content_type":"text/x-python","patch_set":23,"id":"dab895d6_10ca674f","line":180,"in_reply_to":"dab895d6_073cf42e","updated":"2014-06-30 12:26:57.000000000","message":"Done","commit_id":"09dc56d16dfd9ffa295bb338e235b09cba718d6a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":182,"context_line":"                             priority\u003d1,"},{"line_number":183,"context_line":"                             actions\u003d\"drop\")"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # Insert \u0027normal\u0027 action as the default for Table 1"},{"line_number":186,"context_line":"        self.int_br.add_flow(table\u003dconstants.LOCAL_SWITCHING,"},{"line_number":187,"context_line":"                             priority\u003d1,"},{"line_number":188,"context_line":"                             actions\u003d\"normal\")"}],"source_content_type":"text/x-python","patch_set":23,"id":"dab895d6_2749f8d0","line":185,"updated":"2014-06-30 07:39:41.000000000","message":"ditto","commit_id":"09dc56d16dfd9ffa295bb338e235b09cba718d6a"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                             priority\u003d1,"},{"line_number":183,"context_line":"                             actions\u003d\"drop\")"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # Insert \u0027normal\u0027 action as the default for Table 1"},{"line_number":186,"context_line":"        self.int_br.add_flow(table\u003dconstants.LOCAL_SWITCHING,"},{"line_number":187,"context_line":"                             priority\u003d1,"},{"line_number":188,"context_line":"                             actions\u003d\"normal\")"}],"source_content_type":"text/x-python","patch_set":23,"id":"dab895d6_50c4df3f","line":185,"in_reply_to":"dab895d6_2749f8d0","updated":"2014-06-30 12:26:57.000000000","message":"Done","commit_id":"09dc56d16dfd9ffa295bb338e235b09cba718d6a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"# A class to represent a DVR-hosted subnet including vif_ports resident on"},{"line_number":28,"context_line":"# that subnet"},{"line_number":29,"context_line":"class LocalDVRSubnetMapping:"},{"line_number":30,"context_line":"    def __init__(self, subnet, csnat_ofport\u003dconstants.OFPORT_INVALID):"},{"line_number":31,"context_line":"        # set of commpute ports on on this dvr subnet"},{"line_number":32,"context_line":"        self.compute_ports \u003d {}"}],"source_content_type":"text/x-python","patch_set":24,"id":"dab895d6_1ff6f0d7","line":29,"updated":"2014-06-30 14:36:22.000000000","message":"any reason to use old-style class?","commit_id":"863ea7d515965757ff28e285404521f7bf2d05a2"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":68,"context_line":"        return self.csnat_ofport"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class OVSPort:"},{"line_number":72,"context_line":"    def __init__(self, id, ofport, mac, device_owner):"},{"line_number":73,"context_line":"        self.id \u003d id"},{"line_number":74,"context_line":"        self.mac \u003d mac"}],"source_content_type":"text/x-python","patch_set":24,"id":"dab895d6_9f3120a5","line":71,"updated":"2014-06-30 14:36:22.000000000","message":"any reason to use old-style class?","commit_id":"863ea7d515965757ff28e285404521f7bf2d05a2"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":177,"context_line":"        # Remove existing flows in integration bridge"},{"line_number":178,"context_line":"        self.int_br.remove_all_flows()"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        # Insert \u0027drop\u0027 action as the default for Table 2"},{"line_number":181,"context_line":"        self.int_br.add_flow(table\u003dconstants.DVR_TO_SRC_MAC,"},{"line_number":182,"context_line":"                             priority\u003d1,"},{"line_number":183,"context_line":"                             actions\u003d\"drop\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"baada198_d1263168","line":180,"updated":"2014-07-01 04:10:49.000000000","message":"reverted mistakenly?","commit_id":"c4d68b55088eb7a48f1d8c98f7b93a1f71a3cdc1"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":177,"context_line":"        # Remove existing flows in integration bridge"},{"line_number":178,"context_line":"        self.int_br.remove_all_flows()"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        # Insert \u0027drop\u0027 action as the default for Table 2"},{"line_number":181,"context_line":"        self.int_br.add_flow(table\u003dconstants.DVR_TO_SRC_MAC,"},{"line_number":182,"context_line":"                             priority\u003d1,"},{"line_number":183,"context_line":"                             actions\u003d\"drop\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"baada198_850553c4","line":180,"in_reply_to":"baada198_d1263168","updated":"2014-07-01 07:27:52.000000000","message":"Done","commit_id":"c4d68b55088eb7a48f1d8c98f7b93a1f71a3cdc1"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":182,"context_line":"                             priority\u003d1,"},{"line_number":183,"context_line":"                             actions\u003d\"drop\")"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # Insert \u0027normal\u0027 action as the default for Table 1"},{"line_number":186,"context_line":"        self.int_br.add_flow(table\u003dconstants.LOCAL_SWITCHING,"},{"line_number":187,"context_line":"                             priority\u003d1,"},{"line_number":188,"context_line":"                             actions\u003d\"normal\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"baada198_1120a948","line":185,"updated":"2014-07-01 04:10:49.000000000","message":"ditto","commit_id":"c4d68b55088eb7a48f1d8c98f7b93a1f71a3cdc1"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":182,"context_line":"                             priority\u003d1,"},{"line_number":183,"context_line":"                             actions\u003d\"drop\")"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # Insert \u0027normal\u0027 action as the default for Table 1"},{"line_number":186,"context_line":"        self.int_br.add_flow(table\u003dconstants.LOCAL_SWITCHING,"},{"line_number":187,"context_line":"                             priority\u003d1,"},{"line_number":188,"context_line":"                             actions\u003d\"normal\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"baada198_a50a57d0","line":185,"in_reply_to":"baada198_1120a948","updated":"2014-07-01 07:27:52.000000000","message":"Done","commit_id":"c4d68b55088eb7a48f1d8c98f7b93a1f71a3cdc1"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":171,"context_line":"            LOG.exception(_(\"DVR: Failed to obtain local DVR Mac address\"))"},{"line_number":172,"context_line":"            self.enable_distributed_routing \u003d False"},{"line_number":173,"context_line":"            # switch all traffic using L2 learning"},{"line_number":174,"context_line":"            self.int_br.add_flow(priority\u003d1, actions\u003d\"normal\")"},{"line_number":175,"context_line":"            return"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        # Remove existing flows in integration bridge"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_ef26c515","line":174,"updated":"2014-07-02 03:56:30.000000000","message":"it would be more easier to read if you always use LOCAL_SWITCHING explicitly rather than via the default value.","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":171,"context_line":"            LOG.exception(_(\"DVR: Failed to obtain local DVR Mac address\"))"},{"line_number":172,"context_line":"            self.enable_distributed_routing \u003d False"},{"line_number":173,"context_line":"            # switch all traffic using L2 learning"},{"line_number":174,"context_line":"            self.int_br.add_flow(priority\u003d1, actions\u003d\"normal\")"},{"line_number":175,"context_line":"            return"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        # Remove existing flows in integration bridge"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_97c9b07a","line":174,"in_reply_to":"baada198_ef26c515","updated":"2014-07-03 02:48:44.000000000","message":"Done","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":305,"context_line":"                          \"for subnet %s\"), subnet_uuid)"},{"line_number":306,"context_line":"                return"},{"line_number":307,"context_line":"        else:"},{"line_number":308,"context_line":"            # set up  LocalDVRSubnetMapping available for this subnet"},{"line_number":309,"context_line":"            subnet_info \u003d self.plugin_rpc.get_subnet_for_dvr(self.context,"},{"line_number":310,"context_line":"                                                             subnet_uuid)"},{"line_number":311,"context_line":"            if not subnet_info:"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_ba6fa9c4","line":308,"range":{"start_line":308,"start_character":20,"end_line":308,"end_character":21},"updated":"2014-07-02 03:56:30.000000000","message":"extra whitespace","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":305,"context_line":"                          \"for subnet %s\"), subnet_uuid)"},{"line_number":306,"context_line":"                return"},{"line_number":307,"context_line":"        else:"},{"line_number":308,"context_line":"            # set up  LocalDVRSubnetMapping available for this subnet"},{"line_number":309,"context_line":"            subnet_info \u003d self.plugin_rpc.get_subnet_for_dvr(self.context,"},{"line_number":310,"context_line":"                                                             subnet_uuid)"},{"line_number":311,"context_line":"            if not subnet_info:"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_b7c4f45f","line":308,"in_reply_to":"baada198_ba6fa9c4","updated":"2014-07-03 02:48:44.000000000","message":"Done","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        subnet_info \u003d ldm.get_subnet_info()"},{"line_number":324,"context_line":"        ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":325,"context_line":"        local_compute_ports \u003d self.plugin_rpc.\\"},{"line_number":326,"context_line":"            get_compute_ports_on_host_by_subnet(self.context,"},{"line_number":327,"context_line":"                                                self.host,"},{"line_number":328,"context_line":"                                                subnet_uuid)"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_1a36d5e7","line":325,"updated":"2014-07-02 03:56:30.000000000","message":"avoid using backslash this way","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        subnet_info \u003d ldm.get_subnet_info()"},{"line_number":324,"context_line":"        ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":325,"context_line":"        local_compute_ports \u003d self.plugin_rpc.\\"},{"line_number":326,"context_line":"            get_compute_ports_on_host_by_subnet(self.context,"},{"line_number":327,"context_line":"                                                self.host,"},{"line_number":328,"context_line":"                                                subnet_uuid)"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_b79b1471","line":325,"in_reply_to":"baada198_1a36d5e7","updated":"2014-07-03 02:48:44.000000000","message":"Done","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # create rule in Table LOCAL_SWITCHING to forward"},{"line_number":363,"context_line":"        # broadcast/multicast frames from dvr router interface to"},{"line_number":364,"context_line":"        # appropriate local tenant ports"},{"line_number":365,"context_line":"        ofports \u003d \u0027,\u0027.join(map(str, ldm.get_compute_ofports().values()))"},{"line_number":366,"context_line":"        if csnat_ofport !\u003d constants.OFPORT_INVALID:"},{"line_number":367,"context_line":"            ofports \u003d str(csnat_ofport) + \u0027,\u0027 + ofports"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_2f4fddbe","line":364,"updated":"2014-07-02 03:56:30.000000000","message":"which rule this comment is talking about?","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        # create rule in Table LOCAL_SWITCHING to forward"},{"line_number":363,"context_line":"        # broadcast/multicast frames from dvr router interface to"},{"line_number":364,"context_line":"        # appropriate local tenant ports"},{"line_number":365,"context_line":"        ofports \u003d \u0027,\u0027.join(map(str, ldm.get_compute_ofports().values()))"},{"line_number":366,"context_line":"        if csnat_ofport !\u003d constants.OFPORT_INVALID:"},{"line_number":367,"context_line":"            ofports \u003d str(csnat_ofport) + \u0027,\u0027 + ofports"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_97ae1084","line":364,"in_reply_to":"baada198_2f4fddbe","updated":"2014-07-03 02:48:44.000000000","message":"Done","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":409,"context_line":"        # Handle new compute port added use-case"},{"line_number":410,"context_line":"        subnet_uuid \u003d None"},{"line_number":411,"context_line":"        for ips in fixed_ips:"},{"line_number":412,"context_line":"            if ips[\u0027subnet_id\u0027] not in self.local_dvr_map:"},{"line_number":413,"context_line":"                continue"},{"line_number":414,"context_line":"            subnet_uuid \u003d ips[\u0027subnet_id\u0027]"},{"line_number":415,"context_line":"            ldm \u003d self.local_dvr_map[subnet_uuid]"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_1a6415e4","line":412,"updated":"2014-07-02 03:56:30.000000000","message":"this can happen if compute ports are bound before the dvr port.\nisn\u0027t it a problem?  is there something which ensures the ordering?","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":409,"context_line":"        # Handle new compute port added use-case"},{"line_number":410,"context_line":"        subnet_uuid \u003d None"},{"line_number":411,"context_line":"        for ips in fixed_ips:"},{"line_number":412,"context_line":"            if ips[\u0027subnet_id\u0027] not in self.local_dvr_map:"},{"line_number":413,"context_line":"                continue"},{"line_number":414,"context_line":"            subnet_uuid \u003d ips[\u0027subnet_id\u0027]"},{"line_number":415,"context_line":"            ldm \u003d self.local_dvr_map[subnet_uuid]"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_57f9d87e","line":412,"in_reply_to":"baada198_1a6415e4","updated":"2014-07-03 02:48:44.000000000","message":"not 100% sure","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":409,"context_line":"        # Handle new compute port added use-case"},{"line_number":410,"context_line":"        subnet_uuid \u003d None"},{"line_number":411,"context_line":"        for ips in fixed_ips:"},{"line_number":412,"context_line":"            if ips[\u0027subnet_id\u0027] not in self.local_dvr_map:"},{"line_number":413,"context_line":"                continue"},{"line_number":414,"context_line":"            subnet_uuid \u003d ips[\u0027subnet_id\u0027]"},{"line_number":415,"context_line":"            ldm \u003d self.local_dvr_map[subnet_uuid]"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_a3a9167d","line":412,"in_reply_to":"baada198_48de996e","updated":"2014-07-03 05:50:48.000000000","message":"it would save code reader\u0027s time at least.\notherwise a reader needs to compare these copies line-by-line carefully.","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":409,"context_line":"        # Handle new compute port added use-case"},{"line_number":410,"context_line":"        subnet_uuid \u003d None"},{"line_number":411,"context_line":"        for ips in fixed_ips:"},{"line_number":412,"context_line":"            if ips[\u0027subnet_id\u0027] not in self.local_dvr_map:"},{"line_number":413,"context_line":"                continue"},{"line_number":414,"context_line":"            subnet_uuid \u003d ips[\u0027subnet_id\u0027]"},{"line_number":415,"context_line":"            ldm \u003d self.local_dvr_map[subnet_uuid]"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_97829092","line":412,"in_reply_to":"baada198_57f9d87e","updated":"2014-07-03 03:07:14.000000000","message":"to me, the code seems assuming dvr port is bound before compute ports.\nis it always the case?\notherwise local_dvr_map might not have the corresponding entry for the subnet when this method is called.","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        # Handle new compute port added use-case"},{"line_number":410,"context_line":"        subnet_uuid \u003d None"},{"line_number":411,"context_line":"        for ips in fixed_ips:"},{"line_number":412,"context_line":"            if ips[\u0027subnet_id\u0027] not in self.local_dvr_map:"},{"line_number":413,"context_line":"                continue"},{"line_number":414,"context_line":"            subnet_uuid \u003d ips[\u0027subnet_id\u0027]"},{"line_number":415,"context_line":"            ldm \u003d self.local_dvr_map[subnet_uuid]"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_c20608ce","line":412,"in_reply_to":"baada198_97829092","updated":"2014-07-03 03:23:04.000000000","message":"There is no assumption on which port comes first in our implementation.  This area has been excited on our internal test runs.\r\n\r\nIf compute ports comes first, without dvr port bound earlier, the compute port won\u0027t be plumbed for DVR.  The compute port will get VLANs tagged at its end.  However when the DVR port appears later , it will take care of existing compute ports and plumb them all  in _bind_distributed_router_interface_port.","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        # Handle new compute port added use-case"},{"line_number":410,"context_line":"        subnet_uuid \u003d None"},{"line_number":411,"context_line":"        for ips in fixed_ips:"},{"line_number":412,"context_line":"            if ips[\u0027subnet_id\u0027] not in self.local_dvr_map:"},{"line_number":413,"context_line":"                continue"},{"line_number":414,"context_line":"            subnet_uuid \u003d ips[\u0027subnet_id\u0027]"},{"line_number":415,"context_line":"            ldm \u003d self.local_dvr_map[subnet_uuid]"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_48de996e","line":412,"in_reply_to":"baada198_9d19d17b","updated":"2014-07-03 04:55:02.000000000","message":"I looked at this earlier.  It is logical to have them separate because, the _bind_router_interface_port won\u0027t have access to vif of the compute port, while normal compute prot processing has the vif only available.  The savings are not much here for justifying subrouting.","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":409,"context_line":"        # Handle new compute port added use-case"},{"line_number":410,"context_line":"        subnet_uuid \u003d None"},{"line_number":411,"context_line":"        for ips in fixed_ips:"},{"line_number":412,"context_line":"            if ips[\u0027subnet_id\u0027] not in self.local_dvr_map:"},{"line_number":413,"context_line":"                continue"},{"line_number":414,"context_line":"            subnet_uuid \u003d ips[\u0027subnet_id\u0027]"},{"line_number":415,"context_line":"            ldm \u003d self.local_dvr_map[subnet_uuid]"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_9d19d17b","line":412,"in_reply_to":"baada198_c20608ce","updated":"2014-07-03 03:56:24.000000000","message":"thank you for explanation.\ni missed that _bind_distributed_router_interface_port had a copy of the code.\ncan you make them a subroutine?","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":535,"context_line":"                                                         device_owner,"},{"line_number":536,"context_line":"                                                         local_vlan_id)"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        if \u0027compute\u0027 in device_owner:"},{"line_number":539,"context_line":"            self._bind_compute_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":540,"context_line":"                                                  device_owner,"},{"line_number":541,"context_line":"                                                  local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_6fc8f522","line":538,"updated":"2014-07-02 03:56:30.000000000","message":"i guess device_owner.startswith(\u0027compute:\u0027) is more clear.","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":535,"context_line":"                                                         device_owner,"},{"line_number":536,"context_line":"                                                         local_vlan_id)"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        if \u0027compute\u0027 in device_owner:"},{"line_number":539,"context_line":"            self._bind_compute_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":540,"context_line":"                                                  device_owner,"},{"line_number":541,"context_line":"                                                  local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_b7a9547d","line":538,"in_reply_to":"baada198_6fc8f522","updated":"2014-07-03 02:48:44.000000000","message":"Done","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":720,"context_line":"        if not self.enable_distributed_routing:"},{"line_number":721,"context_line":"            return"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        if not vif_port:"},{"line_number":724,"context_line":"            LOG.debug(\"DVR: VIF Port not available for delete %s\", vif_port)"},{"line_number":725,"context_line":"            return"},{"line_number":726,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_2f827d94","line":723,"updated":"2014-07-02 03:56:30.000000000","message":"this case seems not possible","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":720,"context_line":"        if not self.enable_distributed_routing:"},{"line_number":721,"context_line":"            return"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        if not vif_port:"},{"line_number":724,"context_line":"            LOG.debug(\"DVR: VIF Port not available for delete %s\", vif_port)"},{"line_number":725,"context_line":"            return"},{"line_number":726,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_77cdfc5c","line":723,"in_reply_to":"baada198_2f827d94","updated":"2014-07-03 02:48:44.000000000","message":"Done","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":724,"context_line":"            LOG.debug(\"DVR: VIF Port not available for delete %s\", vif_port)"},{"line_number":725,"context_line":"            return"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        # Handle  port removed use-case"},{"line_number":728,"context_line":"        if vif_port.vif_id not in self.local_ports:"},{"line_number":729,"context_line":"            LOG.debug(\"DVR: Non distributed port, ignoring %s\", vif_port)"},{"line_number":730,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_ef5ec544","line":727,"range":{"start_line":727,"start_character":16,"end_line":727,"end_character":17},"updated":"2014-07-02 03:56:30.000000000","message":"extra whitespace","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":724,"context_line":"            LOG.debug(\"DVR: VIF Port not available for delete %s\", vif_port)"},{"line_number":725,"context_line":"            return"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        # Handle  port removed use-case"},{"line_number":728,"context_line":"        if vif_port.vif_id not in self.local_ports:"},{"line_number":729,"context_line":"            LOG.debug(\"DVR: Non distributed port, ignoring %s\", vif_port)"},{"line_number":730,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_97dc5014","line":727,"in_reply_to":"baada198_ef5ec544","updated":"2014-07-03 02:48:44.000000000","message":"Done","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":735,"context_line":"            self._unbind_distributed_router_interface_port(vif_port,"},{"line_number":736,"context_line":"                                                           local_vlan_id)"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        if \u0027compute\u0027 in ovsport.get_device_owner():"},{"line_number":739,"context_line":"            self._unbind_compute_port_on_dvr_subnet(vif_port,"},{"line_number":740,"context_line":"                                                    local_vlan_id)"},{"line_number":741,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_4f541121","line":738,"updated":"2014-07-02 03:56:30.000000000","message":"startswith(\u0027compute:\u0027) ?","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":735,"context_line":"            self._unbind_distributed_router_interface_port(vif_port,"},{"line_number":736,"context_line":"                                                           local_vlan_id)"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        if \u0027compute\u0027 in ovsport.get_device_owner():"},{"line_number":739,"context_line":"            self._unbind_compute_port_on_dvr_subnet(vif_port,"},{"line_number":740,"context_line":"                                                    local_vlan_id)"},{"line_number":741,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_17004066","line":738,"in_reply_to":"baada198_4f541121","updated":"2014-07-03 02:48:44.000000000","message":"Done","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":6876,"name":"stephen-ma","email":"stephenbma43@gmail.com","username":"stephen-ma"},"unresolved":false,"context_lines":[{"line_number":176,"context_line":"            return"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Remove existing flows in integration bridge"},{"line_number":179,"context_line":"        self.int_br.remove_all_flows()"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # Insert \u0027drop\u0027 action as the default for Table DVR_TO_SRC_MAC"},{"line_number":182,"context_line":"        self.int_br.add_flow(table\u003dconstants.DVR_TO_SRC_MAC,"}],"source_content_type":"text/x-python","patch_set":27,"id":"baada198_7a4dbc3d","line":179,"updated":"2014-07-03 22:11:49.000000000","message":"My vxlan endpoints are being destroyed because of this line.\n\nThis routine is removing all the flows setup from setup_integration_br.  One of the  flows removed is table\u003d23 (CANARY_TABLE) on br-int.  This table is used by OVSNeutronAgent to check whether the OVS restarted.  If it is missing, OVS has just restarted.\n\nWhen the ovs agent restarts, existing bridges are destroyed and re-created again.\n\nThe check is done by OVSNeutronAgent.check_ovs_restart().  Now it always return True because flow table\u003d23 on br-int is missing.\n\nI hacked this by adding the flow for table 23 back to br-int here.\n\n+        # Add a canary flow to int_br to track OVS restarts\n+        self.int_br.add_flow(table\u003dconstants.CANARY_TABLE, priority\u003d0,\n+                             actions\u003d\"drop\")\n\nNow the vxlan endpoints no longer missing.","commit_id":"9ee2d4d9757de25179eb9365b476cc21ab6ba81e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            return"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Remove existing flows in integration bridge"},{"line_number":179,"context_line":"        self.int_br.remove_all_flows()"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # Insert \u0027drop\u0027 action as the default for Table DVR_TO_SRC_MAC"},{"line_number":182,"context_line":"        self.int_br.add_flow(table\u003dconstants.DVR_TO_SRC_MAC,"}],"source_content_type":"text/x-python","patch_set":27,"id":"baada198_99b373e8","line":179,"in_reply_to":"baada198_7a4dbc3d","updated":"2014-07-04 07:08:23.000000000","message":"Thanks for this catch. Please feel free to update this code to handle the canary table and post the patchset.\r\n\r\nWe are also investigating of any repercussions of DVR on arp responder code also.","commit_id":"9ee2d4d9757de25179eb9365b476cc21ab6ba81e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":534,"context_line":"                                                         device_owner,"},{"line_number":535,"context_line":"                                                         local_vlan_id)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        if device_owner and device_owner.startswith(\u0027compute:\u0027):"},{"line_number":538,"context_line":"            self._bind_compute_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":539,"context_line":"                                                  device_owner,"},{"line_number":540,"context_line":"                                                  local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"baada198_225d04ea","line":537,"range":{"start_line":537,"start_character":11,"end_line":537,"end_character":27},"updated":"2014-07-03 03:19:14.000000000","message":"for which case this test is necessary?","commit_id":"9ee2d4d9757de25179eb9365b476cc21ab6ba81e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":534,"context_line":"                                                         device_owner,"},{"line_number":535,"context_line":"                                                         local_vlan_id)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        if device_owner and device_owner.startswith(\u0027compute:\u0027):"},{"line_number":538,"context_line":"            self._bind_compute_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":539,"context_line":"                                                  device_owner,"},{"line_number":540,"context_line":"                                                  local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"baada198_82309002","line":537,"in_reply_to":"baada198_02280033","updated":"2014-07-03 03:53:50.000000000","message":"i meant \"device_owner and\" part of the test.\ncan it be None or something?","commit_id":"9ee2d4d9757de25179eb9365b476cc21ab6ba81e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":534,"context_line":"                                                         device_owner,"},{"line_number":535,"context_line":"                                                         local_vlan_id)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        if device_owner and device_owner.startswith(\u0027compute:\u0027):"},{"line_number":538,"context_line":"            self._bind_compute_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":539,"context_line":"                                                  device_owner,"},{"line_number":540,"context_line":"                                                  local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"baada198_02280033","line":537,"in_reply_to":"baada198_225d04ea","updated":"2014-07-03 03:22:46.000000000","message":"For the case where a compute port on DVR subnet appears on the node after DVR router interfaces were instatiated and plumbed.","commit_id":"9ee2d4d9757de25179eb9365b476cc21ab6ba81e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":534,"context_line":"                                                         device_owner,"},{"line_number":535,"context_line":"                                                         local_vlan_id)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        if device_owner and device_owner.startswith(\u0027compute:\u0027):"},{"line_number":538,"context_line":"            self._bind_compute_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":539,"context_line":"                                                  device_owner,"},{"line_number":540,"context_line":"                                                  local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"baada198_fde9ed80","line":537,"in_reply_to":"baada198_82309002","updated":"2014-07-03 04:37:38.000000000","message":"No it won\u0027t be None.\r\n\r\nWe can update that line just as:\r\nif device_owner.startswith(\u0027compute\u0027):","commit_id":"9ee2d4d9757de25179eb9365b476cc21ab6ba81e"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":534,"context_line":"                                                         device_owner,"},{"line_number":535,"context_line":"                                                         local_vlan_id)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        if device_owner and device_owner.startswith(\u0027compute:\u0027):"},{"line_number":538,"context_line":"            self._bind_compute_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":539,"context_line":"                                                  device_owner,"},{"line_number":540,"context_line":"                                                  local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"baada198_a8f8154a","line":537,"in_reply_to":"baada198_fde9ed80","updated":"2014-07-03 05:19:09.000000000","message":"better safe than sorry...just saying...","commit_id":"9ee2d4d9757de25179eb9365b476cc21ab6ba81e"},{"author":{"_account_id":9820,"name":"Liping Mao","email":"limao@cisco.com","username":"LipingMao"},"unresolved":false,"context_lines":[{"line_number":147,"context_line":"        \u0027\u0027\u0027Setup up initial dvr flows into integration bridge and tunnel"},{"line_number":148,"context_line":"        bridge."},{"line_number":149,"context_line":"        \u0027\u0027\u0027"},{"line_number":150,"context_line":"        if not self.enable_tunneling:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        if not self.enable_distributed_routing:"}],"source_content_type":"text/x-python","patch_set":38,"id":"baada198_10f6468f","line":150,"updated":"2014-07-14 02:06:31.000000000","message":"Just a question:\nI see that we want to support DVR in not only vxlan, but also vlan. Will we support DVR in vlan mode here?","commit_id":"7a07e70813493e596ff11662c1e21ee9d6a8a1db"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":147,"context_line":"        \u0027\u0027\u0027Setup up initial dvr flows into integration bridge and tunnel"},{"line_number":148,"context_line":"        bridge."},{"line_number":149,"context_line":"        \u0027\u0027\u0027"},{"line_number":150,"context_line":"        if not self.enable_tunneling:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        if not self.enable_distributed_routing:"}],"source_content_type":"text/x-python","patch_set":38,"id":"baada198_e90ab0d0","line":150,"in_reply_to":"baada198_10f6468f","updated":"2014-07-14 19:56:00.000000000","message":"We could discuss VLAN requirements in the future. But for now, this is VXLAN only.","commit_id":"7a07e70813493e596ff11662c1e21ee9d6a8a1db"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron.api.rpc import dvr_rpc"},{"line_number":19,"context_line":"from neutron.common import constants as q_const"},{"line_number":20,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":21,"context_line":"from neutron.plugins.openvswitch.common import constants"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_3ac39939","line":19,"updated":"2014-07-17 03:50:59.000000000","message":"I am a really good nitpicker :)\ns/q_const/n_const as the quantum boat has sailed","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":301,"context_line":"        # use fixed_ips[0]"},{"line_number":302,"context_line":"        subnet_uuid \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":303,"context_line":"        csnat_ofport \u003d constants.OFPORT_INVALID"},{"line_number":304,"context_line":"        ldm \u003d None"},{"line_number":305,"context_line":"        if subnet_uuid in self.local_dvr_map:"},{"line_number":306,"context_line":"            ldm \u003d self.local_dvr_map[subnet_uuid]"},{"line_number":307,"context_line":"            csnat_ofport \u003d ldm.get_csnat_ofport()"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_bad089ca","line":304,"updated":"2014-07-17 03:50:59.000000000","message":"Unneeded as ldm is initialized in both if/else blocks below.","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":325,"context_line":"        # DVR takes over"},{"line_number":326,"context_line":"        ldm.set_dvr_owned(True)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        subnet_info \u003d ldm.get_subnet_info()"},{"line_number":329,"context_line":"        ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":330,"context_line":"        local_compute_ports \u003d ("},{"line_number":331,"context_line":"            self.plugin_rpc.get_compute_ports_on_host_by_subnet("}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_1aaa551a","line":328,"updated":"2014-07-17 03:50:59.000000000","message":"This is reloading subnet_info even if it was already set at line 314, should this be moved to after line 311 ?","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":350,"context_line":"                ovsport \u003d OVSPort(vif.vif_id, vif.ofport,"},{"line_number":351,"context_line":"                                  vif.vif_mac, prt[\u0027device_owner\u0027])"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"                ovsport.add_subnet(subnet_uuid)"},{"line_number":354,"context_line":"                self.local_ports[vif.vif_id] \u003d ovsport"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"            # create rule for just this vm port"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_9501d606","line":353,"updated":"2014-07-17 03:50:59.000000000","message":"Since you\u0027re doing this in both cases it can be moved after line 354.\n\nOr even do something simpler like this:\n\novsport \u003d self.local_ports[vif.vif_id] if vif.vif_id in self.local_ports\nif not ovsport:\n    ovsport \u003d OVSPort(...)\n    self.local_ports[vif.vif_id] \u003d ovsport\novsport.add_subnet(subnet_uuid)","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":373,"context_line":"                                 priority\u003d2,"},{"line_number":374,"context_line":"                                 proto\u003d\u0027ip\u0027,"},{"line_number":375,"context_line":"                                 dl_vlan\u003dlocal_vlan,"},{"line_number":376,"context_line":"                                 nw_dst\u003dip_subnet,"},{"line_number":377,"context_line":"                                 actions\u003d\"strip_vlan,mod_dl_src:%s,\""},{"line_number":378,"context_line":"                                 \"output:%s\" %"},{"line_number":379,"context_line":"                                 (subnet_info[\u0027gateway_mac\u0027], ofports))"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_55f65e5e","line":376,"updated":"2014-07-17 03:50:59.000000000","message":"Why don\u0027t you just use subnet_info[\u0027cidr\u0027] here ?  ip_subnet is initialized above but only used in this one place.","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":410,"context_line":"    def _bind_compute_port_on_dvr_subnet(self, port, fixed_ips,"},{"line_number":411,"context_line":"                                         device_owner, local_vlan):"},{"line_number":412,"context_line":"        # Handle new compute port added use-case"},{"line_number":413,"context_line":"        subnet_uuid \u003d None"},{"line_number":414,"context_line":"        for ips in fixed_ips:"},{"line_number":415,"context_line":"            if ips[\u0027subnet_id\u0027] not in self.local_dvr_map:"},{"line_number":416,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_d57eee69","line":413,"updated":"2014-07-17 03:50:59.000000000","message":"You don\u0027t need this initialization as subnet_uuid is only used inside the loop, and it\u0027s initialized on line 417","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":430,"context_line":"            ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":431,"context_line":"            csnat_ofport \u003d ldm.get_csnat_ofport()"},{"line_number":432,"context_line":"            ldm.add_compute_ofport(port.vif_id, port.ofport)"},{"line_number":433,"context_line":"            if port.vif_id in self.local_ports:"},{"line_number":434,"context_line":"                # ensure if a compute port is already on a different"},{"line_number":435,"context_line":"                # dvr routed subnet"},{"line_number":436,"context_line":"                # if yes, queue this subnet to that port"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_f5dbf27a","line":433,"updated":"2014-07-17 03:50:59.000000000","message":"Same comment here as on line 353 above","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":461,"context_line":"                                 priority\u003d2,"},{"line_number":462,"context_line":"                                 proto\u003d\u0027ip\u0027,"},{"line_number":463,"context_line":"                                 dl_vlan\u003dlocal_vlan,"},{"line_number":464,"context_line":"                                 nw_dst\u003dip_subnet,"},{"line_number":465,"context_line":"                                 actions\u003d\"strip_vlan,mod_dl_src:%s,\""},{"line_number":466,"context_line":"                                 \" output:%s\" %"},{"line_number":467,"context_line":"                                 (subnet_info[\u0027gateway_mac\u0027], ofports))"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_b59eda05","line":464,"updated":"2014-07-17 03:50:59.000000000","message":"Same question about ip_subnet as above.","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":475,"context_line":"            subs \u003d list(ovsport.get_subnets())"},{"line_number":476,"context_line":"            LOG.error(_(\"Centralized-SNAT port %s already seen on \"),"},{"line_number":477,"context_line":"                      port.vif_id)"},{"line_number":478,"context_line":"            LOG.error(_(\"a different subnet %s\"), subs[0])"},{"line_number":479,"context_line":"            return"},{"line_number":480,"context_line":"        # since centralized-SNAT (CSNAT) port must have only one fixed"},{"line_number":481,"context_line":"        # IP, directly use fixed_ips[0]"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_f5ae922e","line":478,"updated":"2014-07-17 03:50:59.000000000","message":"Can these be combined into a single LOG.error() ?","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":481,"context_line":"        # IP, directly use fixed_ips[0]"},{"line_number":482,"context_line":"        subnet_uuid \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":483,"context_line":"        ldm \u003d None"},{"line_number":484,"context_line":"        subnet_info \u003d None"},{"line_number":485,"context_line":"        if subnet_uuid not in self.local_dvr_map:"},{"line_number":486,"context_line":"            # no csnat ports seen on this subnet - create csnat state"},{"line_number":487,"context_line":"            # for this subnet"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_d56fcefa","line":484,"updated":"2014-07-17 03:50:59.000000000","message":"Don\u0027t think either of these initializations is necessary.","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":516,"context_line":"                             priority\u003d2,"},{"line_number":517,"context_line":"                             proto\u003d\u0027ip\u0027,"},{"line_number":518,"context_line":"                             dl_vlan\u003dlocal_vlan,"},{"line_number":519,"context_line":"                             nw_dst\u003dip_subnet,"},{"line_number":520,"context_line":"                             actions\u003d\"strip_vlan,mod_dl_src:%s,\""},{"line_number":521,"context_line":"                             \" output:%s\" %"},{"line_number":522,"context_line":"                             (subnet_info[\u0027gateway_mac\u0027], ofports))"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_f575b2cc","line":519,"updated":"2014-07-17 03:50:59.000000000","message":"Same comment about ip_subnet here as above, can just use subnet_info[\u0027cidr\u0027] directly.","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":538,"context_line":"                                                         device_owner,"},{"line_number":539,"context_line":"                                                         local_vlan_id)"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"        if device_owner and device_owner.startswith(\u0027compute:\u0027):"},{"line_number":542,"context_line":"            self._bind_compute_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":543,"context_line":"                                                  device_owner,"},{"line_number":544,"context_line":"                                                  local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_d53d0edf","line":541,"updated":"2014-07-17 03:50:59.000000000","message":"Should be an elif as device_owner can only be a single value.","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":543,"context_line":"                                                  device_owner,"},{"line_number":544,"context_line":"                                                  local_vlan_id)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"        if device_owner \u003d\u003d q_const.DEVICE_OWNER_ROUTER_SNAT:"},{"line_number":547,"context_line":"            self._bind_centralized_snat_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":548,"context_line":"                                                           device_owner,"},{"line_number":549,"context_line":"                                                           local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_151f8671","line":546,"updated":"2014-07-17 03:50:59.000000000","message":"Here too","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":552,"context_line":""},{"line_number":553,"context_line":"        ovsport \u003d self.local_ports[port.vif_id]"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"        # removal of distributed router interface"},{"line_number":556,"context_line":"        subnet_ids \u003d ovsport.get_subnets()"},{"line_number":557,"context_line":"        subnet_set \u003d set(subnet_ids)"},{"line_number":558,"context_line":"        # ensure we process for all the subnets laid on this removed port"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_e7598936","line":555,"updated":"2014-07-17 03:50:59.000000000","message":"LOG.debug() here like in two functions below?","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":577,"context_line":"                                         dl_dst\u003dovsport.get_mac())"},{"line_number":578,"context_line":"            ldm.remove_all_compute_ofports()"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"            if ldm.get_csnat_ofport() !\u003d -1:"},{"line_number":581,"context_line":"                # If there is a csnat port on this agent, preserve"},{"line_number":582,"context_line":"                # the local_dvr_map state"},{"line_number":583,"context_line":"                ofports \u003d str(ldm.get_csnat_ofport())"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_e70b4922","line":580,"updated":"2014-07-17 03:50:59.000000000","message":"s/-1/constants.OFPORT_INVALID","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":638,"context_line":"            self.int_br.delete_flows(table\u003dconstants.DVR_TO_SRC_MAC,"},{"line_number":639,"context_line":"                                     dl_vlan\u003dlocal_vlan,"},{"line_number":640,"context_line":"                                     dl_dst\u003dovsport.get_mac())"},{"line_number":641,"context_line":"            if ldm.get_csnat_ofport() !\u003d -1:"},{"line_number":642,"context_line":"                # If there is a csnat port on this agent, preserve"},{"line_number":643,"context_line":"                # the local_dvr_map state"},{"line_number":644,"context_line":"                ofports \u003d str(ldm.get_csnat_ofport()) + \u0027,\u0027 + ofports"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_0712fd57","line":641,"updated":"2014-07-17 03:50:59.000000000","message":"s/-1/constants.OFPORT_INVALID","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":735,"context_line":"            self._unbind_distributed_router_interface_port(vif_port,"},{"line_number":736,"context_line":"                                                           local_vlan_id)"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        if device_owner and device_owner.startswith(\u0027compute:\u0027):"},{"line_number":739,"context_line":"            self._unbind_compute_port_on_dvr_subnet(vif_port,"},{"line_number":740,"context_line":"                                                    local_vlan_id)"},{"line_number":741,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_e7a7c909","line":738,"updated":"2014-07-17 03:50:59.000000000","message":"elif ?","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":739,"context_line":"            self._unbind_compute_port_on_dvr_subnet(vif_port,"},{"line_number":740,"context_line":"                                                    local_vlan_id)"},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"        if device_owner \u003d\u003d q_const.DEVICE_OWNER_ROUTER_SNAT:"},{"line_number":743,"context_line":"            self._unbind_centralized_snat_port_on_dvr_subnet(vif_port,"},{"line_number":744,"context_line":"                                                             local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":41,"id":"baada198_07ae7de7","line":742,"updated":"2014-07-17 03:50:59.000000000","message":"elif ?","commit_id":"6e37fde018b6344fd38b15ad01f414dbc9c7d5dc"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron.api.rpc.handlers import dvr_rpc"},{"line_number":19,"context_line":"from neutron.common import constants as q_const"},{"line_number":20,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":21,"context_line":"from neutron.plugins.openvswitch.common import constants"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_385f8c42","line":19,"updated":"2014-07-21 21:01:03.000000000","message":"this is a new file, there\u0027s no reason to use q_const anymore. Please update to n_const","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron.api.rpc.handlers import dvr_rpc"},{"line_number":19,"context_line":"from neutron.common import constants as q_const"},{"line_number":20,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":21,"context_line":"from neutron.plugins.openvswitch.common import constants"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_fb7892c2","line":19,"in_reply_to":"baada198_385f8c42","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class OVSDVRNeutronAgent(dvr_rpc.DVRAgentRpcApiMixin):"},{"line_number":108,"context_line":"    \u0027\u0027\u0027Implements OVS-based DVR(Distributed Virtual Router), for"},{"line_number":109,"context_line":"    overlay networks."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_5878c02a","line":108,"updated":"2014-07-21 21:01:03.000000000","message":"this could made a single line docstring","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class OVSDVRNeutronAgent(dvr_rpc.DVRAgentRpcApiMixin):"},{"line_number":108,"context_line":"    \u0027\u0027\u0027Implements OVS-based DVR(Distributed Virtual Router), for"},{"line_number":109,"context_line":"    overlay networks."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_5b417e61","line":108,"in_reply_to":"baada198_5878c02a","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def reset_ovs_parameters(self, integ_br, tun_br,"},{"line_number":132,"context_line":"                             patch_int_ofport, patch_tun_ofport):"},{"line_number":133,"context_line":"        \u0027\u0027\u0027Reset the openvswitch parameters"},{"line_number":134,"context_line":"        \u0027\u0027\u0027"},{"line_number":135,"context_line":"        if not self.enable_tunneling:"},{"line_number":136,"context_line":"            return"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_b889dc27","line":134,"updated":"2014-07-21 21:01:03.000000000","message":"no need to break to next line","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def reset_ovs_parameters(self, integ_br, tun_br,"},{"line_number":132,"context_line":"                             patch_int_ofport, patch_tun_ofport):"},{"line_number":133,"context_line":"        \u0027\u0027\u0027Reset the openvswitch parameters"},{"line_number":134,"context_line":"        \u0027\u0027\u0027"},{"line_number":135,"context_line":"        if not self.enable_tunneling:"},{"line_number":136,"context_line":"            return"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_9b5eb643","line":134,"in_reply_to":"baada198_b889dc27","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":132,"context_line":"                             patch_int_ofport, patch_tun_ofport):"},{"line_number":133,"context_line":"        \u0027\u0027\u0027Reset the openvswitch parameters"},{"line_number":134,"context_line":"        \u0027\u0027\u0027"},{"line_number":135,"context_line":"        if not self.enable_tunneling:"},{"line_number":136,"context_line":"            return"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        if not self.enable_distributed_routing:"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_d8cbf01b","line":135,"updated":"2014-07-21 21:01:03.000000000","message":"these two ifs can be combined in:\n\n  if not self.enable_tunneling or not self.enable_distributed_routing:\n      return\n\nor even better:\n\n  if not (self.enabled_tunneling and self.enable_distributed_routing):\n     return","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                             patch_int_ofport, patch_tun_ofport):"},{"line_number":133,"context_line":"        \u0027\u0027\u0027Reset the openvswitch parameters"},{"line_number":134,"context_line":"        \u0027\u0027\u0027"},{"line_number":135,"context_line":"        if not self.enable_tunneling:"},{"line_number":136,"context_line":"            return"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        if not self.enable_distributed_routing:"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_db54ae23","line":135,"in_reply_to":"baada198_d8cbf01b","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":144,"context_line":"        self.patch_tun_ofport \u003d patch_tun_ofport"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def setup_dvr_flows_on_integ_tun_br(self):"},{"line_number":147,"context_line":"        \u0027\u0027\u0027Setup up initial dvr flows into integration bridge and tunnel"},{"line_number":148,"context_line":"        bridge."},{"line_number":149,"context_line":"        \u0027\u0027\u0027"},{"line_number":150,"context_line":"        if not self.enable_tunneling:"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_189ac861","line":147,"updated":"2014-07-21 21:01:03.000000000","message":"if you did br-int and br-tun this becomes a single line docstring","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        self.patch_tun_ofport \u003d patch_tun_ofport"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def setup_dvr_flows_on_integ_tun_br(self):"},{"line_number":147,"context_line":"        \u0027\u0027\u0027Setup up initial dvr flows into integration bridge and tunnel"},{"line_number":148,"context_line":"        bridge."},{"line_number":149,"context_line":"        \u0027\u0027\u0027"},{"line_number":150,"context_line":"        if not self.enable_tunneling:"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_3b35aaf6","line":147,"in_reply_to":"baada198_189ac861","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":147,"context_line":"        \u0027\u0027\u0027Setup up initial dvr flows into integration bridge and tunnel"},{"line_number":148,"context_line":"        bridge."},{"line_number":149,"context_line":"        \u0027\u0027\u0027"},{"line_number":150,"context_line":"        if not self.enable_tunneling:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        if not self.enable_distributed_routing:"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_98ddf8df","line":150,"updated":"2014-07-21 21:01:03.000000000","message":"see comment on line 135","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        \u0027\u0027\u0027Setup up initial dvr flows into integration bridge and tunnel"},{"line_number":148,"context_line":"        bridge."},{"line_number":149,"context_line":"        \u0027\u0027\u0027"},{"line_number":150,"context_line":"        if not self.enable_tunneling:"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        if not self.enable_distributed_routing:"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_7b3ba2e9","line":150,"in_reply_to":"baada198_98ddf8df","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":167,"context_line":"                      \"get_dvr_mac_address_by_host() from \""},{"line_number":168,"context_line":"                      \"plugin: %r\", details)"},{"line_number":169,"context_line":"            self.dvr_mac_address \u003d details[\u0027mac_address\u0027]"},{"line_number":170,"context_line":"        except Exception:"},{"line_number":171,"context_line":"            LOG.exception(_(\"DVR: Failed to obtain local DVR Mac address\"))"},{"line_number":172,"context_line":"            self.enable_distributed_routing \u003d False"},{"line_number":173,"context_line":"            # switch all traffic using L2 learning"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_b82c7c03","line":170,"updated":"2014-07-21 21:01:03.000000000","message":"can this be a narrower except (e.g. just RPC errors?) Here you\u0027re catching programming errors like keyerror and the likes. That\u0027s bad","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                      \"get_dvr_mac_address_by_host() from \""},{"line_number":168,"context_line":"                      \"plugin: %r\", details)"},{"line_number":169,"context_line":"            self.dvr_mac_address \u003d details[\u0027mac_address\u0027]"},{"line_number":170,"context_line":"        except Exception:"},{"line_number":171,"context_line":"            LOG.exception(_(\"DVR: Failed to obtain local DVR Mac address\"))"},{"line_number":172,"context_line":"            self.enable_distributed_routing \u003d False"},{"line_number":173,"context_line":"            # switch all traffic using L2 learning"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_1e27f4b6","line":170,"in_reply_to":"baada198_b82c7c03","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":168,"context_line":"                      \"plugin: %r\", details)"},{"line_number":169,"context_line":"            self.dvr_mac_address \u003d details[\u0027mac_address\u0027]"},{"line_number":170,"context_line":"        except Exception:"},{"line_number":171,"context_line":"            LOG.exception(_(\"DVR: Failed to obtain local DVR Mac address\"))"},{"line_number":172,"context_line":"            self.enable_distributed_routing \u003d False"},{"line_number":173,"context_line":"            # switch all traffic using L2 learning"},{"line_number":174,"context_line":"            self.int_br.add_flow(table\u003dconstants.LOCAL_SWITCHING,"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_18364851","line":171,"updated":"2014-07-21 21:01:03.000000000","message":"can this be log.error?","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                      \"plugin: %r\", details)"},{"line_number":169,"context_line":"            self.dvr_mac_address \u003d details[\u0027mac_address\u0027]"},{"line_number":170,"context_line":"        except Exception:"},{"line_number":171,"context_line":"            LOG.exception(_(\"DVR: Failed to obtain local DVR Mac address\"))"},{"line_number":172,"context_line":"            self.enable_distributed_routing \u003d False"},{"line_number":173,"context_line":"            # switch all traffic using L2 learning"},{"line_number":174,"context_line":"            self.int_br.add_flow(table\u003dconstants.LOCAL_SWITCHING,"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_5e1dec60","line":171,"in_reply_to":"baada198_18364851","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":231,"context_line":"                             constants.PATCH_LV_TO_TUN)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def dvr_mac_address_update(self, dvr_macs):"},{"line_number":234,"context_line":"        if not self.enable_tunneling:"},{"line_number":235,"context_line":"            return"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        if not self.enable_distributed_routing:"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_f8b35497","line":234,"updated":"2014-07-21 21:01:03.000000000","message":"see comment line 147","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                             constants.PATCH_LV_TO_TUN)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def dvr_mac_address_update(self, dvr_macs):"},{"line_number":234,"context_line":"        if not self.enable_tunneling:"},{"line_number":235,"context_line":"            return"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        if not self.enable_distributed_routing:"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_fe2b2079","line":234,"in_reply_to":"baada198_f8b35497","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        if not self.dvr_mac_address:"},{"line_number":243,"context_line":"            LOG.debug(\"Self mac unknown, ignoring this\""},{"line_number":244,"context_line":"                      \" dvr_mac_address_update() \")"},{"line_number":245,"context_line":"            return"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        dvr_host_macs \u003d set()"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_78a74450","line":244,"updated":"2014-07-21 21:01:03.000000000","message":"nit: please remove space on 2nd line to add it to 1st line","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        if not self.dvr_mac_address:"},{"line_number":243,"context_line":"            LOG.debug(\"Self mac unknown, ignoring this\""},{"line_number":244,"context_line":"                      \" dvr_mac_address_update() \")"},{"line_number":245,"context_line":"            return"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        dvr_host_macs \u003d set()"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_3e51180e","line":244,"in_reply_to":"baada198_78a74450","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":284,"context_line":"        return device_owner \u003d\u003d q_const.DEVICE_OWNER_DVR_INTERFACE"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def process_tunneled_network(self, network_type, lvid, segmentation_id):"},{"line_number":287,"context_line":"        if not self.enable_tunneling:"},{"line_number":288,"context_line":"            return"},{"line_number":289,"context_line":"        if not self.enable_distributed_routing:"},{"line_number":290,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_d835b0f7","line":287,"updated":"2014-07-21 21:01:03.000000000","message":"ditto","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        return device_owner \u003d\u003d q_const.DEVICE_OWNER_DVR_INTERFACE"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def process_tunneled_network(self, network_type, lvid, segmentation_id):"},{"line_number":287,"context_line":"        if not self.enable_tunneling:"},{"line_number":288,"context_line":"            return"},{"line_number":289,"context_line":"        if not self.enable_distributed_routing:"},{"line_number":290,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_fe424039","line":287,"in_reply_to":"baada198_d835b0f7","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":331,"context_line":"            self.plugin_rpc.get_compute_ports_on_host_by_subnet("},{"line_number":332,"context_line":"                self.context, self.host, subnet_uuid))"},{"line_number":333,"context_line":"        LOG.debug(\"DVR: List of ports received from \""},{"line_number":334,"context_line":"                  \"get_compute_ports_on_host_by_subnet %r\","},{"line_number":335,"context_line":"                  local_compute_ports)"},{"line_number":336,"context_line":"        for prt in local_compute_ports:"},{"line_number":337,"context_line":"            vif \u003d self.int_br.get_vif_port_by_id(prt[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_9827b8c6","line":334,"updated":"2014-07-21 21:01:03.000000000","message":"%s?","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":331,"context_line":"            self.plugin_rpc.get_compute_ports_on_host_by_subnet("},{"line_number":332,"context_line":"                self.context, self.host, subnet_uuid))"},{"line_number":333,"context_line":"        LOG.debug(\"DVR: List of ports received from \""},{"line_number":334,"context_line":"                  \"get_compute_ports_on_host_by_subnet %r\","},{"line_number":335,"context_line":"                  local_compute_ports)"},{"line_number":336,"context_line":"        for prt in local_compute_ports:"},{"line_number":337,"context_line":"            vif \u003d self.int_br.get_vif_port_by_id(prt[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_1e753497","line":334,"in_reply_to":"baada198_9827b8c6","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":524,"context_line":"    def bind_port_to_dvr(self, port, network_type, fixed_ips,"},{"line_number":525,"context_line":"                         device_owner, local_vlan_id):"},{"line_number":526,"context_line":"        # a port coming up as distributed router interface"},{"line_number":527,"context_line":"        if not self.enable_tunneling:"},{"line_number":528,"context_line":"            return"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"        if not self.enable_distributed_routing:"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_1813a865","line":527,"updated":"2014-07-21 21:01:03.000000000","message":"ditto","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":524,"context_line":"    def bind_port_to_dvr(self, port, network_type, fixed_ips,"},{"line_number":525,"context_line":"                         device_owner, local_vlan_id):"},{"line_number":526,"context_line":"        # a port coming up as distributed router interface"},{"line_number":527,"context_line":"        if not self.enable_tunneling:"},{"line_number":528,"context_line":"            return"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"        if not self.enable_distributed_routing:"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_be6368db","line":527,"in_reply_to":"baada198_1813a865","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":533,"context_line":"        if network_type not in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":534,"context_line":"            return"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        if device_owner \u003d\u003d q_const.DEVICE_OWNER_DVR_INTERFACE:"},{"line_number":537,"context_line":"            self._bind_distributed_router_interface_port(port, fixed_ips,"},{"line_number":538,"context_line":"                                                         device_owner,"},{"line_number":539,"context_line":"                                                         local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_5808c02c","line":536,"updated":"2014-07-21 21:01:03.000000000","message":"n_const?","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":533,"context_line":"        if network_type not in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":534,"context_line":"            return"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        if device_owner \u003d\u003d q_const.DEVICE_OWNER_DVR_INTERFACE:"},{"line_number":537,"context_line":"            self._bind_distributed_router_interface_port(port, fixed_ips,"},{"line_number":538,"context_line":"                                                         device_owner,"},{"line_number":539,"context_line":"                                                         local_vlan_id)"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_fe596029","line":536,"in_reply_to":"baada198_5808c02c","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"}],"neutron/plugins/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":30,"context_line":"from neutron.agent.linux import utils"},{"line_number":31,"context_line":"from neutron.agent import rpc as agent_rpc"},{"line_number":32,"context_line":"from neutron.agent import securitygroups_rpc as sg_rpc"},{"line_number":33,"context_line":"from neutron.agent import dvr_rpc as dvr_rpc"},{"line_number":34,"context_line":"from neutron.common import config as logging_config"},{"line_number":35,"context_line":"from neutron.common import constants as q_const"},{"line_number":36,"context_line":"from neutron.common import topics"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2Fkqg%3D","line":33,"updated":"2014-04-19 08:08:33.000000000","message":"\"as\" is not necessary.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from neutron.agent.linux import utils"},{"line_number":31,"context_line":"from neutron.agent import rpc as agent_rpc"},{"line_number":32,"context_line":"from neutron.agent import securitygroups_rpc as sg_rpc"},{"line_number":33,"context_line":"from neutron.agent import dvr_rpc as dvr_rpc"},{"line_number":34,"context_line":"from neutron.common import config as logging_config"},{"line_number":35,"context_line":"from neutron.common import constants as q_const"},{"line_number":36,"context_line":"from neutron.common import topics"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_2160ee31","line":33,"in_reply_to":"AAAAXH%2F%2Fkqg%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":107,"context_line":"        return (\"OVSPort: id \u003d %s, device_owner \u003d %s, subnets \u003d %s\" %"},{"line_number":108,"context_line":"                (self.id, self.device_owner, self.subnets))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def add_subnet(self, subnet_id):"},{"line_number":111,"context_line":"        self.subnets.add(subnet_id)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def remove_subnet(self, subnet_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F770%3D","line":110,"updated":"2014-04-16 12:27:47.000000000","message":"not sure that the method between line 110 and 122 are really needed, seems to be more proxy methods.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        return (\"OVSPort: id \u003d %s, device_owner \u003d %s, subnets \u003d %s\" %"},{"line_number":108,"context_line":"                (self.id, self.device_owner, self.subnets))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def add_subnet(self, subnet_id):"},{"line_number":111,"context_line":"        self.subnets.add(subnet_id)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def remove_subnet(self, subnet_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_61ff5635","line":110,"in_reply_to":"AAAAXH%2F%2F770%3D","updated":"2014-05-01 00:01:29.000000000","message":"These methods are importnat as using this subnets set() only we track what ports on the integration bridge are on DVR routed subnets and add rules accordingly.  Unfortunately existing vifPort object maintained in ovs_lib module doesn\u0027t have layer 3 information (Ie., subnet info) in it, for us to have re-used that directly.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":271,"context_line":"        self._check_ovs_version()"},{"line_number":272,"context_line":"        if self.enable_tunneling:"},{"line_number":273,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":274,"context_line":"            if self.enable_distributed_routing:"},{"line_number":275,"context_line":"                self.setup_dvr_flows_on_integ_tun_br()"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        # Collect additional bridges to monitor"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F77Q%3D","line":274,"updated":"2014-04-16 12:27:47.000000000","message":"you should raise an exception if enable_distributed_routing is true and not the tunneling","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":271,"context_line":"        self._check_ovs_version()"},{"line_number":272,"context_line":"        if self.enable_tunneling:"},{"line_number":273,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":274,"context_line":"            if self.enable_distributed_routing:"},{"line_number":275,"context_line":"                self.setup_dvr_flows_on_integ_tun_br()"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        # Collect additional bridges to monitor"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FkqI%3D","line":274,"in_reply_to":"AAAAXH%2F%2F77Q%3D","updated":"2014-04-19 08:08:33.000000000","message":"+1","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        self._check_ovs_version()"},{"line_number":272,"context_line":"        if self.enable_tunneling:"},{"line_number":273,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":274,"context_line":"            if self.enable_distributed_routing:"},{"line_number":275,"context_line":"                self.setup_dvr_flows_on_integ_tun_br()"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        # Collect additional bridges to monitor"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_e1c1a6e5","line":274,"in_reply_to":"AAAAXH%2F%2F77Q%3D","updated":"2014-05-01 00:01:29.000000000","message":"I will address this in next patch set (set 3).","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":340,"context_line":"                return network_id"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def dvr_mac_address_update(self, context, **kwargs):"},{"line_number":343,"context_line":"        if not self.enable_distributed_routing:"},{"line_number":344,"context_line":"            return"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        dvr_host_macs \u003d kwargs.get(\u0027dvr_macs\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F76U%3D","line":343,"updated":"2014-04-16 12:27:47.000000000","message":"should not append since the field of the configuration report say that this agent doesn\u0027t enable the dvr.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                return network_id"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def dvr_mac_address_update(self, context, **kwargs):"},{"line_number":343,"context_line":"        if not self.enable_distributed_routing:"},{"line_number":344,"context_line":"            return"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        dvr_host_macs \u003d kwargs.get(\u0027dvr_macs\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_21bc6e69","line":343,"in_reply_to":"AAAAXH%2F%2F76U%3D","updated":"2014-05-01 00:01:29.000000000","message":"Sylvain,\r\n\r\nPlease help me understand this.  i have returned without handling that RPC because distributed_routing is not enabled in the agent.  Do we need to fix something here?","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":355,"context_line":"        dvr_macs \u003d set()"},{"line_number":356,"context_line":"        for entry in dvr_host_macs:"},{"line_number":357,"context_line":"            if entry[\u0027mac_address\u0027] \u003d\u003d self.dvr_mac_address:"},{"line_number":358,"context_line":"                continue"},{"line_number":359,"context_line":"            dvr_macs.add(entry[\u0027mac_address\u0027])"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        if dvr_macs \u003d\u003d self.registered_dvr_macs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F75k%3D","line":358,"updated":"2014-04-16 12:27:47.000000000","message":"why not :\n\n    if entry[\u0027mac_address\u0027] !\u003d self.dvr_mac_address:\n        dvr_macs.add(entry[\u0027mac_address\u0027])","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        dvr_macs \u003d set()"},{"line_number":356,"context_line":"        for entry in dvr_host_macs:"},{"line_number":357,"context_line":"            if entry[\u0027mac_address\u0027] \u003d\u003d self.dvr_mac_address:"},{"line_number":358,"context_line":"                continue"},{"line_number":359,"context_line":"            dvr_macs.add(entry[\u0027mac_address\u0027])"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        if dvr_macs \u003d\u003d self.registered_dvr_macs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_81fc5a40","line":358,"in_reply_to":"AAAAXH%2F%2F75k%3D","updated":"2014-05-01 00:01:29.000000000","message":"Will address this in the next patch set (ie., set 3)","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":707,"context_line":"            return"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        lvm \u003d self.local_vlan_map[net_uuid]"},{"line_number":710,"context_line":"        if device_owner \u003d\u003d q_const.DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED:"},{"line_number":711,"context_line":"            # since router port must have only one fixed IP, directly use fixed_ips[0]"},{"line_number":712,"context_line":"            subnet_uuid \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":713,"context_line":"            if subnet_uuid in self.local_dvr_map:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F8Cc%3D","line":710,"updated":"2014-04-16 12:27:47.000000000","message":"Better if the code for each device owner could be move to a specific method so that this method will be more readable.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":707,"context_line":"            return"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        lvm \u003d self.local_vlan_map[net_uuid]"},{"line_number":710,"context_line":"        if device_owner \u003d\u003d q_const.DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED:"},{"line_number":711,"context_line":"            # since router port must have only one fixed IP, directly use fixed_ips[0]"},{"line_number":712,"context_line":"            subnet_uuid \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":713,"context_line":"            if subnet_uuid in self.local_dvr_map:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_41db32ed","line":710,"in_reply_to":"AAAAXH%2F%2F8Cc%3D","updated":"2014-05-01 00:01:29.000000000","message":"I have refactored and put in new private methods to handle every device_owner separately that DVR is interested in the next patch set (ie., set 2).","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4f8d103a552ad4f28bab253b076243845facd3fa","unresolved":false,"context_lines":[{"line_number":711,"context_line":"            # since router port must have only one fixed IP, directly use fixed_ips[0]"},{"line_number":712,"context_line":"            subnet_uuid \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":713,"context_line":"            if subnet_uuid in self.local_dvr_map:"},{"line_number":714,"context_line":"                LOG.error(_(\"DVR in ovs agent: Duplicate DVR router interface detected for subnet %s \"), subnet_uuid)"},{"line_number":715,"context_line":"                return"},{"line_number":716,"context_line":"            subnet_info \u003d self.plugin_rpc.get_subnet(self.context, subnet_uuid)"},{"line_number":717,"context_line":"            subnet_info[\u0027gateway_mac\u0027] \u003d port.vif_mac"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F%2Fec%3D","line":714,"updated":"2014-04-16 01:50:15.000000000","message":"Line looks too long.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":711,"context_line":"            # since router port must have only one fixed IP, directly use fixed_ips[0]"},{"line_number":712,"context_line":"            subnet_uuid \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":713,"context_line":"            if subnet_uuid in self.local_dvr_map:"},{"line_number":714,"context_line":"                LOG.error(_(\"DVR in ovs agent: Duplicate DVR router interface detected for subnet %s \"), subnet_uuid)"},{"line_number":715,"context_line":"                return"},{"line_number":716,"context_line":"            subnet_info \u003d self.plugin_rpc.get_subnet(self.context, subnet_uuid)"},{"line_number":717,"context_line":"            subnet_info[\u0027gateway_mac\u0027] \u003d port.vif_mac"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_e1cc4638","line":714,"in_reply_to":"AAAAXH%2F%2F%2Fec%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4f8d103a552ad4f28bab253b076243845facd3fa","unresolved":false,"context_lines":[{"line_number":720,"context_line":"            local_compute_ports \u003d self.plugin_rpc.get_compute_ports_on_host_by_subnet(self.context,"},{"line_number":721,"context_line":"                                                                      cfg.CONF.host,"},{"line_number":722,"context_line":"                                                                      subnet_uuid)"},{"line_number":723,"context_line":"            LOG.debug(_(\"DVR in ovs agent: List of ports received from get_compute_ports_on_host_by_subnet %r\"), local_compute_ports)"},{"line_number":724,"context_line":"            for prt in local_compute_ports:"},{"line_number":725,"context_line":"                vif \u003d self.int_br.get_vif_port_by_id(prt[\u0027id\u0027])"},{"line_number":726,"context_line":"                if not vif:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F%2FeY%3D","line":723,"updated":"2014-04-16 01:50:15.000000000","message":"This one too.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":720,"context_line":"            local_compute_ports \u003d self.plugin_rpc.get_compute_ports_on_host_by_subnet(self.context,"},{"line_number":721,"context_line":"                                                                      cfg.CONF.host,"},{"line_number":722,"context_line":"                                                                      subnet_uuid)"},{"line_number":723,"context_line":"            LOG.debug(_(\"DVR in ovs agent: List of ports received from get_compute_ports_on_host_by_subnet %r\"), local_compute_ports)"},{"line_number":724,"context_line":"            for prt in local_compute_ports:"},{"line_number":725,"context_line":"                vif \u003d self.int_br.get_vif_port_by_id(prt[\u0027id\u0027])"},{"line_number":726,"context_line":"                if not vif:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_c1c74211","line":723,"in_reply_to":"AAAAXH%2F%2F%2FeY%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":6820,"name":"Francois Eleouet","email":"f.eleouet@gmail.com","username":"fanchon"},"unresolved":false,"context_lines":[{"line_number":805,"context_line":"                ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":806,"context_line":"                self.int_br.add_flow(table\u003dconstants.DVR_TO_SRC_MAC,"},{"line_number":807,"context_line":"                                         priority\u003d2,"},{"line_number":808,"context_line":"                                         dl_vlan\u003dlvm.vlan,"},{"line_number":809,"context_line":"                                         nw_dst\u003dip_subnet,"},{"line_number":810,"context_line":"                                         actions\u003d\"strip_vlan,mod_dl_src:%s, output:%s\" %"},{"line_number":811,"context_line":"                                         (subnet_info[\u0027gateway_mac\u0027], ofports))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FMUw%3D","line":808,"updated":"2014-04-23 12:52:40.000000000","message":"AFAIK, you won\u0027t be able to match dl_vlan in br-int as long as vlan is set using port tag in ovs-vsctl, see OVS FAQ [1]. I just tested it on ovs 2.1 and it still doesn\u0027t work. As a consequence, match will only occur on nw_dst, resulting in potential tenant isolation issue if they share the same address plans.\n\n[1]https://raw.githubusercontent.com/openvswitch/ovs/master/FAQ\n\nQ: My OpenFlow controller doesn\u0027t see the VLANs that I expect.\n\nA: The configuration for VLANs in the Open vSwitch database (e.g. via ovs-vsctl) only affects traffic that goes through Open Switch\u0027s implementation of the OpenFlow \"normal switching\" action.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":805,"context_line":"                ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":806,"context_line":"                self.int_br.add_flow(table\u003dconstants.DVR_TO_SRC_MAC,"},{"line_number":807,"context_line":"                                         priority\u003d2,"},{"line_number":808,"context_line":"                                         dl_vlan\u003dlvm.vlan,"},{"line_number":809,"context_line":"                                         nw_dst\u003dip_subnet,"},{"line_number":810,"context_line":"                                         actions\u003d\"strip_vlan,mod_dl_src:%s, output:%s\" %"},{"line_number":811,"context_line":"                                         (subnet_info[\u0027gateway_mac\u0027], ofports))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FLaM%3D","line":808,"in_reply_to":"AAAAXH%2F%2FMUw%3D","updated":"2014-04-28 21:23:55.000000000","message":"The frames come to second table DVR_TO_SRC_MAC only if such frames are from the tunnel bridge.  This is enforced by the first rule invthe first table of br-int i.e., LOCAL_SWITCHING . And all the ingress frames from the tunnel bridge carry local vlan in them to be used by the br-int.  \r\n\r\nHowever, for egress packets from the VM to the cloud, this DVR_TO_SRC_MAC table would never get hit.  The egress packets would hit the NORMAL rule available in LOCAL_SWITCHING of br-int.\r\n\r\nWe have L2 Blueprint document available in the neutron-ovs-dvr blueprint page which details on the rules and how they inter-operate.  Please feel fee to take a look and let us know if you have questions.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"unresolved":false,"context_lines":[{"line_number":838,"context_line":"            if port.ofport !\u003d -1:"},{"line_number":839,"context_line":"                self.int_br.delete_flows(in_port\u003dport.ofport)"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"    def unbind_port_from_dvr(self, vif_id, net_uuid\u003dNone):"},{"line_number":842,"context_line":"        if not self.enable_distributed_routing and not self.enable_tunneling:"},{"line_number":843,"context_line":"            return"},{"line_number":844,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F8CU%3D","line":841,"updated":"2014-04-16 12:27:47.000000000","message":"same as above","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":838,"context_line":"            if port.ofport !\u003d -1:"},{"line_number":839,"context_line":"                self.int_br.delete_flows(in_port\u003dport.ofport)"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"    def unbind_port_from_dvr(self, vif_id, net_uuid\u003dNone):"},{"line_number":842,"context_line":"        if not self.enable_distributed_routing and not self.enable_tunneling:"},{"line_number":843,"context_line":"            return"},{"line_number":844,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_81937af9","line":841,"in_reply_to":"AAAAXH%2F%2F8CU%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4f8d103a552ad4f28bab253b076243845facd3fa","unresolved":false,"context_lines":[{"line_number":872,"context_line":"            # ensure we process for all the subnets laid on this removed port"},{"line_number":873,"context_line":"            for sub_uuid in subnet_set:"},{"line_number":874,"context_line":"                if sub_uuid not in self.local_dvr_map:"},{"line_number":875,"context_line":"                    LOG.error(_(\"DVR in ovs agent: router interface port %s having a non-DVR subnet %s !!\") % (port, sub_uuid))"},{"line_number":876,"context_line":"                    continue"},{"line_number":877,"context_line":""},{"line_number":878,"context_line":"                ldm \u003d self.local_dvr_map[sub_uuid]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F%2FeM%3D","line":875,"updated":"2014-04-16 01:50:15.000000000","message":"Line looks too long.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":872,"context_line":"            # ensure we process for all the subnets laid on this removed port"},{"line_number":873,"context_line":"            for sub_uuid in subnet_set:"},{"line_number":874,"context_line":"                if sub_uuid not in self.local_dvr_map:"},{"line_number":875,"context_line":"                    LOG.error(_(\"DVR in ovs agent: router interface port %s having a non-DVR subnet %s !!\") % (port, sub_uuid))"},{"line_number":876,"context_line":"                    continue"},{"line_number":877,"context_line":""},{"line_number":878,"context_line":"                ldm \u003d self.local_dvr_map[sub_uuid]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_a14b1eaf","line":875,"in_reply_to":"AAAAXH%2F%2F%2FeM%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4f8d103a552ad4f28bab253b076243845facd3fa","unresolved":false,"context_lines":[{"line_number":909,"context_line":"            # ensure we process for all the subnets laid on this port"},{"line_number":910,"context_line":"            for sub_uuid in subnet_ids:"},{"line_number":911,"context_line":"                if sub_uuid not in self.local_dvr_map:"},{"line_number":912,"context_line":"                    Log.error(_(\"DVR in ovs agent: compute port %s having a non-DVR subnet %s !!\") % (port, sub_uuid))"},{"line_number":913,"context_line":"                    continue"},{"line_number":914,"context_line":""},{"line_number":915,"context_line":"                ldm \u003d self.local_dvr_map[sub_uuid]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F%2FeI%3D","line":912,"updated":"2014-04-16 01:50:15.000000000","message":"Line too long.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":909,"context_line":"            # ensure we process for all the subnets laid on this port"},{"line_number":910,"context_line":"            for sub_uuid in subnet_ids:"},{"line_number":911,"context_line":"                if sub_uuid not in self.local_dvr_map:"},{"line_number":912,"context_line":"                    Log.error(_(\"DVR in ovs agent: compute port %s having a non-DVR subnet %s !!\") % (port, sub_uuid))"},{"line_number":913,"context_line":"                    continue"},{"line_number":914,"context_line":""},{"line_number":915,"context_line":"                ldm \u003d self.local_dvr_map[sub_uuid]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_814e1ac0","line":912,"in_reply_to":"AAAAXH%2F%2F%2FeI%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":366,"context_line":"        LOG.debug(_(\"DVR Mac address update with host-mac: %s\"),"},{"line_number":367,"context_line":"                  dvr_host_macs)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        if not self.dvr_mac_address:"},{"line_number":370,"context_line":"            LOG.debug(_(\"Self mac unknown, ignoring this\""},{"line_number":371,"context_line":"                        \" dvr_mac_address_update() \"))"},{"line_number":372,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_0cc4d55d","line":369,"updated":"2014-05-28 23:34:07.000000000","message":"Should this be moved above line 365 such that you return before calling kwargs.get() it it\u0027s not set?","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        dvr_macs \u003d set()"},{"line_number":375,"context_line":"        for entry in dvr_host_macs:"},{"line_number":376,"context_line":"            if entry[\u0027mac_address\u0027] \u003d\u003d self.dvr_mac_address:"},{"line_number":377,"context_line":"                continue"},{"line_number":378,"context_line":"            dvr_macs.add(entry[\u0027mac_address\u0027])"},{"line_number":379,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_6cb559ed","line":376,"updated":"2014-05-28 23:34:07.000000000","message":"Nit: if you flip this check to !\u003d you can move the .add() under here and remove the continue","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":458,"context_line":"            agent_ports \u003d values.get(\u0027ports\u0027)"},{"line_number":459,"context_line":"            agent_ports.pop(self.local_ip, None)"},{"line_number":460,"context_line":"            if len(agent_ports):"},{"line_number":461,"context_line":"                # self.tun_br.defer_apply_on()"},{"line_number":462,"context_line":"                for agent_ip, ports in agent_ports.items():"},{"line_number":463,"context_line":"                    # Ensure we have a tunnel port with this remote agent"},{"line_number":464,"context_line":"                    ofport \u003d self.tun_br_ofports["}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_1a06c3ce","line":461,"updated":"2014-05-28 23:34:07.000000000","message":"Why are these (and others) now commented-out?","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":721,"context_line":"        # use fixed_ips[0]"},{"line_number":722,"context_line":"        subnet_uuid \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":723,"context_line":"        csnat_ofport \u003d constants.OFPORT_INVALID"},{"line_number":724,"context_line":"        ldm \u003d None"},{"line_number":725,"context_line":"        if subnet_uuid in self.local_dvr_map:"},{"line_number":726,"context_line":"            ldm \u003d self.local_dvr_map[subnet_uuid]"},{"line_number":727,"context_line":"            csnat_ofport \u003d ldm.get_csnat_ofport()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_ba686f22","line":724,"updated":"2014-05-28 23:34:07.000000000","message":"This might be able to go away based on my comment below.","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":723,"context_line":"        csnat_ofport \u003d constants.OFPORT_INVALID"},{"line_number":724,"context_line":"        ldm \u003d None"},{"line_number":725,"context_line":"        if subnet_uuid in self.local_dvr_map:"},{"line_number":726,"context_line":"            ldm \u003d self.local_dvr_map[subnet_uuid]"},{"line_number":727,"context_line":"            csnat_ofport \u003d ldm.get_csnat_ofport()"},{"line_number":728,"context_line":"            if csnat_ofport \u003d\u003d constants.OFPORT_INVALID:"},{"line_number":729,"context_line":"                LOG.error(_(\"DVR: Duplicate DVR router interface detected \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_1a7a43f1","line":726,"updated":"2014-05-28 23:34:07.000000000","message":"Will this ever return None/{} ?  If not then the code block on line 732 can be an \"else\" that deals with initializing it.","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":743,"context_line":"        # DVR takes over"},{"line_number":744,"context_line":"        ldm.set_dvr_owned(True)"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"        subnet_info \u003d ldm.get_subnet_info()"},{"line_number":747,"context_line":"        ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":748,"context_line":"        local_compute_ports \u003d self.plugin_rpc.\\"},{"line_number":749,"context_line":"            get_compute_ports_on_host_by_subnet(self.context,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_7ad507b8","line":746,"updated":"2014-05-28 23:34:07.000000000","message":"We had just loaded \u0027subnet_info\u0027 above in the \"not ldm\" case, should this be moved to line 731 ?","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":752,"context_line":"        LOG.debug(_(\"DVR: List of ports received from \""},{"line_number":753,"context_line":"                    \"get_compute_ports_on_host_by_subnet %r\"),"},{"line_number":754,"context_line":"                  local_compute_ports)"},{"line_number":755,"context_line":"        for prt in local_compute_ports:"},{"line_number":756,"context_line":"            vif \u003d self.int_br.get_vif_port_by_id(prt[\u0027id\u0027])"},{"line_number":757,"context_line":"            if not vif:"},{"line_number":758,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_dae53ba9","line":755,"updated":"2014-05-28 23:34:07.000000000","message":"s/prt/port to make it easier to read","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":816,"context_line":"    def _bind_compute_port_on_dvr_subnet(self, port, fixed_ips,"},{"line_number":817,"context_line":"                                         device_owner, local_vlan):"},{"line_number":818,"context_line":"        # Handle new compute port added use-case"},{"line_number":819,"context_line":"        subnet_uuid \u003d None"},{"line_number":820,"context_line":"        for ips in fixed_ips:"},{"line_number":821,"context_line":"            if ips[\u0027subnet_id\u0027] not in self.local_dvr_map:"},{"line_number":822,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_ba722fe1","line":819,"updated":"2014-05-28 23:34:07.000000000","message":"You don\u0027t need this initialization as subnet_uuid is assigned on line 823","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":863,"context_line":"                                                  device_owner, local_vlan):"},{"line_number":864,"context_line":"        if port.vif_id in self.local_ports:"},{"line_number":865,"context_line":"            # throw an error if CSNAT port is already on a different"},{"line_number":866,"context_line":"            # dvr routed subnet"},{"line_number":867,"context_line":"            ovsport \u003d self.local_ports[port.vif_id]"},{"line_number":868,"context_line":"            subs \u003d list(ovsport.get_subnets())"},{"line_number":869,"context_line":"            LOG.error(_(\"Centralized-SNAT port %s already seen on \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_b535e0dc","line":866,"updated":"2014-05-28 23:34:07.000000000","message":"This comment isn\u0027t quite correct as you\u0027re not throwing an error here, just printing one and returning.  I\u0027m actually concerned that this is a real error and it\u0027s just getting logged where it might not be noticed.","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":873,"context_line":"        # IP, directly use fixed_ips[0]"},{"line_number":874,"context_line":"        subnet_uuid \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":875,"context_line":"        ldm \u003d None"},{"line_number":876,"context_line":"        subnet_info \u003d None"},{"line_number":877,"context_line":"        if subnet_uuid not in self.local_dvr_map:"},{"line_number":878,"context_line":"            # no csnat ports seen on this subnet - create csnat state"},{"line_number":879,"context_line":"            # for this subnet"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_55581c32","line":876,"updated":"2014-05-28 23:34:07.000000000","message":"You don\u0027t need to initialize either of these as both the if/else do it.","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":926,"context_line":"                                                         device_owner,"},{"line_number":927,"context_line":"                                                         lvm.vlan)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        if \u0027compute\u0027 in device_owner:"},{"line_number":930,"context_line":"            self._bind_compute_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":931,"context_line":"                                                  device_owner,"},{"line_number":932,"context_line":"                                                  lvm.vlan)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_75a998de","line":929,"updated":"2014-05-28 23:34:07.000000000","message":"Should be an elif as device_owner can only be a single value.","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":931,"context_line":"                                                  device_owner,"},{"line_number":932,"context_line":"                                                  lvm.vlan)"},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"        if device_owner \u003d\u003d q_const.DEVICE_OWNER_ROUTER_SNAT:"},{"line_number":935,"context_line":"            self._bind_centralized_snat_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":936,"context_line":"                                                           device_owner,"},{"line_number":937,"context_line":"                                                           lvm.vlan)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_95962493","line":934,"updated":"2014-05-28 23:34:07.000000000","message":"Should be an elif as device_owner can only be a single value.","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":986,"context_line":"            # DVR is no more owner"},{"line_number":987,"context_line":"            ldm.set_dvr_owned(False)"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"            if ldm.get_csnat_ofport() !\u003d -1:"},{"line_number":990,"context_line":"                # If there is a csnat port on this agent, preserve"},{"line_number":991,"context_line":"                # the local_dvr_map state"},{"line_number":992,"context_line":"                ofports \u003d str(ldm.get_csnat_ofport())"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_daad3b8a","line":989,"updated":"2014-05-28 23:34:07.000000000","message":"s/-1/constants.OFPORT_INVALID","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":1042,"context_line":"            ldm.remove_compute_ofport(port.ofport)"},{"line_number":1043,"context_line":"            ofports \u003d \u0027,\u0027.join(map(str, ldm.get_compute_ofports()))"},{"line_number":1044,"context_line":"            ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":1045,"context_line":"            if ldm.get_csnat_ofport() !\u003d -1:"},{"line_number":1046,"context_line":"                # If there is a csnat port on this agent, preserve"},{"line_number":1047,"context_line":"                # the local_dvr_map state"},{"line_number":1048,"context_line":"                ofports \u003d str(ldm.get_csnat_ofport()) + \u0027,\u0027 + ofports"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_faa83779","line":1045,"updated":"2014-05-28 23:34:07.000000000","message":"s/-1/constants.OFPORT_INVALID","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":1090,"context_line":"        ldm \u003d self.local_dvr_map[sub_uuid]"},{"line_number":1091,"context_line":"        subnet_info \u003d ldm.get_subnet_info()"},{"line_number":1092,"context_line":"        ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":1093,"context_line":"        ldm.set_csnat_ofport(-1)"},{"line_number":1094,"context_line":"        ofports \u003d \u0027,\u0027.join(map(str, ldm.get_compute_ofports()))"},{"line_number":1095,"context_line":"        if ofports:"},{"line_number":1096,"context_line":"            self.int_br.add_flow(table\u003dconstants.DVR_TO_SRC_MAC,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_fabf57a8","line":1093,"updated":"2014-05-28 23:34:07.000000000","message":"s/-1/constants.OFPORT_INVALID","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":1131,"context_line":"            LOG.debug(_(\"DVR: VIF Port not available for delete %s\"), port)"},{"line_number":1132,"context_line":"            return"},{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"        # Handle  port removed use-case"},{"line_number":1135,"context_line":"        if port.vif_id not in self.local_ports:"},{"line_number":1136,"context_line":"            LOG.debug(_(\"DVR: Non distributed port, ignoring %s\"), port)"},{"line_number":1137,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_15d13457","line":1134,"updated":"2014-05-28 23:34:07.000000000","message":"nit: two spaces after \u0027Handle\u0027","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":1138,"context_line":""},{"line_number":1139,"context_line":"        ovsport \u003d self.local_ports[port.vif_id]"},{"line_number":1140,"context_line":""},{"line_number":1141,"context_line":"        if ovsport.get_device_owner() \u003d\u003d \\"},{"line_number":1142,"context_line":"                q_const.DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED:"},{"line_number":1143,"context_line":"            self._unbind_distributed_router_interface_port(port, lvm.vlan)"},{"line_number":1144,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_d5beecfe","line":1141,"updated":"2014-05-28 23:34:07.000000000","message":"You should load \u0027device_owner\u0027 into a local variable","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":1142,"context_line":"                q_const.DEVICE_OWNER_ROUTER_INTF_DISTRIBUTED:"},{"line_number":1143,"context_line":"            self._unbind_distributed_router_interface_port(port, lvm.vlan)"},{"line_number":1144,"context_line":""},{"line_number":1145,"context_line":"        if \u0027compute\u0027 in ovsport.get_device_owner():"},{"line_number":1146,"context_line":"            self._unbind_compute_port_on_dvr_subnet(port, lvm.vlan)"},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"        if ovsport.get_device_owner() \u003d\u003d q_const.DEVICE_OWNER_ROUTER_SNAT:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_1538549f","line":1145,"updated":"2014-05-28 23:34:07.000000000","message":"This can be an elif","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":1145,"context_line":"        if \u0027compute\u0027 in ovsport.get_device_owner():"},{"line_number":1146,"context_line":"            self._unbind_compute_port_on_dvr_subnet(port, lvm.vlan)"},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"        if ovsport.get_device_owner() \u003d\u003d q_const.DEVICE_OWNER_ROUTER_SNAT:"},{"line_number":1149,"context_line":"            self._unbind_centralized_snat_port_on_dvr_subnet(port, lvm.vlan)"},{"line_number":1150,"context_line":""},{"line_number":1151,"context_line":"    def port_unbound(self, vif_id, net_uuid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_353b909d","line":1148,"updated":"2014-05-28 23:34:07.000000000","message":"This can be an elif","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1ae5cdf2_a8d77bec","updated":"2014-06-09 07:10:33.000000000","message":"ovs-neutron-agent code becomes too big.\nDVR-specific code should be a separate module rather than adding this module directly. openvswitch/agent/dvr.py?","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1ae5cdf2_088be168","in_reply_to":"1ae5cdf2_a8d77bec","updated":"2014-06-10 05:49:18.000000000","message":"There is some data intercoupling between DVR rules and existing instance variables of OVSNeutronAgent.  We will try to see refactoring DVR code out separately is possible.  But we would like to work on that after the initial merge to upsteram.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":482,"context_line":"            agent_ports \u003d values.get(\u0027ports\u0027)"},{"line_number":483,"context_line":"            agent_ports.pop(self.local_ip, None)"},{"line_number":484,"context_line":"            if len(agent_ports):"},{"line_number":485,"context_line":"                # self.tun_br.defer_apply_on()"},{"line_number":486,"context_line":"                for agent_ip, ports in agent_ports.items():"},{"line_number":487,"context_line":"                    # Ensure we have a tunnel port with this remote agent"},{"line_number":488,"context_line":"                    ofport \u003d self.tun_br_ofports["}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_93759034","line":485,"updated":"2014-06-09 07:10:33.000000000","message":"It seems temporary comment for debugging.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            agent_ports \u003d values.get(\u0027ports\u0027)"},{"line_number":483,"context_line":"            agent_ports.pop(self.local_ip, None)"},{"line_number":484,"context_line":"            if len(agent_ports):"},{"line_number":485,"context_line":"                # self.tun_br.defer_apply_on()"},{"line_number":486,"context_line":"                for agent_ip, ports in agent_ports.items():"},{"line_number":487,"context_line":"                    # Ensure we have a tunnel port with this remote agent"},{"line_number":488,"context_line":"                    ofport \u003d self.tun_br_ofports["}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_e5a98025","line":485,"in_reply_to":"1ae5cdf2_93759034","updated":"2014-06-10 05:49:18.000000000","message":"Please see comment below.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":498,"context_line":"                            continue"},{"line_number":499,"context_line":"                    for port in ports:"},{"line_number":500,"context_line":"                        self._add_fdb_flow(port, lvm, ofport)"},{"line_number":501,"context_line":"                # self.tun_br.defer_apply_off()"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    def fdb_remove(self, context, fdb_entries):"},{"line_number":504,"context_line":"        LOG.debug(_(\"fdb_remove received\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_b3728c47","line":501,"updated":"2014-06-09 07:10:33.000000000","message":"It seems temporary comment for debugging.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":498,"context_line":"                            continue"},{"line_number":499,"context_line":"                    for port in ports:"},{"line_number":500,"context_line":"                        self._add_fdb_flow(port, lvm, ofport)"},{"line_number":501,"context_line":"                # self.tun_br.defer_apply_off()"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    def fdb_remove(self, context, fdb_entries):"},{"line_number":504,"context_line":"        LOG.debug(_(\"fdb_remove received\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_a5af782a","line":501,"in_reply_to":"1ae5cdf2_b3728c47","updated":"2014-06-10 05:49:18.000000000","message":"Please see comment below.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":510,"context_line":"            agent_ports \u003d values.get(\u0027ports\u0027)"},{"line_number":511,"context_line":"            agent_ports.pop(self.local_ip, None)"},{"line_number":512,"context_line":"            if len(agent_ports):"},{"line_number":513,"context_line":"                # self.tun_br.defer_apply_on()"},{"line_number":514,"context_line":"                for agent_ip, ports in agent_ports.items():"},{"line_number":515,"context_line":"                    ofport \u003d self.tun_br_ofports["},{"line_number":516,"context_line":"                        lvm.network_type].get(agent_ip)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_d38e3827","line":513,"updated":"2014-06-09 07:10:33.000000000","message":"It seems temporary comment for debugging.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":510,"context_line":"            agent_ports \u003d values.get(\u0027ports\u0027)"},{"line_number":511,"context_line":"            agent_ports.pop(self.local_ip, None)"},{"line_number":512,"context_line":"            if len(agent_ports):"},{"line_number":513,"context_line":"                # self.tun_br.defer_apply_on()"},{"line_number":514,"context_line":"                for agent_ip, ports in agent_ports.items():"},{"line_number":515,"context_line":"                    ofport \u003d self.tun_br_ofports["},{"line_number":516,"context_line":"                        lvm.network_type].get(agent_ip)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_0e44c9b5","line":513,"in_reply_to":"1ae5cdf2_25bc486c","updated":"2014-06-10 07:00:57.000000000","message":"I see. If so, we need a comment which explains the reason here.\n\nIn addition, we also need to consider a case without DVR deployment, so just commenting out it affects the existing behavior.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":510,"context_line":"            agent_ports \u003d values.get(\u0027ports\u0027)"},{"line_number":511,"context_line":"            agent_ports.pop(self.local_ip, None)"},{"line_number":512,"context_line":"            if len(agent_ports):"},{"line_number":513,"context_line":"                # self.tun_br.defer_apply_on()"},{"line_number":514,"context_line":"                for agent_ip, ports in agent_ports.items():"},{"line_number":515,"context_line":"                    ofport \u003d self.tun_br_ofports["},{"line_number":516,"context_line":"                        lvm.network_type].get(agent_ip)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_25bc486c","line":513,"in_reply_to":"1ae5cdf2_d38e3827","updated":"2014-06-10 05:49:18.000000000","message":"No this is recognized as problem for DVR.  We could see some add/remove flow contents discarded by the ovs_lib subprocess when we used defer_apply_on() and defer_apply_off() in conjunction with l2-pop.   We have to make defer_appy_on() and defer_apply_off() caller context sensitive, after which we will be using that enhanced version here instead of the naive global defer() mechanism available today in ovs_lib.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":518,"context_line":"                        continue"},{"line_number":519,"context_line":"                    for port in ports:"},{"line_number":520,"context_line":"                        self._del_fdb_flow(port, lvm, ofport)"},{"line_number":521,"context_line":"                # self.tun_br.defer_apply_off()"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def _add_fdb_flow(self, port_info, lvm, ofport):"},{"line_number":524,"context_line":"        if port_info \u003d\u003d q_const.FLOODING_ENTRY:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_f393344d","line":521,"updated":"2014-06-09 07:10:33.000000000","message":"It seems temporary comment for debugging.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                        continue"},{"line_number":519,"context_line":"                    for port in ports:"},{"line_number":520,"context_line":"                        self._del_fdb_flow(port, lvm, ofport)"},{"line_number":521,"context_line":"                # self.tun_br.defer_apply_off()"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def _add_fdb_flow(self, port_info, lvm, ofport):"},{"line_number":524,"context_line":"        if port_info \u003d\u003d q_const.FLOODING_ENTRY:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_6512d063","line":521,"in_reply_to":"1ae5cdf2_f393344d","updated":"2014-06-10 05:49:18.000000000","message":"As earlier mentioned, we have DVR l2 flows racing with l2-pop flows, we could see some flows missed to be added in the tables when both pieces were running concurrently.  So we have to remove the global defer_apply_on and off calls to stabilize functionality.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":829,"context_line":"        # use fixed_ips[0]"},{"line_number":830,"context_line":"        subnet_uuid \u003d fixed_ips[0][\u0027subnet_id\u0027]"},{"line_number":831,"context_line":"        csnat_ofport \u003d constants.OFPORT_INVALID"},{"line_number":832,"context_line":"        ldm \u003d None"},{"line_number":833,"context_line":"        if subnet_uuid in self.local_dvr_map:"},{"line_number":834,"context_line":"            ldm \u003d self.local_dvr_map[subnet_uuid]"},{"line_number":835,"context_line":"            csnat_ofport \u003d ldm.get_csnat_ofport()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_ce25afaf","line":832,"updated":"2014-06-09 07:10:33.000000000","message":"L.832-849 can be:\n\n  ldm \u003d self.local_dvr_map.get(subnet_uuid)\n  if ldm:\n    \u003cL.835-838\u003e\n  else:\n    \u003cL.841-849\u003e","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":854,"context_line":"        subnet_info \u003d ldm.get_subnet_info()"},{"line_number":855,"context_line":"        ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":856,"context_line":"        local_compute_ports \u003d self.plugin_rpc.\\"},{"line_number":857,"context_line":"            get_compute_ports_on_host_by_subnet(self.context,"},{"line_number":858,"context_line":"                                                cfg.CONF.host,"},{"line_number":859,"context_line":"                                                subnet_uuid)"},{"line_number":860,"context_line":"        LOG.debug(_(\"DVR: List of ports received from \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_ce73efb2","line":857,"updated":"2014-06-09 07:10:33.000000000","message":"it is better to use one call per subnet (though it can be a future improvement).","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":854,"context_line":"        subnet_info \u003d ldm.get_subnet_info()"},{"line_number":855,"context_line":"        ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":856,"context_line":"        local_compute_ports \u003d self.plugin_rpc.\\"},{"line_number":857,"context_line":"            get_compute_ports_on_host_by_subnet(self.context,"},{"line_number":858,"context_line":"                                                cfg.CONF.host,"},{"line_number":859,"context_line":"                                                subnet_uuid)"},{"line_number":860,"context_line":"        LOG.debug(_(\"DVR: List of ports received from \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_4e9ed1b9","line":857,"in_reply_to":"1ae5cdf2_65e8107d","updated":"2014-06-10 07:00:57.000000000","message":"You are right. I was a bit confused with the method for compute node port.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":854,"context_line":"        subnet_info \u003d ldm.get_subnet_info()"},{"line_number":855,"context_line":"        ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":856,"context_line":"        local_compute_ports \u003d self.plugin_rpc.\\"},{"line_number":857,"context_line":"            get_compute_ports_on_host_by_subnet(self.context,"},{"line_number":858,"context_line":"                                                cfg.CONF.host,"},{"line_number":859,"context_line":"                                                subnet_uuid)"},{"line_number":860,"context_line":"        LOG.debug(_(\"DVR: List of ports received from \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_65e8107d","line":857,"in_reply_to":"1ae5cdf2_ce73efb2","updated":"2014-06-10 05:49:18.000000000","message":"It is only one call per subnet per dvr router interface here.  Could you plese elaborate on whey there is multiple calls per subnet?","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":855,"context_line":"        ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":856,"context_line":"        local_compute_ports \u003d self.plugin_rpc.\\"},{"line_number":857,"context_line":"            get_compute_ports_on_host_by_subnet(self.context,"},{"line_number":858,"context_line":"                                                cfg.CONF.host,"},{"line_number":859,"context_line":"                                                subnet_uuid)"},{"line_number":860,"context_line":"        LOG.debug(_(\"DVR: List of ports received from \""},{"line_number":861,"context_line":"                    \"get_compute_ports_on_host_by_subnet %r\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_6e365be9","line":858,"updated":"2014-06-09 07:10:33.000000000","message":"It is better to keep it in an instance variable of OVSAgent rather than referring to it directly.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":855,"context_line":"        ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":856,"context_line":"        local_compute_ports \u003d self.plugin_rpc.\\"},{"line_number":857,"context_line":"            get_compute_ports_on_host_by_subnet(self.context,"},{"line_number":858,"context_line":"                                                cfg.CONF.host,"},{"line_number":859,"context_line":"                                                subnet_uuid)"},{"line_number":860,"context_line":"        LOG.debug(_(\"DVR: List of ports received from \""},{"line_number":861,"context_line":"                    \"get_compute_ports_on_host_by_subnet %r\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_0e8be968","line":858,"in_reply_to":"1ae5cdf2_05e02c95","updated":"2014-06-10 07:00:57.000000000","message":"yes. I usually add a comment just after a target line.\nPassing \u0027host\u0027 as a parameter makes the module more modular and it is usually done in OVS agent.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":855,"context_line":"        ip_subnet \u003d subnet_info[\u0027cidr\u0027]"},{"line_number":856,"context_line":"        local_compute_ports \u003d self.plugin_rpc.\\"},{"line_number":857,"context_line":"            get_compute_ports_on_host_by_subnet(self.context,"},{"line_number":858,"context_line":"                                                cfg.CONF.host,"},{"line_number":859,"context_line":"                                                subnet_uuid)"},{"line_number":860,"context_line":"        LOG.debug(_(\"DVR: List of ports received from \""},{"line_number":861,"context_line":"                    \"get_compute_ports_on_host_by_subnet %r\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_05e02c95","line":858,"in_reply_to":"1ae5cdf2_6e365be9","updated":"2014-06-10 05:49:18.000000000","message":"I believe this comment is for cfg.CONF.host referral above.  Then I will make the host parameter and internal member variable and will access that here.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":861,"context_line":"                    \"get_compute_ports_on_host_by_subnet %r\"),"},{"line_number":862,"context_line":"                  local_compute_ports)"},{"line_number":863,"context_line":"        for prt in local_compute_ports:"},{"line_number":864,"context_line":"            vif \u003d self.int_br.get_vif_port_by_id(prt[\u0027id\u0027])"},{"line_number":865,"context_line":"            if not vif:"},{"line_number":866,"context_line":"                continue"},{"line_number":867,"context_line":"            ldm.add_compute_ofport(vif.ofport)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_2e7373b2","line":864,"updated":"2014-06-09 07:10:33.000000000","message":"It is not efficient to call ovs-vsctl per port.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":861,"context_line":"                    \"get_compute_ports_on_host_by_subnet %r\"),"},{"line_number":862,"context_line":"                  local_compute_ports)"},{"line_number":863,"context_line":"        for prt in local_compute_ports:"},{"line_number":864,"context_line":"            vif \u003d self.int_br.get_vif_port_by_id(prt[\u0027id\u0027])"},{"line_number":865,"context_line":"            if not vif:"},{"line_number":866,"context_line":"                continue"},{"line_number":867,"context_line":"            ldm.add_compute_ofport(vif.ofport)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_a812ed55","line":864,"in_reply_to":"1ae5cdf2_2e7373b2","updated":"2014-06-10 05:49:18.000000000","message":"Here we are getting the list of compute vif_ports that are on DVR subnet and process such ports so that DVR routed traffic can be handled for them. I agree with your comment.  Please let us know if us if there is a better way to code around this.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":861,"context_line":"                    \"get_compute_ports_on_host_by_subnet %r\"),"},{"line_number":862,"context_line":"                  local_compute_ports)"},{"line_number":863,"context_line":"        for prt in local_compute_ports:"},{"line_number":864,"context_line":"            vif \u003d self.int_br.get_vif_port_by_id(prt[\u0027id\u0027])"},{"line_number":865,"context_line":"            if not vif:"},{"line_number":866,"context_line":"                continue"},{"line_number":867,"context_line":"            ldm.add_compute_ofport(vif.ofport)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_dba79d09","line":864,"in_reply_to":"1ae5cdf2_8ecd39ba","updated":"2014-06-16 14:21:47.000000000","message":"The issue here is from get_vif_ports, I will get a list of ports, but I will not know from them which are compute only ports.\r\nThe vif port as it stands today (VifPort in ovs_lib.py) just holds vif_id, ofport, mac and resident bridge. It doe not contain anything more.  I didn\u0027t want to touch that since it a pristine l2-only info object maintained outside of ovsneutronagent.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":861,"context_line":"                    \"get_compute_ports_on_host_by_subnet %r\"),"},{"line_number":862,"context_line":"                  local_compute_ports)"},{"line_number":863,"context_line":"        for prt in local_compute_ports:"},{"line_number":864,"context_line":"            vif \u003d self.int_br.get_vif_port_by_id(prt[\u0027id\u0027])"},{"line_number":865,"context_line":"            if not vif:"},{"line_number":866,"context_line":"                continue"},{"line_number":867,"context_line":"            ldm.add_compute_ofport(vif.ofport)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_8ecd39ba","line":864,"in_reply_to":"1ae5cdf2_a812ed55","updated":"2014-06-10 07:00:57.000000000","message":"Another way is to use get_vif_ports or get_vif_port_set in advance.get_vif_ports returns a full list of neutron related ovs ports, but it still costs less.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":878,"context_line":"                ovsport.add_subnet(subnet_uuid)"},{"line_number":879,"context_line":"                self.local_ports[vif.vif_id] \u003d ovsport"},{"line_number":880,"context_line":""},{"line_number":881,"context_line":"        # create rule in Table LOCAL_SWITCHING to forard"},{"line_number":882,"context_line":"        # broadcast/multicast frames from dvr router interface to"},{"line_number":883,"context_line":"        # appropriate local tenant ports"},{"line_number":884,"context_line":"        ofports \u003d \u0027,\u0027.join(map(str, ldm.get_compute_ofports()))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_6eabbbd6","line":881,"updated":"2014-06-09 07:10:33.000000000","message":"forard -\u003e forward","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":936,"context_line":"                continue"},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"            # This confirms that this compute port belongs"},{"line_number":939,"context_line":"            # to a dvr hosted subnet."},{"line_number":940,"context_line":"            # Accomodate this VM Port into the existing rule in"},{"line_number":941,"context_line":"            # the integration bridge"},{"line_number":942,"context_line":"            LOG.debug(_(\"DVR: Plumbing compute port %s\"), port.vif_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_f9ba33bf","line":939,"updated":"2014-06-09 07:10:33.000000000","message":"Question: One subnet can be connected to multiple routers. Assume that one router is DVR and another router is not DVR. What happens? Is this a valid case?","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":936,"context_line":"                continue"},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"            # This confirms that this compute port belongs"},{"line_number":939,"context_line":"            # to a dvr hosted subnet."},{"line_number":940,"context_line":"            # Accomodate this VM Port into the existing rule in"},{"line_number":941,"context_line":"            # the integration bridge"},{"line_number":942,"context_line":"            LOG.debug(_(\"DVR: Plumbing compute port %s\"), port.vif_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_4e3a5199","line":939,"in_reply_to":"1ae5cdf2_4850890a","updated":"2014-06-10 07:00:57.000000000","message":"thanks for the clarification. Sounds reasonable and acceptable.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":936,"context_line":"                continue"},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"            # This confirms that this compute port belongs"},{"line_number":939,"context_line":"            # to a dvr hosted subnet."},{"line_number":940,"context_line":"            # Accomodate this VM Port into the existing rule in"},{"line_number":941,"context_line":"            # the integration bridge"},{"line_number":942,"context_line":"            LOG.debug(_(\"DVR: Plumbing compute port %s\"), port.vif_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_4850890a","line":939,"in_reply_to":"1ae5cdf2_f9ba33bf","updated":"2014-06-10 05:49:18.000000000","message":"A given subnet can be either DVR hosted or centralized router hosted.  The subnet cannot be part of both.  We will return error during the router interface addition only, if we detect that the subnet is available as part of another router (be it DVR or otherwise).","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1021,"context_line":"    def bind_port_to_dvr(self, port, net_uuid, network_type,"},{"line_number":1022,"context_line":"                         fixed_ips, device_owner):"},{"line_number":1023,"context_line":"        # a port coming up as distributed router interface"},{"line_number":1024,"context_line":"        if not self.enable_distributed_routing and not self.enable_tunneling:"},{"line_number":1025,"context_line":"            return"},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"        if network_type not in constants.TUNNEL_NETWORK_TYPES:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_535dc847","line":1024,"updated":"2014-06-09 07:10:33.000000000","message":"The condition looks incorrect.\n\nIf self.enable_distributed_routing is False, it should return here, but it doesn\u0027t return if enable_distribute_routing is False and enable_tunneling is True.\n\nIs the expected logic like this?\n\n  if not self.enable_distributed_routing:\n      return\n  if not self.enable_tunneling:\n      return","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"    def bind_port_to_dvr(self, port, net_uuid, network_type,"},{"line_number":1022,"context_line":"                         fixed_ips, device_owner):"},{"line_number":1023,"context_line":"        # a port coming up as distributed router interface"},{"line_number":1024,"context_line":"        if not self.enable_distributed_routing and not self.enable_tunneling:"},{"line_number":1025,"context_line":"            return"},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"        if network_type not in constants.TUNNEL_NETWORK_TYPES:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_8844511c","line":1024,"in_reply_to":"1ae5cdf2_535dc847","updated":"2014-06-10 05:49:18.000000000","message":"Yes, this is the expected logic.  Will fix the same.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1024,"context_line":"        if not self.enable_distributed_routing and not self.enable_tunneling:"},{"line_number":1025,"context_line":"            return"},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"        if network_type not in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":1028,"context_line":"            return"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        lvm \u003d self.local_vlan_map[net_uuid]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_735ac451","line":1027,"updated":"2014-06-09 07:10:33.000000000","message":"Does DVR require tunneling?\n\nDVR doesn\u0027t work with VLAN? Or there is simply nothing to do for VLAN case?","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"        if not self.enable_distributed_routing and not self.enable_tunneling:"},{"line_number":1025,"context_line":"            return"},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"        if network_type not in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":1028,"context_line":"            return"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        lvm \u003d self.local_vlan_map[net_uuid]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_e84a3554","line":1027,"in_reply_to":"1ae5cdf2_735ac451","updated":"2014-06-10 05:49:18.000000000","message":"DVR code checkin as of today is with VxLANs only.  With the current design of DVR there would be VLAN thrashing if VLAN underlay is used because Unique MAC per CN to accomplish distributed routing.  So for now recommendation is to use DVRs with overlay networks (will enhance DVR for GRE and VLAN as we move forward).","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1024,"context_line":"        if not self.enable_distributed_routing and not self.enable_tunneling:"},{"line_number":1025,"context_line":"            return"},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"        if network_type not in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":1028,"context_line":"            return"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"        lvm \u003d self.local_vlan_map[net_uuid]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_cef3c1e5","line":1027,"in_reply_to":"1ae5cdf2_e84a3554","updated":"2014-06-10 07:00:57.000000000","message":"Thanks for the clarification. It sounds reasonable from the neutron implementation perspective.\n\nFrom nova-parity perspective, it is also an important point because nova-network multihost with vlan is a typical setup. It is not up to you but to the community as a whole.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1034,"context_line":"                                                         device_owner,"},{"line_number":1035,"context_line":"                                                         lvm.vlan)"},{"line_number":1036,"context_line":""},{"line_number":1037,"context_line":"        if \u0027compute\u0027 in device_owner:"},{"line_number":1038,"context_line":"            self._bind_compute_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":1039,"context_line":"                                                  device_owner,"},{"line_number":1040,"context_line":"                                                  lvm.vlan)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_139fc004","line":1037,"updated":"2014-06-09 07:10:33.000000000","message":"I think it is not enough to compare the device_owner to \u0027compute\u0027 because for example a port owned by LBaaS instance should be considered same as a compute port.\nIt can be improved later but it should be documented here.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"                                                         device_owner,"},{"line_number":1035,"context_line":"                                                         lvm.vlan)"},{"line_number":1036,"context_line":""},{"line_number":1037,"context_line":"        if \u0027compute\u0027 in device_owner:"},{"line_number":1038,"context_line":"            self._bind_compute_port_on_dvr_subnet(port, fixed_ips,"},{"line_number":1039,"context_line":"                                                  device_owner,"},{"line_number":1040,"context_line":"                                                  lvm.vlan)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_4877a99f","line":1037,"in_reply_to":"1ae5cdf2_139fc004","updated":"2014-06-10 05:49:18.000000000","message":"This is a very good point.  We need to improve the code to handle LBaas VIP ports.  We have captured this as input and will be working on the same.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1054,"context_line":"        :param net_uuid: the net_uuid this port is to be associated with."},{"line_number":1055,"context_line":"        :param network_type: the network type (\u0027gre\u0027, \u0027vlan\u0027, \u0027flat\u0027, \u0027local\u0027)"},{"line_number":1056,"context_line":"        :param physical_network: the physical network for \u0027vlan\u0027 or \u0027flat\u0027"},{"line_number":1057,"context_line":"        :param segmentation_id: the VID for \u0027vlan\u0027 or tunnel ID for \u0027tunnel\u0027"},{"line_number":1058,"context_line":"        \u0027\u0027\u0027"},{"line_number":1059,"context_line":"        if net_uuid not in self.local_vlan_map:"},{"line_number":1060,"context_line":"            self.provision_local_vlan(net_uuid, network_type,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_08830fcd","line":1057,"updated":"2014-06-09 07:10:33.000000000","message":"Please add descriptions of new arguments (fixed_ips, device_owner).","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":1054,"context_line":"        :param net_uuid: the net_uuid this port is to be associated with."},{"line_number":1055,"context_line":"        :param network_type: the network type (\u0027gre\u0027, \u0027vlan\u0027, \u0027flat\u0027, \u0027local\u0027)"},{"line_number":1056,"context_line":"        :param physical_network: the physical network for \u0027vlan\u0027 or \u0027flat\u0027"},{"line_number":1057,"context_line":"        :param segmentation_id: the VID for \u0027vlan\u0027 or tunnel ID for \u0027tunnel\u0027"},{"line_number":1058,"context_line":"        \u0027\u0027\u0027"},{"line_number":1059,"context_line":"        if net_uuid not in self.local_vlan_map:"},{"line_number":1060,"context_line":"            self.provision_local_vlan(net_uuid, network_type,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_48ec092a","line":1057,"in_reply_to":"1ae5cdf2_08830fcd","updated":"2014-06-10 05:49:18.000000000","message":"Will do","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1647,"context_line":"            if admin_state_up:"},{"line_number":1648,"context_line":"                self.port_bound(vif_port, network_id, network_type,"},{"line_number":1649,"context_line":"                                physical_network, segmentation_id,"},{"line_number":1650,"context_line":"                                fixed_ips, device_owner)"},{"line_number":1651,"context_line":"            else:"},{"line_number":1652,"context_line":"                self.port_dead(vif_port)"},{"line_number":1653,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_13d180cd","line":1650,"updated":"2014-06-09 07:10:33.000000000","message":"When considering the symmetry of treat_vif_port and treat_device_removed. we can use a separate method for DVR here.\n\n  self.port_bound(\u003coriginal parameters\u003e)\n  self.bind_port_to_dvr(port, network_id, network_type,\n                        fixed_ips, device_owner)","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1647,"context_line":"            if admin_state_up:"},{"line_number":1648,"context_line":"                self.port_bound(vif_port, network_id, network_type,"},{"line_number":1649,"context_line":"                                physical_network, segmentation_id,"},{"line_number":1650,"context_line":"                                fixed_ips, device_owner)"},{"line_number":1651,"context_line":"            else:"},{"line_number":1652,"context_line":"                self.port_dead(vif_port)"},{"line_number":1653,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_cecbc148","line":1650,"in_reply_to":"1ae5cdf2_085041d3","updated":"2014-06-10 07:00:57.000000000","message":"The background of my comment is simple.\n\nIf bind_port_to_dvr is called in port_bound, \nunbind_port_from_dvr also should be called inside port_unbound().\n\nIf both port_unbound and unbind_port_from_dvr are called in treat_devices_removed, treat_vif_port should do the same from the point of code consistency.\n\nIt is a comment about not the logic but the coding style.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"            if admin_state_up:"},{"line_number":1648,"context_line":"                self.port_bound(vif_port, network_id, network_type,"},{"line_number":1649,"context_line":"                                physical_network, segmentation_id,"},{"line_number":1650,"context_line":"                                fixed_ips, device_owner)"},{"line_number":1651,"context_line":"            else:"},{"line_number":1652,"context_line":"                self.port_dead(vif_port)"},{"line_number":1653,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_085041d3","line":1650,"in_reply_to":"1ae5cdf2_13d180cd","updated":"2014-06-10 05:49:18.000000000","message":"Every port bound by L2 Agent need to be validated for DVR.  This is the reason bind_port_do_dvr() is invoked from within port_bound.  Could you please clarify this comment?","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":1647,"context_line":"            if admin_state_up:"},{"line_number":1648,"context_line":"                self.port_bound(vif_port, network_id, network_type,"},{"line_number":1649,"context_line":"                                physical_network, segmentation_id,"},{"line_number":1650,"context_line":"                                fixed_ips, device_owner)"},{"line_number":1651,"context_line":"            else:"},{"line_number":1652,"context_line":"                self.port_dead(vif_port)"},{"line_number":1653,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_b6b3c898","line":1650,"in_reply_to":"1ae5cdf2_cecbc148","updated":"2014-06-16 14:21:47.000000000","message":"I will be moving unbind_port_from_dvr into port_unbound() as part of next patchset. We are not processng dvr flows for port_dead() case since the port is still physically present, only it is administratively down.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1739,"context_line":"                                    details[\u0027segmentation_id\u0027],"},{"line_number":1740,"context_line":"                                    details[\u0027admin_state_up\u0027],"},{"line_number":1741,"context_line":"                                    details[\u0027fixed_ips\u0027],"},{"line_number":1742,"context_line":"                                    details[\u0027device_owner\u0027])"},{"line_number":1743,"context_line":""},{"line_number":1744,"context_line":"                # update plugin about port status"},{"line_number":1745,"context_line":"                if details.get(\u0027admin_state_up\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_b3c44c60","line":1742,"updated":"2014-06-09 07:10:33.000000000","message":"To make this work expected, get_device_details should be a new version which returns the new attributes. Thus I think we need to update the RPC version of get_device_details to 1.2 as well. Or we need to consider a case where fixed_ips and device_owner are not included in the response.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":1739,"context_line":"                                    details[\u0027segmentation_id\u0027],"},{"line_number":1740,"context_line":"                                    details[\u0027admin_state_up\u0027],"},{"line_number":1741,"context_line":"                                    details[\u0027fixed_ips\u0027],"},{"line_number":1742,"context_line":"                                    details[\u0027device_owner\u0027])"},{"line_number":1743,"context_line":""},{"line_number":1744,"context_line":"                # update plugin about port status"},{"line_number":1745,"context_line":"                if details.get(\u0027admin_state_up\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_0572ec10","line":1742,"in_reply_to":"1ae5cdf2_b3c44c60","updated":"2014-06-10 05:49:18.000000000","message":"You are correct.  We have upgraded the get_device_details to return fixed_ips and device_owner, in addition to earlier attributes it used to return.  I will include this change in the next post of this patch set.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":693,"context_line":""},{"line_number":694,"context_line":"        LOG.info(_(\"Assigning %(vlan_id)s as local vlan for \""},{"line_number":695,"context_line":"                   \"net-id\u003d%(net_uuid)s\"),"},{"line_number":696,"context_line":"                 {\u0027vlan_id\u0027: lvid, \u0027net_uuid\u0027: net_uuid})"},{"line_number":697,"context_line":"        if network_type in constants.TUNNEL_NETWORK_TYPES:"},{"line_number":698,"context_line":"            if self.enable_tunneling:"},{"line_number":699,"context_line":"                # outbound broadcast/multicast"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_09a66710","line":696,"updated":"2014-06-10 18:29:29.000000000","message":"Please don\u0027t change the whitespace unnecessarily.  This blank line should not be removed here.","commit_id":"a9a776b09fff24f345e49e4dace033488ca63024"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"    def port_bound(self, port, net_uuid,"},{"line_number":1059,"context_line":"                   network_type, physical_network,"},{"line_number":1060,"context_line":"                   segmentation_id, fixed_ips, device_owner, "},{"line_number":1061,"context_line":"                   ovs_restarted):"},{"line_number":1062,"context_line":"        \u0027\u0027\u0027Bind port to net_uuid/lsw_id and install flow for inbound traffic"},{"line_number":1063,"context_line":"        to vm."}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_69636bdd","line":1060,"updated":"2014-06-10 18:29:29.000000000","message":"Whitespace added to the end of the line.","commit_id":"a9a776b09fff24f345e49e4dace033488ca63024"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":1759,"context_line":"                                    details[\u0027fixed_ips\u0027],"},{"line_number":1760,"context_line":"                                    details[\u0027device_owner\u0027],"},{"line_number":1761,"context_line":"                                    ovs_restarted)"},{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"                # update plugin about port status"},{"line_number":1764,"context_line":"                if details.get(\u0027admin_state_up\u0027):"},{"line_number":1765,"context_line":"                    LOG.debug(_(\"Setting status for %s to UP\"), device)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_e985bb59","line":1762,"updated":"2014-06-10 18:29:29.000000000","message":"Don\u0027t add an extra line here.","commit_id":"a9a776b09fff24f345e49e4dace033488ca63024"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":212,"context_line":"        if tunnel_types:"},{"line_number":213,"context_line":"            self.enable_tunneling \u003d True"},{"line_number":214,"context_line":"        else:"},{"line_number":215,"context_line":"            self.enable_tunneling \u003d False"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        self.int_br \u003d ovs_lib.OVSBridge(integ_br, self.root_helper)"},{"line_number":218,"context_line":"        # Stores port update notifications for processing in main rpc loop"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_2a20c8af","line":215,"updated":"2014-06-16 14:36:08.000000000","message":"why you moved these?","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":7183,"name":"Xu Han Peng","email":"xuhanp@linux.vnet.ibm.com","username":"xuhanp"},"unresolved":false,"context_lines":[{"line_number":212,"context_line":"        if tunnel_types:"},{"line_number":213,"context_line":"            self.enable_tunneling \u003d True"},{"line_number":214,"context_line":"        else:"},{"line_number":215,"context_line":"            self.enable_tunneling \u003d False"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        self.int_br \u003d ovs_lib.OVSBridge(integ_br, self.root_helper)"},{"line_number":218,"context_line":"        # Stores port update notifications for processing in main rpc loop"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_c6490662","line":215,"in_reply_to":"1ae5cdf2_004cb675","updated":"2014-06-17 06:20:28.000000000","message":"Why we want to listen on DVR UPDATE when enable_distributed_routing is not enabled?","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        if tunnel_types:"},{"line_number":213,"context_line":"            self.enable_tunneling \u003d True"},{"line_number":214,"context_line":"        else:"},{"line_number":215,"context_line":"            self.enable_tunneling \u003d False"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        self.int_br \u003d ovs_lib.OVSBridge(integ_br, self.root_helper)"},{"line_number":218,"context_line":"        # Stores port update notifications for processing in main rpc loop"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_004cb675","line":215,"in_reply_to":"1ae5cdf2_2a20c8af","updated":"2014-06-17 02:11:49.000000000","message":"I moved this up because I tried enable_tunneling and enable_distributed_routing to decide whehter we need to listen on topic DVR action UPDATE.  But then I realized that we always hook in for topic DVR action UPDATE.  So I will move this bunch back to the original location.","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":237,"context_line":"        self.patch_int_ofport \u003d constants.OFPORT_INVALID"},{"line_number":238,"context_line":"        self.patch_tun_ofport \u003d constants.OFPORT_INVALID"},{"line_number":239,"context_line":"        if self.enable_tunneling:"},{"line_number":240,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        self.dvr_agent \u003d ovs_dvr_neutron_agent.OVSDVRNeutronAgent("},{"line_number":243,"context_line":"            self.context,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_2591db9a","line":240,"updated":"2014-06-16 14:36:08.000000000","message":"can you comment this call updates patch_int_ofport/patch_tun_ofport?","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        self.patch_int_ofport \u003d constants.OFPORT_INVALID"},{"line_number":238,"context_line":"        self.patch_tun_ofport \u003d constants.OFPORT_INVALID"},{"line_number":239,"context_line":"        if self.enable_tunneling:"},{"line_number":240,"context_line":"            self.setup_tunnel_br(tun_br)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        self.dvr_agent \u003d ovs_dvr_neutron_agent.OVSDVRNeutronAgent("},{"line_number":243,"context_line":"            self.context,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_4543306c","line":240,"in_reply_to":"1ae5cdf2_2591db9a","updated":"2014-06-17 02:11:49.000000000","message":"Yes, will do.","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":1433,"context_line":"                self.setup_integration_br()"},{"line_number":1434,"context_line":"                self.setup_physical_bridges(self.bridge_mappings)"},{"line_number":1435,"context_line":"                if self.enable_tunneling:"},{"line_number":1436,"context_line":"                    self.setup_tunnel_br()"},{"line_number":1437,"context_line":"            if self._agent_has_updates(polling_manager) or ovs_restarted:"},{"line_number":1438,"context_line":"                try:"},{"line_number":1439,"context_line":"                    LOG.debug(_(\"Agent rpc_loop - iteration:%(iter_num)d - \""}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_e55b73f4","line":1436,"updated":"2014-06-16 14:36:08.000000000","message":"you need to tell new patch_int_ofport/patch_tun_ofport to dvr_agent.","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":1433,"context_line":"                self.setup_integration_br()"},{"line_number":1434,"context_line":"                self.setup_physical_bridges(self.bridge_mappings)"},{"line_number":1435,"context_line":"                if self.enable_tunneling:"},{"line_number":1436,"context_line":"                    self.setup_tunnel_br()"},{"line_number":1437,"context_line":"            if self._agent_has_updates(polling_manager) or ovs_restarted:"},{"line_number":1438,"context_line":"                try:"},{"line_number":1439,"context_line":"                    LOG.debug(_(\"Agent rpc_loop - iteration:%(iter_num)d - \""}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_a507941c","line":1436,"in_reply_to":"1ae5cdf2_e55b73f4","updated":"2014-06-17 02:11:49.000000000","message":"Your observation is correct. I need to fix this area (ovs_restarted use-case).  I have to update the dvr_agent with new set of patch_int_port and patch_tun_port.  Also I need to check if rules are intact for dvr.","commit_id":"ded1a00ccf0b160c06414f0a33a5a3cf0c537231"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":1173,"context_line":"                details \u003d self.plugin_rpc.get_device_details(self.context,"},{"line_number":1174,"context_line":"                                                             device,"},{"line_number":1175,"context_line":"                                                             self.agent_id,"},{"line_number":1176,"context_line":"                                                             cfg.CONF.host)"},{"line_number":1177,"context_line":"            except Exception as e:"},{"line_number":1178,"context_line":"                LOG.debug(_(\"Unable to get port details for \""},{"line_number":1179,"context_line":"                            \"%(device)s: %(e)s\"),"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ae5cdf2_5e038d0c","line":1176,"updated":"2014-06-26 18:03:32.000000000","message":"In rebasing this change, the code around it disappeared.  This makes me wonder if there is new code that needs to be changed somewhere else.  I need to find the patch set that changed the code around this...\n\nIt looks like maybe it was Rossella\u0027s recent merge.  Need to understand how DVR needs to work with that code if at all.","commit_id":"98f3af1ccf5de81fe7c36a8b6b7f15e144ffe4dd"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":1173,"context_line":"                details \u003d self.plugin_rpc.get_device_details(self.context,"},{"line_number":1174,"context_line":"                                                             device,"},{"line_number":1175,"context_line":"                                                             self.agent_id,"},{"line_number":1176,"context_line":"                                                             cfg.CONF.host)"},{"line_number":1177,"context_line":"            except Exception as e:"},{"line_number":1178,"context_line":"                LOG.debug(_(\"Unable to get port details for \""},{"line_number":1179,"context_line":"                            \"%(device)s: %(e)s\"),"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ae5cdf2_a96e1dc6","line":1176,"in_reply_to":"1ae5cdf2_5e038d0c","updated":"2014-06-26 18:36:18.000000000","message":"Here is the commit that change things.  A great improvement from a performance perspective but, unfortunately for us, means we need to look to see if there is any effect on DVR code.\n\nhttps://review.openstack.org/#/c/66899","commit_id":"98f3af1ccf5de81fe7c36a8b6b7f15e144ffe4dd"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":1215,"context_line":"            try:"},{"line_number":1216,"context_line":"                self.plugin_rpc.get_device_details(self.context, device,"},{"line_number":1217,"context_line":"                                                   self.agent_id,"},{"line_number":1218,"context_line":"                                                   cfg.CONF.host)"},{"line_number":1219,"context_line":"            except Exception as e:"},{"line_number":1220,"context_line":"                LOG.debug(_(\"Unable to get port details for \""},{"line_number":1221,"context_line":"                            \"%(device)s: %(e)s\"),"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ae5cdf2_833f82de","line":1218,"updated":"2014-06-26 18:03:32.000000000","message":"Same comment here.","commit_id":"98f3af1ccf5de81fe7c36a8b6b7f15e144ffe4dd"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":1428,"context_line":"                                                    self.tun_br,"},{"line_number":1429,"context_line":"                                                    self.patch_int_ofport,"},{"line_number":1430,"context_line":"                                                    self.patch_tun_ofport)"},{"line_number":1431,"context_line":"                self.dvr_agent.setup_dvr_flows_on_integ_tun_br()"},{"line_number":1432,"context_line":"            if self._agent_has_updates(polling_manager) or ovs_restarted:"},{"line_number":1433,"context_line":"                try:"},{"line_number":1434,"context_line":"                    LOG.debug(_(\"Agent rpc_loop - iteration:%(iter_num)d - \""}],"source_content_type":"text/x-python","patch_set":20,"id":"1ae5cdf2_be11f154","line":1431,"updated":"2014-06-26 18:03:32.000000000","message":"Same comment here.","commit_id":"98f3af1ccf5de81fe7c36a8b6b7f15e144ffe4dd"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":1428,"context_line":"                                                    self.tun_br,"},{"line_number":1429,"context_line":"                                                    self.patch_int_ofport,"},{"line_number":1430,"context_line":"                                                    self.patch_tun_ofport)"},{"line_number":1431,"context_line":"                self.dvr_agent.setup_dvr_flows_on_integ_tun_br()"},{"line_number":1432,"context_line":"            if self._agent_has_updates(polling_manager) or ovs_restarted:"},{"line_number":1433,"context_line":"                try:"},{"line_number":1434,"context_line":"                    LOG.debug(_(\"Agent rpc_loop - iteration:%(iter_num)d - \""}],"source_content_type":"text/x-python","patch_set":20,"id":"1ae5cdf2_cebe0aaf","line":1431,"in_reply_to":"1ae5cdf2_a9261d65","updated":"2014-06-26 20:52:44.000000000","message":"I think I got this one worked out.","commit_id":"98f3af1ccf5de81fe7c36a8b6b7f15e144ffe4dd"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":1428,"context_line":"                                                    self.tun_br,"},{"line_number":1429,"context_line":"                                                    self.patch_int_ofport,"},{"line_number":1430,"context_line":"                                                    self.patch_tun_ofport)"},{"line_number":1431,"context_line":"                self.dvr_agent.setup_dvr_flows_on_integ_tun_br()"},{"line_number":1432,"context_line":"            if self._agent_has_updates(polling_manager) or ovs_restarted:"},{"line_number":1433,"context_line":"                try:"},{"line_number":1434,"context_line":"                    LOG.debug(_(\"Agent rpc_loop - iteration:%(iter_num)d - \""}],"source_content_type":"text/x-python","patch_set":20,"id":"1ae5cdf2_a9261d65","line":1431,"in_reply_to":"1ae5cdf2_be11f154","updated":"2014-06-26 18:44:07.000000000","message":"Here is the commit that this conflicts with:\n\nhttps://review.openstack.org/#/c/101447/","commit_id":"98f3af1ccf5de81fe7c36a8b6b7f15e144ffe4dd"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"    def treat_devices_added_or_updated(self, devices, ovs_restarted):"},{"line_number":1165,"context_line":"        try:"},{"line_number":1166,"context_line":"            devices_details_list \u003d self.plugin_rpc.get_devices_details_list("},{"line_number":1167,"context_line":"                self.context,"},{"line_number":1168,"context_line":"                devices,"},{"line_number":1169,"context_line":"                self.agent_id)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1ae5cdf2_eea4a6a4","line":1166,"updated":"2014-06-26 20:52:37.000000000","message":"See the note on PS20.  I think get_devices_details_list may need to be enhanced to pass the host.","commit_id":"1926923e862759411676c414d53c99ecd382d32c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":1217,"context_line":"            devices_details_list \u003d self.plugin_rpc.get_devices_details_list("},{"line_number":1218,"context_line":"                self.context,"},{"line_number":1219,"context_line":"                devices,"},{"line_number":1220,"context_line":"                self.agent_id)"},{"line_number":1221,"context_line":"        except Exception as e:"},{"line_number":1222,"context_line":"            LOG.debug(\"Unable to get port details for \""},{"line_number":1223,"context_line":"                      \"%(devices)s: %(e)s\", {\u0027devices\u0027: devices, \u0027e\u0027: e})"}],"source_content_type":"text/x-python","patch_set":21,"id":"1ae5cdf2_0eb552cf","line":1220,"updated":"2014-06-26 20:52:37.000000000","message":"See the note on PS20.","commit_id":"1926923e862759411676c414d53c99ecd382d32c"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"unresolved":false,"context_lines":[{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        if not self.local_vlan_map.get(net_uuid):"},{"line_number":772,"context_line":"            LOG.info(_(\u0027port_unbound(): net_uuid %s not\u0027"},{"line_number":773,"context_line":"                       \u0027 in local_vlan_map\u0027), net_uuid)"},{"line_number":774,"context_line":"            return"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        lvm \u003d self.local_vlan_map[net_uuid]"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_cfbae16d","line":773,"updated":"2014-07-02 03:56:30.000000000","message":"it\u0027s better to keep unrelated changes out of this review.","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        if not self.local_vlan_map.get(net_uuid):"},{"line_number":772,"context_line":"            LOG.info(_(\u0027port_unbound(): net_uuid %s not\u0027"},{"line_number":773,"context_line":"                       \u0027 in local_vlan_map\u0027), net_uuid)"},{"line_number":774,"context_line":"            return"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        lvm \u003d self.local_vlan_map[net_uuid]"}],"source_content_type":"text/x-python","patch_set":26,"id":"baada198_f72f4cf4","line":773,"in_reply_to":"baada198_cfbae16d","updated":"2014-07-03 02:48:44.000000000","message":"Done","commit_id":"2c132a630fd16c772b32e8385dc352eee19a5b57"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":361,"context_line":"            agent_ports.pop(self.local_ip, None)"},{"line_number":362,"context_line":"            if len(agent_ports):"},{"line_number":363,"context_line":"                if not self.enable_distributed_routing:"},{"line_number":364,"context_line":"                    # TODO(vivek): when defer_apply_on is used DVR"},{"line_number":365,"context_line":"                    # flows are only getting partially configured when"},{"line_number":366,"context_line":"                    # run concurrently with l2-pop ON."},{"line_number":367,"context_line":"                    # Will need make ovs_lib flow API context sensitive"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_536421e4","line":364,"updated":"2014-07-21 21:01:03.000000000","message":"would this change:\n\nhttps://review.openstack.org/#/c/77578/\n\nsolve the problem, or is it a different change needed?\n\nJust a nit: you could move this comment to defer_apply_on/off method definition and avoid repeating it here.","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":361,"context_line":"            agent_ports.pop(self.local_ip, None)"},{"line_number":362,"context_line":"            if len(agent_ports):"},{"line_number":363,"context_line":"                if not self.enable_distributed_routing:"},{"line_number":364,"context_line":"                    # TODO(vivek): when defer_apply_on is used DVR"},{"line_number":365,"context_line":"                    # flows are only getting partially configured when"},{"line_number":366,"context_line":"                    # run concurrently with l2-pop ON."},{"line_number":367,"context_line":"                    # Will need make ovs_lib flow API context sensitive"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_bebfe8fa","line":364,"in_reply_to":"baada198_536421e4","updated":"2014-07-22 07:26:41.000000000","message":"The review #77578 does attempt to solve the problem.\r\n\r\nI have moved this comment to ovs_lib.py , defer_apply_on and defer_apply_off methods.","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":384,"context_line":"                    for port in ports:"},{"line_number":385,"context_line":"                        self._add_fdb_flow(port, agent_ip, lvm, ofport)"},{"line_number":386,"context_line":"                if not self.enable_distributed_routing:"},{"line_number":387,"context_line":"                    # TODO(vivek): when defer_apply_on is used DVR"},{"line_number":388,"context_line":"                    # flows are only getting partiall configured when"},{"line_number":389,"context_line":"                    # run concurrently with l2-pop ON."},{"line_number":390,"context_line":"                    # Will need make ovs_lib flow API context sensitive"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_73b6853f","line":387,"updated":"2014-07-21 21:01:03.000000000","message":"and here","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                    for port in ports:"},{"line_number":385,"context_line":"                        self._add_fdb_flow(port, agent_ip, lvm, ofport)"},{"line_number":386,"context_line":"                if not self.enable_distributed_routing:"},{"line_number":387,"context_line":"                    # TODO(vivek): when defer_apply_on is used DVR"},{"line_number":388,"context_line":"                    # flows are only getting partiall configured when"},{"line_number":389,"context_line":"                    # run concurrently with l2-pop ON."},{"line_number":390,"context_line":"                    # Will need make ovs_lib flow API context sensitive"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_debadc09","line":387,"in_reply_to":"baada198_73b6853f","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":405,"context_line":"                if not self.enable_distributed_routing:"},{"line_number":406,"context_line":"                    # TODO(vivek): when defer_apply_on is used DVR"},{"line_number":407,"context_line":"                    # flows are only getting partially configured when"},{"line_number":408,"context_line":"                    # run concurrently with l2-pop ON."},{"line_number":409,"context_line":"                    # Will need make ovs_lib flow API context sensitive"},{"line_number":410,"context_line":"                    # and then use the same across this file, which will"},{"line_number":411,"context_line":"                    # address the race issue he"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_93b15946","line":408,"updated":"2014-07-21 21:01:03.000000000","message":"and here","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":405,"context_line":"                if not self.enable_distributed_routing:"},{"line_number":406,"context_line":"                    # TODO(vivek): when defer_apply_on is used DVR"},{"line_number":407,"context_line":"                    # flows are only getting partially configured when"},{"line_number":408,"context_line":"                    # run concurrently with l2-pop ON."},{"line_number":409,"context_line":"                    # Will need make ovs_lib flow API context sensitive"},{"line_number":410,"context_line":"                    # and then use the same across this file, which will"},{"line_number":411,"context_line":"                    # address the race issue he"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_3e3bd89c","line":408,"in_reply_to":"baada198_93b15946","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    for port in ports:"},{"line_number":419,"context_line":"                        self._del_fdb_flow(port, agent_ip, lvm, ofport)"},{"line_number":420,"context_line":"                if not self.enable_distributed_routing:"},{"line_number":421,"context_line":"                    # TODO(vivek): when defer_apply_on is used DVR"},{"line_number":422,"context_line":"                    # flows are only getting partially configured when"},{"line_number":423,"context_line":"                    # run concurrently with l2-pop ON."},{"line_number":424,"context_line":"                    # Will need make ovs_lib flow API context sensitive"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_d3867164","line":421,"updated":"2014-07-21 21:01:03.000000000","message":"and here","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                    for port in ports:"},{"line_number":419,"context_line":"                        self._del_fdb_flow(port, agent_ip, lvm, ofport)"},{"line_number":420,"context_line":"                if not self.enable_distributed_routing:"},{"line_number":421,"context_line":"                    # TODO(vivek): when defer_apply_on is used DVR"},{"line_number":422,"context_line":"                    # flows are only getting partially configured when"},{"line_number":423,"context_line":"                    # run concurrently with l2-pop ON."},{"line_number":424,"context_line":"                    # Will need make ovs_lib flow API context sensitive"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_7e41d008","line":421,"in_reply_to":"baada198_d3867164","updated":"2014-07-22 07:26:41.000000000","message":"Done","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"eventlet.monkey_patch()"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import netaddr"},{"line_number":26,"context_line":"from neutron.plugins.openvswitch.agent import ovs_dvr_neutron_agent"},{"line_number":27,"context_line":"from oslo.config import cfg"},{"line_number":28,"context_line":"from six import moves"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"baada198_3814c99e","line":26,"updated":"2014-07-22 08:33:52.000000000","message":"this should probably be down below, but I wouldn\u0027t hold this patch back only because of this, it\u0027s a minor cleanup. I should\u0027ve caught this sooner...my bad!","commit_id":"029eff322d64e7adecbd177b14329eb2fb08cccc"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":412,"context_line":"                                 \"output:%s\" % (lvm.segmentation_id, ofports))"},{"line_number":413,"context_line":"        else:"},{"line_number":414,"context_line":"            self._set_arp_responder(\u0027add\u0027, lvm.vlan, port_info[0],"},{"line_number":415,"context_line":"                                    port_info[1])"},{"line_number":416,"context_line":"            if not self.dvr_agent.is_dvr_router_interface(port_info[1]):"},{"line_number":417,"context_line":"                self.tun_br.add_flow(table\u003dconstants.UCAST_TO_TUN,"},{"line_number":418,"context_line":"                                     priority\u003d2,"}],"source_content_type":"text/x-python","patch_set":43,"id":"baada198_8a28d437","line":415,"updated":"2014-08-06 21:40:51.000000000","message":"Oops, port_info[1] is now device_owner and not ip address.","commit_id":"029eff322d64e7adecbd177b14329eb2fb08cccc"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":413,"context_line":"        else:"},{"line_number":414,"context_line":"            self._set_arp_responder(\u0027add\u0027, lvm.vlan, port_info[0],"},{"line_number":415,"context_line":"                                    port_info[1])"},{"line_number":416,"context_line":"            if not self.dvr_agent.is_dvr_router_interface(port_info[1]):"},{"line_number":417,"context_line":"                self.tun_br.add_flow(table\u003dconstants.UCAST_TO_TUN,"},{"line_number":418,"context_line":"                                     priority\u003d2,"},{"line_number":419,"context_line":"                                     dl_vlan\u003dlvm.vlan,"}],"source_content_type":"text/x-python","patch_set":43,"id":"baada198_ea0eb0e3","line":416,"updated":"2014-08-06 21:40:51.000000000","message":"Correction:  In this context port_info[1] would be device_owner.  I meant to flag L415.","commit_id":"029eff322d64e7adecbd177b14329eb2fb08cccc"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":413,"context_line":"        else:"},{"line_number":414,"context_line":"            self._set_arp_responder(\u0027add\u0027, lvm.vlan, port_info[0],"},{"line_number":415,"context_line":"                                    port_info[1])"},{"line_number":416,"context_line":"            if not self.dvr_agent.is_dvr_router_interface(port_info[1]):"},{"line_number":417,"context_line":"                self.tun_br.add_flow(table\u003dconstants.UCAST_TO_TUN,"},{"line_number":418,"context_line":"                                     priority\u003d2,"},{"line_number":419,"context_line":"                                     dl_vlan\u003dlvm.vlan,"}],"source_content_type":"text/x-python","patch_set":43,"id":"baada198_b5d97a58","line":416,"updated":"2014-08-06 21:38:32.000000000","message":"Oops, port_info[1] is the ip address.","commit_id":"029eff322d64e7adecbd177b14329eb2fb08cccc"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        else:"},{"line_number":414,"context_line":"            self._set_arp_responder(\u0027add\u0027, lvm.vlan, port_info[0],"},{"line_number":415,"context_line":"                                    port_info[1])"},{"line_number":416,"context_line":"            if not self.dvr_agent.is_dvr_router_interface(port_info[1]):"},{"line_number":417,"context_line":"                self.tun_br.add_flow(table\u003dconstants.UCAST_TO_TUN,"},{"line_number":418,"context_line":"                                     priority\u003d2,"},{"line_number":419,"context_line":"                                     dl_vlan\u003dlvm.vlan,"}],"source_content_type":"text/x-python","patch_set":43,"id":"baada198_787eef1c","line":416,"in_reply_to":"baada198_ea0eb0e3","updated":"2014-08-07 04:51:40.000000000","message":"Should have been fixed on rebase with ARP Responder. I have already scheduled a task to get both DVR and ARP Responder enabled and validate these things and other things that may need to be addressed.","commit_id":"029eff322d64e7adecbd177b14329eb2fb08cccc"}],"neutron/plugins/openvswitch/common/config.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4f8d103a552ad4f28bab253b076243845facd3fa","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                help\u003d_(\"Use ml2 l2population mechanism driver to learn \""},{"line_number":82,"context_line":"                       \"remote mac and IPs and improve tunnel scalability\")),"},{"line_number":83,"context_line":"    cfg.BoolOpt(\u0027enable_distributed_routing\u0027, default\u003dFalse,"},{"line_number":84,"context_line":"                help\u003d_(\"Make the l2 agnet run in dvr mode \")),          "},{"line_number":85,"context_line":"]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F%2Fjs%3D","line":84,"updated":"2014-04-16 01:50:15.000000000","message":"trailing tab?","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                help\u003d_(\"Use ml2 l2population mechanism driver to learn \""},{"line_number":82,"context_line":"                       \"remote mac and IPs and improve tunnel scalability\")),"},{"line_number":83,"context_line":"    cfg.BoolOpt(\u0027enable_distributed_routing\u0027, default\u003dFalse,"},{"line_number":84,"context_line":"                help\u003d_(\"Make the l2 agnet run in dvr mode \")),          "},{"line_number":85,"context_line":"]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_2189ceeb","line":84,"in_reply_to":"AAAAXH%2F%2F%2Fjs%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 Red Hat, Inc."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_6eb54d7d","side":"PARENT","line":1,"updated":"2014-06-17 16:41:13.000000000","message":"this wouldn\u0027t really belong here","commit_id":"03a1531d6bcb9eafed6dee831d8f953984c9c9a3"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"                       \"remote mac and IPs and improve tunnel scalability\")),"},{"line_number":82,"context_line":"    cfg.BoolOpt(\u0027arp_responder\u0027, default\u003dFalse,"},{"line_number":83,"context_line":"                help\u003d_(\"Enable local ARP responder if it is supported\")),"},{"line_number":84,"context_line":"    cfg.BoolOpt(\u0027enable_distributed_routing\u0027, default\u003dFalse,"},{"line_number":85,"context_line":"                help\u003d_(\"Make the l2 agent run in dvr mode \")),"},{"line_number":86,"context_line":"]"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_ae7595cd","line":84,"updated":"2014-06-17 16:41:13.000000000","message":"do we really need to rely on this to figure this out?","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                       \"remote mac and IPs and improve tunnel scalability\")),"},{"line_number":82,"context_line":"    cfg.BoolOpt(\u0027arp_responder\u0027, default\u003dFalse,"},{"line_number":83,"context_line":"                help\u003d_(\"Enable local ARP responder if it is supported\")),"},{"line_number":84,"context_line":"    cfg.BoolOpt(\u0027enable_distributed_routing\u0027, default\u003dFalse,"},{"line_number":85,"context_line":"                help\u003d_(\"Make the l2 agent run in dvr mode \")),"},{"line_number":86,"context_line":"]"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_dbfecaae","line":84,"in_reply_to":"1ae5cdf2_ae7595cd","updated":"2014-06-19 11:57:20.000000000","message":"can\u0027t get this comment.  i have handled the same way l2_population is read from the file (or defaulted as above).","commit_id":"0c391d0af24395387409a7a61e911d883013119c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2012 Red Hat, Inc."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ae5cdf2_8adabc1b","line":1,"updated":"2014-06-23 18:42:07.000000000","message":"Please don\u0027t change this as part of this patch.","commit_id":"49dde31bfc8824586d19c98b14bd016b037ceaf7"}],"neutron/plugins/openvswitch/common/constants.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4f8d103a552ad4f28bab253b076243845facd3fa","unresolved":false,"context_lines":[{"line_number":44,"context_line":"DVR_TO_SRC_MAC \u003d 1"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"# Various tables for tunneling flows"},{"line_number":47,"context_line":"DVR_PROCESS \u003d 1"},{"line_number":48,"context_line":"PATCH_LV_TO_TUN \u003d 2"},{"line_number":49,"context_line":"GRE_TUN_TO_LV \u003d 3"},{"line_number":50,"context_line":"VXLAN_TUN_TO_LV \u003d 4"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F%2Fdk%3D","line":47,"updated":"2014-04-16 01:50:15.000000000","message":"Shouldn\u0027t you add new values with new numbers and not renumber the existing ones here?","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":44,"context_line":"DVR_TO_SRC_MAC \u003d 1"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"# Various tables for tunneling flows"},{"line_number":47,"context_line":"DVR_PROCESS \u003d 1"},{"line_number":48,"context_line":"PATCH_LV_TO_TUN \u003d 2"},{"line_number":49,"context_line":"GRE_TUN_TO_LV \u003d 3"},{"line_number":50,"context_line":"VXLAN_TUN_TO_LV \u003d 4"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_a174fefd","line":47,"in_reply_to":"AAAAXH%2F%2F%2Fdk%3D","updated":"2014-05-01 00:01:29.000000000","message":"Brian,\r\n\r\nThe DVR needs to intercept packets, transform it and send it to the same pipeline in place.  As a result we had to renumber existing tables accordingly.","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"unresolved":false,"context_lines":[{"line_number":59,"context_line":"# The default respawn interval for the ovsdb monitor"},{"line_number":60,"context_line":"DEFAULT_OVSDBMON_RESPAWN \u003d 30"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"# Represent invalid OF Port"},{"line_number":63,"context_line":"OFPORT_INVALID \u003d -1"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_155f74e6","line":62,"updated":"2014-05-28 23:34:07.000000000","message":"nit: s/Represent/Represents","commit_id":"11fae8e37bf4067fc619c6ef576b2e8ef2dc4d4b"}],"neutron/tests/unit/ofagent/test_ofa_neutron_agent.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"unresolved":false,"context_lines":[{"line_number":791,"context_line":"                                               ofp.OFPVID_PRESENT),"},{"line_number":792,"context_line":"                    ]),"},{"line_number":793,"context_line":"                ofpp.OFPInstructionGotoTable("},{"line_number":794,"context_line":"                    table_id\u003dconstants.LEARN_FROM_TUN),"},{"line_number":795,"context_line":"            ],"},{"line_number":796,"context_line":"            match\u003dofpp.OFPMatch(tunnel_id\u003d3),"},{"line_number":797,"context_line":"            priority\u003d1,"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_58ca806e","line":794,"updated":"2014-07-21 21:01:03.000000000","message":"this should not change as it\u0027s unrelated to this patch","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":791,"context_line":"                                               ofp.OFPVID_PRESENT),"},{"line_number":792,"context_line":"                    ]),"},{"line_number":793,"context_line":"                ofpp.OFPInstructionGotoTable("},{"line_number":794,"context_line":"                    table_id\u003dconstants.LEARN_FROM_TUN),"},{"line_number":795,"context_line":"            ],"},{"line_number":796,"context_line":"            match\u003dofpp.OFPMatch(tunnel_id\u003d3),"},{"line_number":797,"context_line":"            priority\u003d1,"}],"source_content_type":"text/x-python","patch_set":42,"id":"baada198_bec9a87a","line":794,"in_reply_to":"baada198_58ca806e","updated":"2014-07-22 07:26:41.000000000","message":"This change is required because table numbers got updated with DVR in place. It is better to use table constants in openvswitch/constants.py rather than direct table numbers and these are the only two such places in this file.","commit_id":"e5048aaa5405cff7ede794dbf1f93c78f21e2a67"}],"neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e7a25039632eef953927512a0595bb158d6461bd","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                              return_value\u003d{\u0027host\u0027: \u0027cn1\u0027, \u0027mac_address\u0027 : \u0027aa:bb:cc:dd:ee:ff\u0027}),"},{"line_number":178,"context_line":"                mock.patch.object(self.agent.int_br, \u0027add_flow\u0027),"},{"line_number":179,"context_line":"                mock.patch.object(self.agent.tun_br, \u0027add_flow\u0027),"},{"line_number":180,"context_line":"                mock.patch.object(self.agent.int_br, \u0027remove_all_flows\u0027),                                 "},{"line_number":181,"context_line":"                mock.patch.object(self.agent.plugin_rpc, \u0027get_dvr_mac_address\u0027, "},{"line_number":182,"context_line":"                                  return_value\u003d[{\u0027host\u0027 : \u0027cn1\u0027 , \u0027mac_address\u0027 : \u0027aa:bb:cc:dd:ee:ff\u0027},"},{"line_number":183,"context_line":"                                                {\u0027host\u0027 : \u0027cn2\u0027 , \u0027mac_address\u0027 : \u002711:22:33:44:55:66\u0027}])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAW3%2F%2FRCM%3D","line":180,"updated":"2014-04-15 17:12:59.000000000","message":"whitespace: Run pep8 before pushing you code","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                              return_value\u003d{\u0027host\u0027: \u0027cn1\u0027, \u0027mac_address\u0027 : \u0027aa:bb:cc:dd:ee:ff\u0027}),"},{"line_number":178,"context_line":"                mock.patch.object(self.agent.int_br, \u0027add_flow\u0027),"},{"line_number":179,"context_line":"                mock.patch.object(self.agent.tun_br, \u0027add_flow\u0027),"},{"line_number":180,"context_line":"                mock.patch.object(self.agent.int_br, \u0027remove_all_flows\u0027),                                 "},{"line_number":181,"context_line":"                mock.patch.object(self.agent.plugin_rpc, \u0027get_dvr_mac_address\u0027, "},{"line_number":182,"context_line":"                                  return_value\u003d[{\u0027host\u0027 : \u0027cn1\u0027 , \u0027mac_address\u0027 : \u0027aa:bb:cc:dd:ee:ff\u0027},"},{"line_number":183,"context_line":"                                                {\u0027host\u0027 : \u0027cn2\u0027 , \u0027mac_address\u0027 : \u002711:22:33:44:55:66\u0027}])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_c1602238","line":180,"in_reply_to":"AAAAW3%2F%2FRCM%3D","updated":"2014-05-01 00:01:29.000000000","message":"Done","commit_id":"abf98571c9cce4d474a05822948c4b81739687f6"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"unresolved":false,"context_lines":[{"line_number":90,"context_line":"        cfg.CONF.set_override(\u0027enable_distributed_routing\u0027, True,"},{"line_number":91,"context_line":"                              group\u003d\u0027AGENT\u0027)"},{"line_number":92,"context_line":"        cfgmap \u003d ovs_neutron_agent.create_agent_config_map(cfg.CONF)"},{"line_number":93,"context_line":"        self.assertEqual(cfgmap[\u0027enable_distributed_routing\u0027], True)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"class TestOvsNeutronAgent(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_9b525e65","line":93,"updated":"2014-06-05 08:46:17.000000000","message":"self.assertTrue(cfgmap[\u0027enable_distributed_routing\u0027])","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        cfg.CONF.set_override(\u0027enable_distributed_routing\u0027, True,"},{"line_number":91,"context_line":"                              group\u003d\u0027AGENT\u0027)"},{"line_number":92,"context_line":"        cfgmap \u003d ovs_neutron_agent.create_agent_config_map(cfg.CONF)"},{"line_number":93,"context_line":"        self.assertEqual(cfgmap[\u0027enable_distributed_routing\u0027], True)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"class TestOvsNeutronAgent(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_c876593f","line":93,"in_reply_to":"1ae5cdf2_9b525e65","updated":"2014-06-10 05:49:18.000000000","message":"will do.","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"unresolved":false,"context_lines":[{"line_number":322,"context_line":"        self.agent.enable_distributed_routing \u003d True"},{"line_number":323,"context_line":"        self.agent.enable_tunneling \u003d True"},{"line_number":324,"context_line":"        self.agent.local_dvr_map \u003d {}"},{"line_number":325,"context_line":"        self.agent.local_ports \u003d {}"},{"line_number":326,"context_line":"        self.agent.local_vlan_map \u003d {}"},{"line_number":327,"context_line":"        self.agent.patch_tun_ofport \u003d 1"},{"line_number":328,"context_line":"        self.agent.dvr_mac_address \u003d \u0027aa:bb:cc:dd:ee:ff\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_1bf56e56","line":325,"updated":"2014-06-05 08:46:17.000000000","message":"A lot of this setup code seems to be repeated. Can you move it into a helper function that these can call?","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":9361,"name":"Vivekanandan Narasimhan","email":"n.vivekanandan@ericsson.com","username":"viveknarasimhan"},"change_message_id":"3cb95338d498402b7ac016a213be28739e47cd47","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        self.agent.enable_distributed_routing \u003d True"},{"line_number":323,"context_line":"        self.agent.enable_tunneling \u003d True"},{"line_number":324,"context_line":"        self.agent.local_dvr_map \u003d {}"},{"line_number":325,"context_line":"        self.agent.local_ports \u003d {}"},{"line_number":326,"context_line":"        self.agent.local_vlan_map \u003d {}"},{"line_number":327,"context_line":"        self.agent.patch_tun_ofport \u003d 1"},{"line_number":328,"context_line":"        self.agent.dvr_mac_address \u003d \u0027aa:bb:cc:dd:ee:ff\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_288fbd24","line":325,"in_reply_to":"1ae5cdf2_1bf56e56","updated":"2014-06-10 05:49:18.000000000","message":"Yes, will try refactoring this to common method (atleast the setting up of self.agent variables).","commit_id":"cec693b48aacc1b9052606e237b493dd2d80794e"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"unresolved":false,"context_lines":[{"line_number":160,"context_line":"        ) as (set_ovs_db_func, get_ovs_db_func, delete_flows_func):"},{"line_number":161,"context_line":"            self.agent.port_bound(port, net_uuid, \u0027local\u0027, None, None,"},{"line_number":162,"context_line":"                                  fixed_ips,"},{"line_number":163,"context_line":"                                  \"compute:None\")"},{"line_number":164,"context_line":"        get_ovs_db_func.assert_called_once_with(\"Port\", mock.ANY, \"tag\")"},{"line_number":165,"context_line":"        if new_local_vlan !\u003d old_local_vlan:"},{"line_number":166,"context_line":"            set_ovs_db_func.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_25b7c987","line":163,"updated":"2014-06-10 18:29:29.000000000","message":"The value passed for ovs_restarted (False) was lost in conflict resolution.","commit_id":"a9a776b09fff24f345e49e4dace033488ca63024"}]}
