)]}'
{"etc/dhcp_agent.ini":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"#  specific host routes to the DHCP request.  The metadata service will only"},{"line_number":36,"context_line":"#  be activated when the subnet gateway_ip is None.  The guest instance must"},{"line_number":37,"context_line":"#  be configured to request host routes via DHCP (Option 121)."},{"line_number":38,"context_line":"# enable_isolated_metadata \u003d False"},{"line_number":39,"context_line":"# Allows for serving metadata requests coming from a dedicated metadata"},{"line_number":40,"context_line":"# access network whose cidr is 169.254.169.254/16 (or larger prefix), and"},{"line_number":41,"context_line":"# is connectected to a Quantum router from which the VMs send metadata"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B1mQ%3D","line":38,"updated":"2013-02-18 02:53:48.000000000","message":"space","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"#  specific host routes to the DHCP request.  The metadata service will only"},{"line_number":36,"context_line":"#  be activated when the subnet gateway_ip is None.  The guest instance must"},{"line_number":37,"context_line":"#  be configured to request host routes via DHCP (Option 121)."},{"line_number":38,"context_line":"# enable_isolated_metadata \u003d False"},{"line_number":39,"context_line":"# Allows for serving metadata requests coming from a dedicated metadata"},{"line_number":40,"context_line":"# access network whose cidr is 169.254.169.254/16 (or larger prefix), and"},{"line_number":41,"context_line":"# is connectected to a Quantum router from which the VMs send metadata"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B1KQ%3D","line":38,"in_reply_to":"AAAAM3%2F%2B1mQ%3D","updated":"2013-02-18 09:49:09.000000000","message":"right. I think that actually the issue with lines 33-37 having two of them.\n\nI will sort this out anyway","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":37,"context_line":"#  be configured to request host routes via DHCP (Option 121)."},{"line_number":38,"context_line":"# enable_isolated_metadata \u003d False"},{"line_number":39,"context_line":"# Allows for serving metadata requests coming from a dedicated metadata"},{"line_number":40,"context_line":"# access network whose cidr is 169.254.169.254/16 (or larger prefix), and"},{"line_number":41,"context_line":"# is connectected to a Quantum router from which the VMs send metadata"},{"line_number":42,"context_line":"# request. This option requires enable_isolated_metadata \u003d True"},{"line_number":43,"context_line":"# enable_metadata_network \u003d False"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B1mI%3D","line":40,"updated":"2013-02-18 02:53:48.000000000","message":"is there a reason it needs to be a /16?  I don\u0027t see a reason we have to use the entire link-local space here.  I guess may its just that there isn\u0027t a good reason not to?","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":37,"context_line":"#  be configured to request host routes via DHCP (Option 121)."},{"line_number":38,"context_line":"# enable_isolated_metadata \u003d False"},{"line_number":39,"context_line":"# Allows for serving metadata requests coming from a dedicated metadata"},{"line_number":40,"context_line":"# access network whose cidr is 169.254.169.254/16 (or larger prefix), and"},{"line_number":41,"context_line":"# is connectected to a Quantum router from which the VMs send metadata"},{"line_number":42,"context_line":"# request. This option requires enable_isolated_metadata \u003d True"},{"line_number":43,"context_line":"# enable_metadata_network \u003d False"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B1KA%3D","line":40,"in_reply_to":"AAAAM3%2F%2B1mI%3D","updated":"2013-02-18 09:49:09.000000000","message":"No we don\u0027t have to. I started with this by default as that\u0027s what it is used in the dhcp agent for non-routed metadata access.\n\nI can review this with Mark.","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":39,"context_line":"# Allows for serving metadata requests coming from a dedicated metadata"},{"line_number":40,"context_line":"# access network whose cidr is 169.254.169.254/16 (or larger prefix), and"},{"line_number":41,"context_line":"# is connectected to a Quantum router from which the VMs send metadata"},{"line_number":42,"context_line":"# request. This option requires enable_isolated_metadata \u003d True"},{"line_number":43,"context_line":"# enable_metadata_network \u003d False"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B1mE%3D","line":42,"updated":"2013-02-18 02:53:48.000000000","message":"it may not be clear to people why this is useful.  I think it predominantly comes down to the fact that enable_isolated_metadata assumes that VMs support dhcp option 121?","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":39,"context_line":"# Allows for serving metadata requests coming from a dedicated metadata"},{"line_number":40,"context_line":"# access network whose cidr is 169.254.169.254/16 (or larger prefix), and"},{"line_number":41,"context_line":"# is connectected to a Quantum router from which the VMs send metadata"},{"line_number":42,"context_line":"# request. This option requires enable_isolated_metadata \u003d True"},{"line_number":43,"context_line":"# enable_metadata_network \u003d False"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B1J8%3D","line":42,"in_reply_to":"AAAAM3%2F%2B1mE%3D","updated":"2013-02-18 09:49:09.000000000","message":"I wanted to keep it short in the config file. I can add some more details, but the full story should definitely be in the admin guide","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"}],"etc/quantum/plugins/nicira/nvp.ini":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"ac91c355375084da4b1a4d79002d8023a457dbda","unresolved":false,"context_lines":[{"line_number":34,"context_line":"# default_cluster_name \u003d"},{"line_number":35,"context_line":"# The following flag enables the creation of a dedicated connection"},{"line_number":36,"context_line":"# to the metadata proxy for metadata server access via Quantum router"},{"line_number":37,"context_line":"enable_metadata_access_network \u003d True"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"#[CLUSTER:example]"},{"line_number":40,"context_line":"# This is uuid of the default NVP Transport zone that will be used for"}],"source_content_type":"text/x-properties","patch_set":4,"id":"AAAAM3%2F%2B3dE%3D","line":37,"updated":"2013-02-16 00:57:08.000000000","message":"nit: should we comment this out side the default value is set to true in config for nvp?","commit_id":"8c6cce71bf2fafa6eea44b08c7a1364dc2c7427a"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"# default_cluster_name \u003d"},{"line_number":35,"context_line":"# The following flag enables the creation of a dedicated connection"},{"line_number":36,"context_line":"# to the metadata proxy for metadata server access via Quantum router"},{"line_number":37,"context_line":"enable_metadata_access_network \u003d True"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"#[CLUSTER:example]"},{"line_number":40,"context_line":"# This is uuid of the default NVP Transport zone that will be used for"}],"source_content_type":"text/x-properties","patch_set":4,"id":"AAAAM3%2F%2B3Ec%3D","line":37,"in_reply_to":"AAAAM3%2F%2B3dE%3D","updated":"2013-02-16 09:21:02.000000000","message":"right. forgot to do that.","commit_id":"8c6cce71bf2fafa6eea44b08c7a1364dc2c7427a"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":"# to be injected into instances. The metadata server will be reached"},{"line_number":5,"context_line":"# via the dhcp server."},{"line_number":6,"context_line":"metadata_dhcp_host_route \u003d False"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"[DATABASE]"},{"line_number":9,"context_line":"# This line MUST be changed to actually run the plugin."},{"line_number":10,"context_line":"# Example:"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B1mA%3D","side":"PARENT","line":7,"updated":"2013-02-18 02:53:48.000000000","message":"in the commit message, I might also mention that it removes support for NVP injecting metadata host route, since that functionality is now built into dhcp-agent.","commit_id":"a7837e5f90ff2ee2d8d28ffd59754965d86f65f8"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":"# to be injected into instances. The metadata server will be reached"},{"line_number":5,"context_line":"# via the dhcp server."},{"line_number":6,"context_line":"metadata_dhcp_host_route \u003d False"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"[DATABASE]"},{"line_number":9,"context_line":"# This line MUST be changed to actually run the plugin."},{"line_number":10,"context_line":"# Example:"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B1Jw%3D","side":"PARENT","line":7,"in_reply_to":"AAAAM3%2F%2B1mA%3D","updated":"2013-02-18 09:49:09.000000000","message":"Done","commit_id":"a7837e5f90ff2ee2d8d28ffd59754965d86f65f8"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"# default_cluster_name \u003d"},{"line_number":35,"context_line":"# The following flag enables the creation of a dedicated connection"},{"line_number":36,"context_line":"# to the metadata proxy for metadata server access via Quantum router"},{"line_number":37,"context_line":"# enable_metadata_access_network \u003d True"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"#[CLUSTER:example]"},{"line_number":40,"context_line":"# This is uuid of the default NVP Transport zone that will be used for"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B1lc%3D","line":37,"updated":"2013-02-18 02:53:48.000000000","message":"kind of unfortunately that enabling this functionality requires tweaking settings in two different places, but i can\u0027t think of an obvious alternative.","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"# default_cluster_name \u003d"},{"line_number":35,"context_line":"# The following flag enables the creation of a dedicated connection"},{"line_number":36,"context_line":"# to the metadata proxy for metadata server access via Quantum router"},{"line_number":37,"context_line":"# enable_metadata_access_network \u003d True"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"#[CLUSTER:example]"},{"line_number":40,"context_line":"# This is uuid of the default NVP Transport zone that will be used for"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B1Jo%3D","line":37,"in_reply_to":"AAAAM3%2F%2B1lc%3D","updated":"2013-02-18 09:49:09.000000000","message":"I thought there might be cases when you don\u0027t want to do this, so I added this option.\nIt\u0027s enabled by default anyway.","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"}],"quantum/agent/dhcp_agent.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":264,"context_line":"        # or all the networks connected via a router"},{"line_number":265,"context_line":"        # to the one passed as a parameter"},{"line_number":266,"context_line":"        quantum_lookup_param \u003d \u0027--network_id\u003d%s\u0027 % network.id"},{"line_number":267,"context_line":"        if (self.conf.enable_metadata_network and has_metadata_subnet()):"},{"line_number":268,"context_line":"            router_ports \u003d [port for port in network.ports"},{"line_number":269,"context_line":"                            if (port.device_owner \u003d\u003d"},{"line_number":270,"context_line":"                                constants.DEVICE_OWNER_ROUTER_INTF)]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2uM%3D","line":267,"updated":"2013-02-16 21:09:32.000000000","message":"Not sure an inner method buys you anything.  Also, the default is /16 a bigger net would not be valid according to the link-local RFC. Consider:\n\nhas_metadata_subnet \u003d any(netaddr.IPNetwork(s.cidr) in netaddr.IPNetwork(METADATA_DEFAULT_IP) for s in network.subnets)\n\nif self.conf.enable_metadata_network and has_metadata_subnet:","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":264,"context_line":"        # or all the networks connected via a router"},{"line_number":265,"context_line":"        # to the one passed as a parameter"},{"line_number":266,"context_line":"        quantum_lookup_param \u003d \u0027--network_id\u003d%s\u0027 % network.id"},{"line_number":267,"context_line":"        if (self.conf.enable_metadata_network and has_metadata_subnet()):"},{"line_number":268,"context_line":"            router_ports \u003d [port for port in network.ports"},{"line_number":269,"context_line":"                            if (port.device_owner \u003d\u003d"},{"line_number":270,"context_line":"                                constants.DEVICE_OWNER_ROUTER_INTF)]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1wk%3D","line":267,"in_reply_to":"AAAAM3%2F%2B2uM%3D","updated":"2013-02-17 23:40:33.000000000","message":"The inner method does not buy anything if not some readability. I agree your solution is much easier than looking at the supernet of the subnet cidr. I should have thought about it before.","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":270,"context_line":"                                constants.DEVICE_OWNER_ROUTER_INTF)]"},{"line_number":271,"context_line":"            if router_ports:"},{"line_number":272,"context_line":"                # Multiple router ports are not possible in this scenario"},{"line_number":273,"context_line":"                # as this would cause overlapping cidrs on the network"},{"line_number":274,"context_line":"                quantum_lookup_param \u003d (\u0027--router_id\u003d%s\u0027 %"},{"line_number":275,"context_line":"                                        router_ports[0].device_id)"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1lA%3D","line":273,"updated":"2013-02-18 02:53:48.000000000","message":"technically, there could be multiple routers connected to a network though, right?","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":270,"context_line":"                                constants.DEVICE_OWNER_ROUTER_INTF)]"},{"line_number":271,"context_line":"            if router_ports:"},{"line_number":272,"context_line":"                # Multiple router ports are not possible in this scenario"},{"line_number":273,"context_line":"                # as this would cause overlapping cidrs on the network"},{"line_number":274,"context_line":"                quantum_lookup_param \u003d (\u0027--router_id\u003d%s\u0027 %"},{"line_number":275,"context_line":"                                        router_ports[0].device_id)"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B09M%3D","line":273,"in_reply_to":"AAAAM3%2F%2B1JI%3D","updated":"2013-02-18 13:33:07.000000000","message":"Actually I am thinking this is a situation we would like to avoid. If we use the same metadata access network for multiple routers, we have to keep in mind that VMs with the same IP addresses might be connected to these routers. \nThe metadata agent will then struggle finding the appropriate device_id.","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":270,"context_line":"                                constants.DEVICE_OWNER_ROUTER_INTF)]"},{"line_number":271,"context_line":"            if router_ports:"},{"line_number":272,"context_line":"                # Multiple router ports are not possible in this scenario"},{"line_number":273,"context_line":"                # as this would cause overlapping cidrs on the network"},{"line_number":274,"context_line":"                quantum_lookup_param \u003d (\u0027--router_id\u003d%s\u0027 %"},{"line_number":275,"context_line":"                                        router_ports[0].device_id)"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1JI%3D","line":273,"in_reply_to":"AAAAM3%2F%2B1lA%3D","updated":"2013-02-18 09:49:09.000000000","message":"I think this is technically correct. And we might even be able to spawn a metadata proxy for each connected router.\nI will a TODO for this.\nIn the case we found multiple ports, should we raise or log at the moment?","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":535,"context_line":"                                         namespace)"},{"line_number":536,"context_line":"                # Only 1 subnet on metadata access network"},{"line_number":537,"context_line":"                gateway_ip \u003d metadata_subnets[0].gateway_ip"},{"line_number":538,"context_line":"                device.route.add_gateway(gateway_ip)"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        return interface_name"},{"line_number":541,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2By0M%3D","line":538,"updated":"2013-02-19 03:29:12.000000000","message":"I am getting an error here if I restart my DHCP server, since the route already exists.  I think this is really more of a bug in the ip_lib though, not this patch: \n\nantum/agent/dhcp_agent.py\", line 538, in setup\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent     device.route.add_gateway(gateway_ip)\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent   File \"/opt/stack/quantum/quantum/agent/linux/ip_lib.py\", line 304, in add_gateway\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent     self._as_root(*args)\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent   File \"/opt/stack/quantum/quantum/agent/linux/ip_lib.py\", line 160, in _as_root\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent     kwargs.get(\u0027use_root_namespace\u0027, False))\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent   File \"/opt/stack/quantum/quantum/agent/linux/ip_lib.py\", line 47, in _as_root\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent     namespace)\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent   File \"/opt/stack/quantum/quantum/agent/linux/ip_lib.py\", line 58, in _execute\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent     root_helper\u003droot_helper)\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent   File \"/opt/stack/quantum/quantum/agent/linux/utils.py\", line 60, in execute\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent     raise RuntimeError(m)\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent RuntimeError:\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent Command: [\u0027sudo\u0027, \u0027/usr/local/bin/quantum-rootwrap\u0027, \u0027/etc/quantum/rootwrap.conf\u0027, \u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, \u0027qdhcp-562f78f3-c9a8-43c4-b8e5-5fee1414c9ed\u0027, \u0027ip\u0027, \u0027route\u0027, \u0027add\u0027, \u0027default\u0027, \u0027via\u0027, \u0027169.254.169.253\u0027, \u0027dev\u0027, \u0027tap52bd9baf-89\u0027]\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent Exit code: 2\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent Stdout: \u0027\u0027\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent Stderr: \u0027RTNETLINK answers: File exists\\n\u0027\n2013-02-18 18:32:39.964 10421 TRACE quantum.agent.dhcp_agent","commit_id":"24c77966b6449257c2bfa87419aafc3bb5f3c287"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":535,"context_line":"                                         namespace)"},{"line_number":536,"context_line":"                # Only 1 subnet on metadata access network"},{"line_number":537,"context_line":"                gateway_ip \u003d metadata_subnets[0].gateway_ip"},{"line_number":538,"context_line":"                device.route.add_gateway(gateway_ip)"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        return interface_name"},{"line_number":541,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2ByZo%3D","line":538,"in_reply_to":"AAAAM3%2F%2By0M%3D","updated":"2013-02-19 07:48:36.000000000","message":"Interesting. I think it\u0027s more of an error in this patch instead. We should check for the route. It\u0027s an easy fix though.","commit_id":"24c77966b6449257c2bfa87419aafc3bb5f3c287"}],"quantum/agent/linux/external_process.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"ac91c355375084da4b1a4d79002d8023a457dbda","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def enable(self, cmd_callback):"},{"line_number":49,"context_line":"        if not self.active:"},{"line_number":50,"context_line":"            cmd \u003d cmd_callback(self.get_pid_file_name(ensure_pids_dir\u003dTrue))"},{"line_number":51,"context_line":"            if self.namespace:"},{"line_number":52,"context_line":"                ip_wrapper \u003d ip_lib.IPWrapper(self.root_helper, self.namespace)"},{"line_number":53,"context_line":"                ip_wrapper.netns.execute(cmd)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B3dQ%3D","line":50,"updated":"2013-02-16 00:57:08.000000000","message":"oops","commit_id":"8c6cce71bf2fafa6eea44b08c7a1364dc2c7427a"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def enable(self, cmd_callback):"},{"line_number":49,"context_line":"        if not self.active:"},{"line_number":50,"context_line":"            cmd \u003d cmd_callback(self.get_pid_file_name(ensure_pids_dir\u003dTrue))"},{"line_number":51,"context_line":"            if self.namespace:"},{"line_number":52,"context_line":"                ip_wrapper \u003d ip_lib.IPWrapper(self.root_helper, self.namespace)"},{"line_number":53,"context_line":"                ip_wrapper.netns.execute(cmd)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B3EY%3D","line":50,"in_reply_to":"AAAAM3%2F%2B3dQ%3D","updated":"2013-02-16 09:21:02.000000000","message":"oh noes!","commit_id":"8c6cce71bf2fafa6eea44b08c7a1364dc2c7427a"}],"quantum/plugins/nicira/nicira_nvp_plugin/QuantumPlugin.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":1460,"context_line":"                    source_ip_addresses\u003dsubnet[\u0027cidr\u0027])"},{"line_number":1461,"context_line":""},{"line_number":1462,"context_line":"        # Ensure the NVP logical router has a connection to a \u0027metadata access\u0027"},{"line_number":1463,"context_line":"        # network (with a proxy listening on its DHCP port)"},{"line_number":1464,"context_line":"        self._handle_metadata_access_network(context, router_id)"},{"line_number":1465,"context_line":"        LOG.debug(_(\"Add_router_interface completed for subnet:%(subnet_id)s \""},{"line_number":1466,"context_line":"                    \"and router:%(router_id)s\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1k8%3D","line":1463,"updated":"2013-02-18 02:53:48.000000000","message":"if needed","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":1460,"context_line":"                    source_ip_addresses\u003dsubnet[\u0027cidr\u0027])"},{"line_number":1461,"context_line":""},{"line_number":1462,"context_line":"        # Ensure the NVP logical router has a connection to a \u0027metadata access\u0027"},{"line_number":1463,"context_line":"        # network (with a proxy listening on its DHCP port)"},{"line_number":1464,"context_line":"        self._handle_metadata_access_network(context, router_id)"},{"line_number":1465,"context_line":"        LOG.debug(_(\"Add_router_interface completed for subnet:%(subnet_id)s \""},{"line_number":1466,"context_line":"                    \"and router:%(router_id)s\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1JE%3D","line":1463,"in_reply_to":"AAAAM3%2F%2B1k8%3D","updated":"2013-02-18 09:49:09.000000000","message":"Done","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"}],"quantum/plugins/nicira/nicira_nvp_plugin/common/config.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"core_opts \u003d ["},{"line_number":21,"context_line":"    cfg.BoolOpt(\u0027metadata_dhcp_host_route\u0027, default\u003dFalse),"},{"line_number":22,"context_line":"]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"nvp_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1k4%3D","side":"PARENT","line":21,"updated":"2013-02-18 02:53:48.000000000","message":"are there any backward compat things we need to consider here? like warning if they specify this field?","commit_id":"a7837e5f90ff2ee2d8d28ffd59754965d86f65f8"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"core_opts \u003d ["},{"line_number":21,"context_line":"    cfg.BoolOpt(\u0027metadata_dhcp_host_route\u0027, default\u003dFalse),"},{"line_number":22,"context_line":"]"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"nvp_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1I4%3D","side":"PARENT","line":21,"in_reply_to":"AAAAM3%2F%2B1k4%3D","updated":"2013-02-18 09:49:09.000000000","message":"Good point. We need to handle deprecation for this option or raise appropriately.\n\nAs I have another patch that deals with deprecation of options in review, I\u0027m not sure what the right approach should be.\n\nI think I\u0027m going to leave this option (with a FIXME) so app won\u0027t raise at startup, and the a LOG.error if this options is  set to True.","commit_id":"a7837e5f90ff2ee2d8d28ffd59754965d86f65f8"}],"quantum/plugins/nicira/nicira_nvp_plugin/common/metadata_access.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"916a563a81f34b032da6c7f12448c823599c0cfd","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            # Add router interface"},{"line_number":71,"context_line":"            meta_iface_info \u003d self.add_router_interface("},{"line_number":72,"context_line":"                ctx_elevated, router_id, {\u0027subnet_id\u0027: meta_sub[\u0027id\u0027]})"},{"line_number":73,"context_line":"            # Record the metadata port for the router"},{"line_number":74,"context_line":"            nicira_db.set_router_metadata_port_mapping("},{"line_number":75,"context_line":"                ctx_elevated.session, router_id, meta_iface_info[\u0027port_id\u0027])"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7hw%3D","line":73,"updated":"2013-02-14 02:00:33.000000000","message":"I feel dumb when I see this stuff.\nBut sometimes it help to see your code on a different screen :)","commit_id":"624f14d4f8ccd081a4b181469633cba174b85867"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"class NvpMetadataAccess(object):"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _find_metadata_port(self, context, ports):"},{"line_number":44,"context_line":"        for port in ports or []:"},{"line_number":45,"context_line":"            for fixed_ip in port[\u0027fixed_ips\u0027]:"},{"line_number":46,"context_line":"                cidr \u003d netaddr.IPNetwork("},{"line_number":47,"context_line":"                    self.get_subnet(context, fixed_ip[\u0027subnet_id\u0027])[\u0027cidr\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1kk%3D","line":44,"updated":"2013-02-18 02:53:48.000000000","message":"is it cleaner to have caller ensure that ports is non-None, given that we control all callers?","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"class NvpMetadataAccess(object):"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _find_metadata_port(self, context, ports):"},{"line_number":44,"context_line":"        for port in ports or []:"},{"line_number":45,"context_line":"            for fixed_ip in port[\u0027fixed_ips\u0027]:"},{"line_number":46,"context_line":"                cidr \u003d netaddr.IPNetwork("},{"line_number":47,"context_line":"                    self.get_subnet(context, fixed_ip[\u0027subnet_id\u0027])[\u0027cidr\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1Is%3D","line":44,"in_reply_to":"AAAAM3%2F%2B1kk%3D","updated":"2013-02-18 09:49:09.000000000","message":"I did it in this way because I am a sworn enemy of the if statement.\n\nStill I will have to take your comment because in this case this approach has a flaw :)","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":"                cidr \u003d netaddr.IPNetwork("},{"line_number":47,"context_line":"                    self.get_subnet(context, fixed_ip[\u0027subnet_id\u0027])[\u0027cidr\u0027])"},{"line_number":48,"context_line":"                super_cidr \u003d netaddr.IPNetwork(METADATA_SUBNET_CIDR)"},{"line_number":49,"context_line":"                if (cidr \u003d\u003d super_cidr or super_cidr in"},{"line_number":50,"context_line":"                    cidr.supernet(METADATA_DEFAULT_PREFIX)):"},{"line_number":51,"context_line":"                    return port"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2t8%3D","line":49,"updated":"2013-02-16 21:09:32.000000000","message":"These are the same:\nif cidr in netaddr.IPNetwork(METADATA_SUBNET_CIDR):\n    return port","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":"                cidr \u003d netaddr.IPNetwork("},{"line_number":47,"context_line":"                    self.get_subnet(context, fixed_ip[\u0027subnet_id\u0027])[\u0027cidr\u0027])"},{"line_number":48,"context_line":"                super_cidr \u003d netaddr.IPNetwork(METADATA_SUBNET_CIDR)"},{"line_number":49,"context_line":"                if (cidr \u003d\u003d super_cidr or super_cidr in"},{"line_number":50,"context_line":"                    cidr.supernet(METADATA_DEFAULT_PREFIX)):"},{"line_number":51,"context_line":"                    return port"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1wg%3D","line":49,"in_reply_to":"AAAAM3%2F%2B2t8%3D","updated":"2013-02-17 23:40:33.000000000","message":"Done","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"                        \u0027tenant_id\u0027: \u0027\u0027,  # intentionally not set"},{"line_number":63,"context_line":"                        \u0027admin_state_up\u0027: True,"},{"line_number":64,"context_line":"                        \u0027shared\u0027: False,"},{"line_number":65,"context_line":"                        \u0027port_security_enabled\u0027: True,"},{"line_number":66,"context_line":"                        \u0027status\u0027: constants.NET_STATUS_ACTIVE}"},{"line_number":67,"context_line":"            meta_net \u003d self.create_network(ctx_elevated,"},{"line_number":68,"context_line":"                                           {\u0027network\u0027: net_data})"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1kU%3D","line":65,"updated":"2013-02-18 02:53:48.000000000","message":"maybe worth a comment on why this is the case.","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"                        \u0027tenant_id\u0027: \u0027\u0027,  # intentionally not set"},{"line_number":63,"context_line":"                        \u0027admin_state_up\u0027: True,"},{"line_number":64,"context_line":"                        \u0027shared\u0027: False,"},{"line_number":65,"context_line":"                        \u0027port_security_enabled\u0027: True,"},{"line_number":66,"context_line":"                        \u0027status\u0027: constants.NET_STATUS_ACTIVE}"},{"line_number":67,"context_line":"            meta_net \u003d self.create_network(ctx_elevated,"},{"line_number":68,"context_line":"                                           {\u0027network\u0027: net_data})"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1Ig%3D","line":65,"in_reply_to":"AAAAM3%2F%2B1kU%3D","updated":"2013-02-18 09:49:09.000000000","message":"Actually I don\u0027t think anti-spoof buys us anything here.","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":76,"context_line":"                           \u0027enable_dhcp\u0027: True,"},{"line_number":77,"context_line":"                           \u0027allocation_pools\u0027: attributes.ATTR_NOT_SPECIFIED,"},{"line_number":78,"context_line":"                           \u0027gateway_ip\u0027: METADATA_GATEWAY_IP,"},{"line_number":79,"context_line":"                           \u0027dns_nameservers\u0027: attributes.ATTR_NOT_SPECIFIED,"},{"line_number":80,"context_line":"                           \u0027host_routes\u0027: attributes.ATTR_NOT_SPECIFIED}"},{"line_number":81,"context_line":"            meta_sub \u003d self.create_subnet(ctx_elevated,"},{"line_number":82,"context_line":"                                          {\u0027subnet\u0027: subnet_data})"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1kI%3D","line":79,"updated":"2013-02-18 02:53:48.000000000","message":"maybe explicitly have [], rather than default?","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":76,"context_line":"                           \u0027enable_dhcp\u0027: True,"},{"line_number":77,"context_line":"                           \u0027allocation_pools\u0027: attributes.ATTR_NOT_SPECIFIED,"},{"line_number":78,"context_line":"                           \u0027gateway_ip\u0027: METADATA_GATEWAY_IP,"},{"line_number":79,"context_line":"                           \u0027dns_nameservers\u0027: attributes.ATTR_NOT_SPECIFIED,"},{"line_number":80,"context_line":"                           \u0027host_routes\u0027: attributes.ATTR_NOT_SPECIFIED}"},{"line_number":81,"context_line":"            meta_sub \u003d self.create_subnet(ctx_elevated,"},{"line_number":82,"context_line":"                                          {\u0027subnet\u0027: subnet_data})"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1Ic%3D","line":79,"in_reply_to":"AAAAM3%2F%2B1kI%3D","updated":"2013-02-18 09:49:09.000000000","message":"Done","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":132,"context_line":"                        # The only port left if the metadata port"},{"line_number":133,"context_line":"                        self._destroy_metadata_access_network(context,"},{"line_number":134,"context_line":"                                                              router_id,"},{"line_number":135,"context_line":"                                                              ports)"},{"line_number":136,"context_line":"            # TODO(salvatore-orlando): A better exception handling in the"},{"line_number":137,"context_line":"            # NVP plugin would allow us to improve error handling here"},{"line_number":138,"context_line":"            except (q_exc.QuantumException, nvp_exc.NvpPluginException,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1jY%3D","line":135,"updated":"2013-02-18 02:53:48.000000000","message":"this logic reads a little oddly, since it never handles the case where there are zero ports.  But after looking at the quantum plugin, it seems like that is because handle_metadata_access_network is called after the port is added on \"port-add\", but is called before the port is deleted in \"port-remove\", is that correct?","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":132,"context_line":"                        # The only port left if the metadata port"},{"line_number":133,"context_line":"                        self._destroy_metadata_access_network(context,"},{"line_number":134,"context_line":"                                                              router_id,"},{"line_number":135,"context_line":"                                                              ports)"},{"line_number":136,"context_line":"            # TODO(salvatore-orlando): A better exception handling in the"},{"line_number":137,"context_line":"            # NVP plugin would allow us to improve error handling here"},{"line_number":138,"context_line":"            except (q_exc.QuantumException, nvp_exc.NvpPluginException,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1IU%3D","line":135,"in_reply_to":"AAAAM3%2F%2B1jY%3D","updated":"2013-02-18 09:49:09.000000000","message":"Indeed.\nLet\u0027s say that, by construction, this function can\u0027t be called if you do not have ports.\n\nAnd even if we then change the logic and for some reason this function is called when you do not have anymore router ports, we won\u0027t be able to find and destroy the metadata network anyway. (and the only thing I could do here is LOG that something weird is probably going on)","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"}],"quantum/tests/unit/nicira/test_defaults.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 Nicira Networks, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1IQ%3D","side":"PARENT","line":1,"updated":"2013-02-18 09:49:09.000000000","message":"Gerrit says you had a comment here. But I can\u0027t see it.","commit_id":"a7837e5f90ff2ee2d8d28ffd59754965d86f65f8"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.assertEqual(2, cfg.CONF.DATABASE.reconnect_interval)"},{"line_number":27,"context_line":"        self.assertEqual(64, cfg.CONF.NVP.max_lp_per_bridged_ls)"},{"line_number":28,"context_line":"        self.assertEqual(256, cfg.CONF.NVP.max_lp_per_overlay_ls)"},{"line_number":29,"context_line":"        self.assertEqual(5, cfg.CONF.NVP.concurrent_connections)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1jU%3D","side":"PARENT","line":29,"updated":"2013-02-18 02:53:48.000000000","message":"not sure how this relates to this change.... should it be mentioned in the commit message?","commit_id":"a7837e5f90ff2ee2d8d28ffd59754965d86f65f8"}],"quantum/tests/unit/nicira/test_nicira_plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import contextlib"},{"line_number":17,"context_line":"import json"},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2t0%3D","line":17,"updated":"2013-02-16 21:09:32.000000000","message":"unused import","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import contextlib"},{"line_number":17,"context_line":"import json"},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1wc%3D","line":17,"in_reply_to":"AAAAM3%2F%2B2t0%3D","updated":"2013-02-17 23:40:33.000000000","message":"thanks for spotting it","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"}],"quantum/tests/unit/test_dhcp_agent.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import socket"},{"line_number":20,"context_line":"import sys"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2ts%3D","line":17,"updated":"2013-02-16 21:09:32.000000000","message":"unused import","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import socket"},{"line_number":20,"context_line":"import sys"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1wY%3D","line":17,"in_reply_to":"AAAAM3%2F%2B2ts%3D","updated":"2013-02-17 23:40:33.000000000","message":"yeah I added it to do some checks and then forgot to remove it.","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"}],"quantum/tests/unit/test_l3_plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":518,"context_line":"                body \u003d self._show(\u0027ports\u0027, r_port_id,"},{"line_number":519,"context_line":"                                  expected_code\u003dexc.HTTPNotFound.code)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"                self.assertEqual(len(test_notifier.NOTIFICATIONS),"},{"line_number":522,"context_line":"                                 len(exp_notifications))"},{"line_number":523,"context_line":"                self.assertEqual("},{"line_number":524,"context_line":"                    set(n[\u0027event_type\u0027] for n in test_notifier.NOTIFICATIONS),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2to%3D","line":521,"updated":"2013-02-16 21:09:32.000000000","message":"Since you\u0027re comparing the contents of the set in line 523 this seems redundant.","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":518,"context_line":"                body \u003d self._show(\u0027ports\u0027, r_port_id,"},{"line_number":519,"context_line":"                                  expected_code\u003dexc.HTTPNotFound.code)"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"                self.assertEqual(len(test_notifier.NOTIFICATIONS),"},{"line_number":522,"context_line":"                                 len(exp_notifications))"},{"line_number":523,"context_line":"                self.assertEqual("},{"line_number":524,"context_line":"                    set(n[\u0027event_type\u0027] for n in test_notifier.NOTIFICATIONS),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1wU%3D","line":521,"in_reply_to":"AAAAM3%2F%2B2to%3D","updated":"2013-02-17 23:40:33.000000000","message":"totally agree. I take your comment as a permission to change the existing code\u0027s logic.","commit_id":"0aa012f4557ef178ebc81b89e80e4f3b0be67ed5"}]}
