)]}'
{"nova/network/neutronv2/api.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"95e2c224f1996707db6cb126fc7610b055233913","unresolved":false,"context_lines":[{"line_number":603,"context_line":""},{"line_number":604,"context_line":"        :param context: The request context."},{"line_number":605,"context_line":"        :param instance: nova.objects.instance.Instance object."},{"line_number":606,"context_line":"        :param ordered_networks: list of objects.NetworkRequest"},{"line_number":607,"context_line":"        :param nets: a dict of network_id to networks returned from neutron"},{"line_number":608,"context_line":"        :param security_group_ids: a list of security_groups to go to neutron"},{"line_number":609,"context_line":"            e.g. [{\u0027opt_name\u0027: \u0027tftp-server\u0027, \u0027opt_value\u0027: \u00271.2.3.4\u0027}]"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_86337461","line":606,"updated":"2016-06-30 17:20:28.000000000","message":"ordered by what? uuid?","commit_id":"716eeba927dc8f7d48c9f6a6879b2bc688815bdd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"97e1c2fb2427fcbdb87abddf88b216b4c6146479","unresolved":false,"context_lines":[{"line_number":603,"context_line":""},{"line_number":604,"context_line":"        :param context: The request context."},{"line_number":605,"context_line":"        :param instance: nova.objects.instance.Instance object."},{"line_number":606,"context_line":"        :param ordered_networks: list of objects.NetworkRequest"},{"line_number":607,"context_line":"        :param nets: a dict of network_id to networks returned from neutron"},{"line_number":608,"context_line":"        :param security_group_ids: a list of security_groups to go to neutron"},{"line_number":609,"context_line":"            e.g. [{\u0027opt_name\u0027: \u0027tftp-server\u0027, \u0027opt_value\u0027: \u00271.2.3.4\u0027}]"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_a68670b6","line":606,"in_reply_to":"3aaa91ec_86337461","updated":"2016-06-30 17:25:56.000000000","message":"All of the ordered stuff in here is \"ordered by requested order\" because this whole mess depends on that.","commit_id":"716eeba927dc8f7d48c9f6a6879b2bc688815bdd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fdcfc8037519d7e403324fddacbb137a4e059d75","unresolved":false,"context_lines":[{"line_number":603,"context_line":""},{"line_number":604,"context_line":"        :param context: The request context."},{"line_number":605,"context_line":"        :param instance: nova.objects.instance.Instance object."},{"line_number":606,"context_line":"        :param ordered_networks: list of objects.NetworkRequest"},{"line_number":607,"context_line":"        :param nets: a dict of network_id to networks returned from neutron"},{"line_number":608,"context_line":"        :param security_group_ids: a list of security_groups to go to neutron"},{"line_number":609,"context_line":"            e.g. [{\u0027opt_name\u0027: \u0027tftp-server\u0027, \u0027opt_value\u0027: \u00271.2.3.4\u0027}]"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_4a097130","line":606,"in_reply_to":"3aaa91ec_a68670b6","updated":"2016-07-01 09:05:31.000000000","message":"yeah, its requested order, I should add that.","commit_id":"716eeba927dc8f7d48c9f6a6879b2bc688815bdd"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"95e2c224f1996707db6cb126fc7610b055233913","unresolved":false,"context_lines":[{"line_number":606,"context_line":"        :param ordered_networks: list of objects.NetworkRequest"},{"line_number":607,"context_line":"        :param nets: a dict of network_id to networks returned from neutron"},{"line_number":608,"context_line":"        :param security_group_ids: a list of security_groups to go to neutron"},{"line_number":609,"context_line":"            e.g. [{\u0027opt_name\u0027: \u0027tftp-server\u0027, \u0027opt_value\u0027: \u00271.2.3.4\u0027}]"},{"line_number":610,"context_line":"        :returns a list of pairs (NetworkRequest, created_port_uuid)"},{"line_number":611,"context_line":"        \"\"\""},{"line_number":612,"context_line":"        created_port_ids \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_66364852","line":609,"updated":"2016-06-30 17:20:28.000000000","message":"The above e.g. line doesn\u0027t seem to match the description of the param, which says it\u0027s a list of security groups (and the name of the param seems to indicate that it should be a list of *IDs*). What is opt_name and opt_value?","commit_id":"716eeba927dc8f7d48c9f6a6879b2bc688815bdd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fdcfc8037519d7e403324fddacbb137a4e059d75","unresolved":false,"context_lines":[{"line_number":606,"context_line":"        :param ordered_networks: list of objects.NetworkRequest"},{"line_number":607,"context_line":"        :param nets: a dict of network_id to networks returned from neutron"},{"line_number":608,"context_line":"        :param security_group_ids: a list of security_groups to go to neutron"},{"line_number":609,"context_line":"            e.g. [{\u0027opt_name\u0027: \u0027tftp-server\u0027, \u0027opt_value\u0027: \u00271.2.3.4\u0027}]"},{"line_number":610,"context_line":"        :returns a list of pairs (NetworkRequest, created_port_uuid)"},{"line_number":611,"context_line":"        \"\"\""},{"line_number":612,"context_line":"        created_port_ids \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_6d15673e","line":609,"in_reply_to":"3aaa91ec_66364852","updated":"2016-07-01 09:05:31.000000000","message":"whoops, thats the dhcp opts that are not here any more. bad merge conflict resolution.","commit_id":"716eeba927dc8f7d48c9f6a6879b2bc688815bdd"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"95e2c224f1996707db6cb126fc7610b055233913","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                    # create minimal port, if port not already created by user"},{"line_number":638,"context_line":"                    created_port \u003d self._create_port_minimal("},{"line_number":639,"context_line":"                            neutron, instance, request.network_id,"},{"line_number":640,"context_line":"                            request.address, security_group_ids)"},{"line_number":641,"context_line":"                    created_port_id \u003d created_port[\u0027id\u0027]"},{"line_number":642,"context_line":"                    created_port_ids.append(created_port_id)"},{"line_number":643,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_c641fcaa","line":640,"updated":"2016-06-30 17:20:28.000000000","message":"I recognize this is just the existing code so not -1\u0027ing for this, but if _create_port_minimal() can raise any exception at all, we should be trapping for those exceptions here.","commit_id":"716eeba927dc8f7d48c9f6a6879b2bc688815bdd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"dd9db26c31f73669b330cd6ddc53564322a1441a","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                    # create minimal port, if port not already created by user"},{"line_number":638,"context_line":"                    created_port \u003d self._create_port_minimal("},{"line_number":639,"context_line":"                            neutron, instance, request.network_id,"},{"line_number":640,"context_line":"                            request.address, security_group_ids)"},{"line_number":641,"context_line":"                    created_port_id \u003d created_port[\u0027id\u0027]"},{"line_number":642,"context_line":"                    created_port_ids.append(created_port_id)"},{"line_number":643,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_737ee419","line":640,"in_reply_to":"3aaa91ec_0d582330","updated":"2016-07-01 09:41:22.000000000","message":"dam, there is a bug here, we should delete all ports if we hit SecurityGroupCannotBeApplied","commit_id":"716eeba927dc8f7d48c9f6a6879b2bc688815bdd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"09a825e376b77290e65086e6eea408129feca796","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                    # create minimal port, if port not already created by user"},{"line_number":638,"context_line":"                    created_port \u003d self._create_port_minimal("},{"line_number":639,"context_line":"                            neutron, instance, request.network_id,"},{"line_number":640,"context_line":"                            request.address, security_group_ids)"},{"line_number":641,"context_line":"                    created_port_id \u003d created_port[\u0027id\u0027]"},{"line_number":642,"context_line":"                    created_port_ids.append(created_port_id)"},{"line_number":643,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_7e44eb45","line":640,"in_reply_to":"3aaa91ec_737ee419","updated":"2016-07-01 09:42:35.000000000","message":"heh, its an existing bug, and would cause us to leak ports...","commit_id":"716eeba927dc8f7d48c9f6a6879b2bc688815bdd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fdcfc8037519d7e403324fddacbb137a4e059d75","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                    # create minimal port, if port not already created by user"},{"line_number":638,"context_line":"                    created_port \u003d self._create_port_minimal("},{"line_number":639,"context_line":"                            neutron, instance, request.network_id,"},{"line_number":640,"context_line":"                            request.address, security_group_ids)"},{"line_number":641,"context_line":"                    created_port_id \u003d created_port[\u0027id\u0027]"},{"line_number":642,"context_line":"                    created_port_ids.append(created_port_id)"},{"line_number":643,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_0d582330","line":640,"in_reply_to":"3aaa91ec_c641fcaa","updated":"2016-07-01 09:05:31.000000000","message":"yeah, we waits until line 647 to do that, and delete up the ports","commit_id":"716eeba927dc8f7d48c9f6a6879b2bc688815bdd"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"334dc5c7c85b257a27b7a36bc23a8cfd92bfb74c","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        :param instance: nova.objects.instance.Instance object."},{"line_number":606,"context_line":"        :param ordered_networks: objects.NetworkRequestList in requested order"},{"line_number":607,"context_line":"        :param nets: a dict of network_id to networks returned from neutron"},{"line_number":608,"context_line":"        :param security_group_ids: a list of security_groups to go to neutron"},{"line_number":609,"context_line":"        :returns a list of pairs (NetworkRequest, created_port_uuid)"},{"line_number":610,"context_line":"        \"\"\""},{"line_number":611,"context_line":"        created_port_ids \u003d []"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_d5a16e48","line":608,"updated":"2016-07-01 14:11:24.000000000","message":"This is missing a description for \u0027neutron\u0027. I\u0027m guessing that\u0027s neutronclient?","commit_id":"cdf3ee867e9ce721cb6d28568aa46d7d5a32462f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5840e0ea8422608cac4bbe404d28ebc65b21fe8a","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        :param instance: nova.objects.instance.Instance object."},{"line_number":606,"context_line":"        :param ordered_networks: objects.NetworkRequestList in requested order"},{"line_number":607,"context_line":"        :param nets: a dict of network_id to networks returned from neutron"},{"line_number":608,"context_line":"        :param security_group_ids: a list of security_groups to go to neutron"},{"line_number":609,"context_line":"        :returns a list of pairs (NetworkRequest, created_port_uuid)"},{"line_number":610,"context_line":"        \"\"\""},{"line_number":611,"context_line":"        created_port_ids \u003d []"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_934c1bca","line":608,"in_reply_to":"3aaa91ec_d5a16e48","updated":"2016-07-01 15:35:30.000000000","message":"oops, yes it is.","commit_id":"cdf3ee867e9ce721cb6d28568aa46d7d5a32462f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c7e0f1d3a6d9d79bbb821a65c93ff70ca6fe156c","unresolved":false,"context_lines":[{"line_number":694,"context_line":"            LOG.debug(\"No network configured\", instance\u003dinstance)"},{"line_number":695,"context_line":"            return network_model.NetworkInfo([])"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"        #"},{"line_number":698,"context_line":"        # Create any ports that might be required,"},{"line_number":699,"context_line":"        # after validating requested security groups"},{"line_number":700,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_db3d1fdf","line":697,"updated":"2016-07-01 14:50:16.000000000","message":"femto-nits: generally, the Nova codebase doesn\u0027t have the blank before and after comment lines.","commit_id":"cdf3ee867e9ce721cb6d28568aa46d7d5a32462f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5840e0ea8422608cac4bbe404d28ebc65b21fe8a","unresolved":false,"context_lines":[{"line_number":694,"context_line":"            LOG.debug(\"No network configured\", instance\u003dinstance)"},{"line_number":695,"context_line":"            return network_model.NetworkInfo([])"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"        #"},{"line_number":698,"context_line":"        # Create any ports that might be required,"},{"line_number":699,"context_line":"        # after validating requested security groups"},{"line_number":700,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_b362f73b","line":697,"in_reply_to":"3aaa91ec_db3d1fdf","updated":"2016-07-01 15:35:30.000000000","message":"Yeah, it was just to space this out into bigger groups, its probably overkill now this has shrunk in size","commit_id":"cdf3ee867e9ce721cb6d28568aa46d7d5a32462f"}],"nova/tests/unit/network/test_neutronv2.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"95e2c224f1996707db6cb126fc7610b055233913","unresolved":false,"context_lines":[{"line_number":445,"context_line":"            ordered_networks, fixed_ips, nets)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        has_portbinding \u003d self._stub_allocate_for_instance_port_binding("},{"line_number":448,"context_line":"            api, kwargs.get(\u0027portbinding\u0027), has_dns_extension)"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        preexisting_port_ids \u003d []"},{"line_number":451,"context_line":"        ports_in_requested_net_order \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_462d0cfd","line":448,"updated":"2016-06-30 17:20:28.000000000","message":"This _stub_allocate_for_instance() method in this test case class is the root of all test evil. Simply horrible... I feel your pain here.","commit_id":"716eeba927dc8f7d48c9f6a6879b2bc688815bdd"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"95e2c224f1996707db6cb126fc7610b055233913","unresolved":false,"context_lines":[{"line_number":4575,"context_line":"            self.context, self.instance,"},{"line_number":4576,"context_line":"            ordered_networks, nets, mock_client, [uuids.sg])"},{"line_number":4577,"context_line":""},{"line_number":4578,"context_line":"        self.assertFalse(mock_client.create_port.called)"},{"line_number":4579,"context_line":""},{"line_number":4580,"context_line":""},{"line_number":4581,"context_line":"class TestNeutronv2NeutronHostnameDNS(TestNeutronv2Base):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_2630c055","line":4578,"updated":"2016-06-30 17:20:28.000000000","message":"Excellent unit test additions for the create ports helper function. ++","commit_id":"716eeba927dc8f7d48c9f6a6879b2bc688815bdd"}]}
