)]}'
{"neutron/plugins/nicira/common/exceptions.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def __init__(self, **kwargs):"},{"line_number":91,"context_line":"        super(PortConfigurationError, self).__init__(**kwargs)"},{"line_number":92,"context_line":"        self.port_id \u003d kwargs.get(\u0027port_id\u0027)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class LsnNotFound(q_exc.NotFound):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FB20%3D","line":92,"updated":"2013-11-15 14:18:55.000000000","message":"is the constructor really necessary?","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"ea2ab9bb435ecdb2beaacd40d3c40f8bbcc1b7b7","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def __init__(self, **kwargs):"},{"line_number":91,"context_line":"        super(PortConfigurationError, self).__init__(**kwargs)"},{"line_number":92,"context_line":"        self.port_id \u003d kwargs.get(\u0027port_id\u0027)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class LsnNotFound(q_exc.NotFound):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FALw%3D","line":92,"in_reply_to":"AAAATn%2F%2FAo0%3D","updated":"2013-11-15 21:21:32.000000000","message":"no wrries then.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def __init__(self, **kwargs):"},{"line_number":91,"context_line":"        super(PortConfigurationError, self).__init__(**kwargs)"},{"line_number":92,"context_line":"        self.port_id \u003d kwargs.get(\u0027port_id\u0027)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class LsnNotFound(q_exc.NotFound):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAo0%3D","line":92,"in_reply_to":"AAAATn%2F%2FB20%3D","updated":"2013-11-15 19:37:00.000000000","message":"how else would I set the port_id attribute on the exception object? I cannot see how this would work without. Enlighten me maestro.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"}],"neutron/plugins/nicira/dhcp_meta/nvp.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"da007d15f953874c5864be769e57c620266dda1c","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"dhcp_opts \u003d ["},{"line_number":34,"context_line":"    cfg.ListOpt(\u0027extra_domain_name_servers\u0027,"},{"line_number":35,"context_line":"                default\u003dNone,"},{"line_number":36,"context_line":"                help\u003d_(\u0027Comma separated list of additional \u0027"},{"line_number":37,"context_line":"                       \u0027domain name servers\u0027)),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027domain_name\u0027,"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2Fczg%3D","line":35,"updated":"2013-10-16 01:25:04.000000000","message":"nit: default \u003d []","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7ff25ca6c4c70591573274a891f4ce713c8b687d","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"dhcp_opts \u003d ["},{"line_number":34,"context_line":"    cfg.ListOpt(\u0027extra_domain_name_servers\u0027,"},{"line_number":35,"context_line":"                default\u003dNone,"},{"line_number":36,"context_line":"                help\u003d_(\u0027Comma separated list of additional \u0027"},{"line_number":37,"context_line":"                       \u0027domain name servers\u0027)),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027domain_name\u0027,"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2FcWc%3D","line":35,"in_reply_to":"AAAATH%2F%2Fczg%3D","updated":"2013-10-16 04:14:16.000000000","message":"None seemed more appropriate","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"da007d15f953874c5864be769e57c620266dda1c","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        if ports:"},{"line_number":120,"context_line":"            # This will end up calling handle_port_dhcp_access"},{"line_number":121,"context_line":"            # down below"},{"line_number":122,"context_line":"            self.plugin.delete_port(context, ports[0][\u0027id\u0027])"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"def check_services_requirements(cluster):"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2Fcy4%3D","line":122,"updated":"2013-10-16 01:25:04.000000000","message":"should we iterate on ports here? I guess there will only ever be one right?","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7ff25ca6c4c70591573274a891f4ce713c8b687d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        if ports:"},{"line_number":120,"context_line":"            # This will end up calling handle_port_dhcp_access"},{"line_number":121,"context_line":"            # down below"},{"line_number":122,"context_line":"            self.plugin.delete_port(context, ports[0][\u0027id\u0027])"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"def check_services_requirements(cluster):"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2FcWY%3D","line":122,"in_reply_to":"AAAATH%2F%2Fcy4%3D","updated":"2013-10-16 04:14:16.000000000","message":"There cannot be more than one. If there is, something is seriously wrong with the whole framework.","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from neutron.common import exceptions as n_exc"},{"line_number":24,"context_line":"from neutron.db import db_base_plugin_v2"},{"line_number":25,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":26,"context_line":"from neutron.plugins.nicira.common import exceptions as p_exc"},{"line_number":27,"context_line":"from neutron.plugins.nicira.nsxlib import lsn as lsn_api"},{"line_number":28,"context_line":"from neutron.plugins.nicira import nvplib"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FB64%3D","line":26,"updated":"2013-11-15 14:18:55.000000000","message":"I\u0027ve been using nsx_exc in other modules.\nI\u0027m happy with p_exc too - let\u0027s just agree on a name.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from neutron.common import exceptions as n_exc"},{"line_number":24,"context_line":"from neutron.db import db_base_plugin_v2"},{"line_number":25,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":26,"context_line":"from neutron.plugins.nicira.common import exceptions as p_exc"},{"line_number":27,"context_line":"from neutron.plugins.nicira.nsxlib import lsn as lsn_api"},{"line_number":28,"context_line":"from neutron.plugins.nicira import nvplib"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAns%3D","line":26,"in_reply_to":"AAAATn%2F%2FB64%3D","updated":"2013-11-15 19:37:00.000000000","message":"p_exc is more compact and I\u0027ve been following this convention:\n\n- p_exc: Plugin Exception\n- n_exc: Neutron Exception\n- d_exc: Database Exception","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"dhcp_opts \u003d ["},{"line_number":35,"context_line":"    cfg.ListOpt(\u0027extra_domain_name_servers\u0027,"},{"line_number":36,"context_line":"                default\u003dNone,"},{"line_number":37,"context_line":"                help\u003d_(\u0027Comma separated list of additional \u0027"},{"line_number":38,"context_line":"                       \u0027domain name servers\u0027)),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027domain_name\u0027,"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FB5c%3D","line":36,"updated":"2013-11-15 14:18:55.000000000","message":"just wondering why not defaulting to empty list","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"dhcp_opts \u003d ["},{"line_number":35,"context_line":"    cfg.ListOpt(\u0027extra_domain_name_servers\u0027,"},{"line_number":36,"context_line":"                default\u003dNone,"},{"line_number":37,"context_line":"                help\u003d_(\u0027Comma separated list of additional \u0027"},{"line_number":38,"context_line":"                       \u0027domain name servers\u0027)),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027domain_name\u0027,"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAnU%3D","line":36,"in_reply_to":"AAAATn%2F%2FB5c%3D","updated":"2013-11-15 19:37:00.000000000","message":"can do","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"               help\u003d_(\u0027Domain to use for building the hostnames\u0027)),"},{"line_number":42,"context_line":"    cfg.IntOpt(\u0027default_lease_time\u0027, default\u003d43200,"},{"line_number":43,"context_line":"               help\u003d_(\"Default DHCP lease time\")),"},{"line_number":44,"context_line":"]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def register_dhcp_opts(config):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FB5E%3D","line":44,"updated":"2013-11-15 14:18:55.000000000","message":"I kind of see your reason for putting the options here.\nThe tradeoff between all options in a single module and options in the module where they belong are clear.\n\nIf we choose to set options in the relevant modules, I am fine with it. We\u0027ll need however to move out some options out of common/config.py","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"ea2ab9bb435ecdb2beaacd40d3c40f8bbcc1b7b7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"               help\u003d_(\u0027Domain to use for building the hostnames\u0027)),"},{"line_number":42,"context_line":"    cfg.IntOpt(\u0027default_lease_time\u0027, default\u003d43200,"},{"line_number":43,"context_line":"               help\u003d_(\"Default DHCP lease time\")),"},{"line_number":44,"context_line":"]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def register_dhcp_opts(config):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FALk%3D","line":44,"in_reply_to":"AAAATn%2F%2FAnA%3D","updated":"2013-11-15 21:21:32.000000000","message":"If that belong to this patch, I\u0027d have put a -1 on it.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":41,"context_line":"               help\u003d_(\u0027Domain to use for building the hostnames\u0027)),"},{"line_number":42,"context_line":"    cfg.IntOpt(\u0027default_lease_time\u0027, default\u003d43200,"},{"line_number":43,"context_line":"               help\u003d_(\"Default DHCP lease time\")),"},{"line_number":44,"context_line":"]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def register_dhcp_opts(config):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAnA%3D","line":44,"in_reply_to":"AAAATn%2F%2FB5E%3D","updated":"2013-11-15 19:37:00.000000000","message":"that doesn\u0027t belong to this patch, though, does it?","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    def lsn_get(self, context, network_id, raise_on_err\u003dTrue):"},{"line_number":62,"context_line":"        \"\"\"Retrieve the LSN id associated to the network.\"\"\""},{"line_number":63,"context_line":"        try:"},{"line_number":64,"context_line":"            return lsn_api.lsn_for_network_get(self.cluster, network_id)"},{"line_number":65,"context_line":"        except (n_exc.NotFound, nvplib.NvpApiClient.NvpApiException):"},{"line_number":66,"context_line":"            logger \u003d raise_on_err and LOG.error or LOG.warn"},{"line_number":67,"context_line":"            logger(_(\u0027Unable to find Logical Service Node for \u0027"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FB28%3D","line":64,"updated":"2013-11-15 14:18:55.000000000","message":"Is there a way for reducing round trips with the backend storing network/lsn_port mappings?","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    def lsn_get(self, context, network_id, raise_on_err\u003dTrue):"},{"line_number":62,"context_line":"        \"\"\"Retrieve the LSN id associated to the network.\"\"\""},{"line_number":63,"context_line":"        try:"},{"line_number":64,"context_line":"            return lsn_api.lsn_for_network_get(self.cluster, network_id)"},{"line_number":65,"context_line":"        except (n_exc.NotFound, nvplib.NvpApiClient.NvpApiException):"},{"line_number":66,"context_line":"            logger \u003d raise_on_err and LOG.error or LOG.warn"},{"line_number":67,"context_line":"            logger(_(\u0027Unable to find Logical Service Node for \u0027"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAm4%3D","line":64,"in_reply_to":"AAAATn%2F%2FB28%3D","updated":"2013-11-15 19:37:00.000000000","message":"yes: see https://review.openstack.org/#/c/51325/","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except (n_exc.NotFound, nvplib.NvpApiClient.NvpApiException):"},{"line_number":153,"context_line":"            LOG.warn(_(\u0027Unable to delete LSN Port %s\u0027), lsn_port_id)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def lsn_port_dispose(self, context, network_id, mac_address):"},{"line_number":156,"context_line":"        \"\"\"Delete a LSN port given the network and the mac address.\"\"\""},{"line_number":157,"context_line":"        lsn_id, lsn_port_id \u003d self.lsn_port_get_by_mac("},{"line_number":158,"context_line":"            context, network_id, mac_address, raise_on_err\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FB6A%3D","line":155,"updated":"2013-11-15 14:18:55.000000000","message":"just curious why deletion by mac address is considered a \u0027dispose\u0027 action","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"ea2ab9bb435ecdb2beaacd40d3c40f8bbcc1b7b7","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except (n_exc.NotFound, nvplib.NvpApiClient.NvpApiException):"},{"line_number":153,"context_line":"            LOG.warn(_(\u0027Unable to delete LSN Port %s\u0027), lsn_port_id)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def lsn_port_dispose(self, context, network_id, mac_address):"},{"line_number":156,"context_line":"        \"\"\"Delete a LSN port given the network and the mac address.\"\"\""},{"line_number":157,"context_line":"        lsn_id, lsn_port_id \u003d self.lsn_port_get_by_mac("},{"line_number":158,"context_line":"            context, network_id, mac_address, raise_on_err\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FALY%3D","line":155,"in_reply_to":"AAAATn%2F%2FAmQ%3D","updated":"2013-11-15 21:21:32.000000000","message":"no worries then, there\u0027s the docstring anyway.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except (n_exc.NotFound, nvplib.NvpApiClient.NvpApiException):"},{"line_number":153,"context_line":"            LOG.warn(_(\u0027Unable to delete LSN Port %s\u0027), lsn_port_id)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def lsn_port_dispose(self, context, network_id, mac_address):"},{"line_number":156,"context_line":"        \"\"\"Delete a LSN port given the network and the mac address.\"\"\""},{"line_number":157,"context_line":"        lsn_id, lsn_port_id \u003d self.lsn_port_get_by_mac("},{"line_number":158,"context_line":"            context, network_id, mac_address, raise_on_err\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAmQ%3D","line":155,"in_reply_to":"AAAATn%2F%2FB6A%3D","updated":"2013-11-15 19:37:00.000000000","message":"because Python doesn\u0027t let me overload a method with the same name and same list of arguments. I could\u0027ve called them delete_by_mac and delete_by_id, but that felt ugly.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        except (n_exc.NotFound, p_exc.NvpPluginException):"},{"line_number":172,"context_line":"            raise p_exc.PortConfigurationError("},{"line_number":173,"context_line":"                net_id\u003dnetwork_id, lsn_id\u003dlsn_id, port_id\u003dport_id)"},{"line_number":174,"context_line":"        else:"},{"line_number":175,"context_line":"            try:"},{"line_number":176,"context_line":"                lsn_api.lsn_port_plug_network("},{"line_number":177,"context_line":"                    self.cluster, lsn_id, lsn_port_id, lswitch_port_id)"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FB5w%3D","line":174,"updated":"2013-11-15 14:18:55.000000000","message":"as you\u0027re raising in the except block perhaps the above else is unnecessary.\n\nMy personal opinion is that it does not improve readability. But it\u0027s just an opinion.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"ea2ab9bb435ecdb2beaacd40d3c40f8bbcc1b7b7","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        except (n_exc.NotFound, p_exc.NvpPluginException):"},{"line_number":172,"context_line":"            raise p_exc.PortConfigurationError("},{"line_number":173,"context_line":"                net_id\u003dnetwork_id, lsn_id\u003dlsn_id, port_id\u003dport_id)"},{"line_number":174,"context_line":"        else:"},{"line_number":175,"context_line":"            try:"},{"line_number":176,"context_line":"                lsn_api.lsn_port_plug_network("},{"line_number":177,"context_line":"                    self.cluster, lsn_id, lsn_port_id, lswitch_port_id)"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FALQ%3D","line":174,"in_reply_to":"AAAATn%2F%2FAks%3D","updated":"2013-11-15 21:21:32.000000000","message":"If something which is not one of the exception handled at line 171 is hit, and is therefore a bug, that would raise and the control flow be suspended anyway, I think.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        except (n_exc.NotFound, p_exc.NvpPluginException):"},{"line_number":172,"context_line":"            raise p_exc.PortConfigurationError("},{"line_number":173,"context_line":"                net_id\u003dnetwork_id, lsn_id\u003dlsn_id, port_id\u003dport_id)"},{"line_number":174,"context_line":"        else:"},{"line_number":175,"context_line":"            try:"},{"line_number":176,"context_line":"                lsn_api.lsn_port_plug_network("},{"line_number":177,"context_line":"                    self.cluster, lsn_id, lsn_port_id, lswitch_port_id)"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAks%3D","line":174,"in_reply_to":"AAAATn%2F%2FB5w%3D","updated":"2013-11-15 19:37:00.000000000","message":"It\u0027s not about readability, it\u0027s about handling errors that you expect, everything else should be considered a bug. I\u0027ll look into that and try to simplify.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                context, network_id, subnet[\u0027id\u0027])"},{"line_number":289,"context_line":"            self.lsn_manager.lsn_port_dhcp_configure("},{"line_number":290,"context_line":"                context, lsn_id, lsn_port_id, subnet)"},{"line_number":291,"context_line":"        except p_exc.LsnPortNotFound:"},{"line_number":292,"context_line":"            # It\u0027s possible that the subnet was created with dhcp off;"},{"line_number":293,"context_line":"            # check that a dhcp port exists first and provision it"},{"line_number":294,"context_line":"            # accordingly"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FB1s%3D","line":291,"updated":"2013-11-15 14:18:55.000000000","message":"I am not sure about the workflow when a subnet update action instead disables the dhcp.\nShould the DHCP port be removed?\n\nAlso, when a subnet with dhcp disabled is updated, and the dhcp stays disable, is this code creating the DHCP port anyway.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                context, network_id, subnet[\u0027id\u0027])"},{"line_number":289,"context_line":"            self.lsn_manager.lsn_port_dhcp_configure("},{"line_number":290,"context_line":"                context, lsn_id, lsn_port_id, subnet)"},{"line_number":291,"context_line":"        except p_exc.LsnPortNotFound:"},{"line_number":292,"context_line":"            # It\u0027s possible that the subnet was created with dhcp off;"},{"line_number":293,"context_line":"            # check that a dhcp port exists first and provision it"},{"line_number":294,"context_line":"            # accordingly"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAj0%3D","line":291,"in_reply_to":"AAAATn%2F%2FB1s%3D","updated":"2013-11-15 19:37:00.000000000","message":"answer #1: the port is not deleted because it may be used for providing access to the LSN\u0027s metadata service. See: https://review.openstack.org/#/c/49415/\n\nanswer #2: nope. Even though line 302 seems to imply that with dhcp off the port gets created, line 254 ensure that it isn\u0027t","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        if ports:"},{"line_number":313,"context_line":"            # This will end up calling handle_port_dhcp_access"},{"line_number":314,"context_line":"            # down below"},{"line_number":315,"context_line":"            self.plugin.delete_port(context, ports[0][\u0027id\u0027])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"def check_services_requirements(cluster):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FB1I%3D","line":315,"updated":"2013-11-15 14:18:55.000000000","message":"There is also something not very clear to me in this workflow too. when a subnet is deleted, I thought the DHCP port was removed as part of the normal delete process.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"ea2ab9bb435ecdb2beaacd40d3c40f8bbcc1b7b7","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        if ports:"},{"line_number":313,"context_line":"            # This will end up calling handle_port_dhcp_access"},{"line_number":314,"context_line":"            # down below"},{"line_number":315,"context_line":"            self.plugin.delete_port(context, ports[0][\u0027id\u0027])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"def check_services_requirements(cluster):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FALE%3D","line":315,"in_reply_to":"AAAATn%2F%2FAic%3D","updated":"2013-11-15 21:21:32.000000000","message":"ok, I was confused with network delete.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        if ports:"},{"line_number":313,"context_line":"            # This will end up calling handle_port_dhcp_access"},{"line_number":314,"context_line":"            # down below"},{"line_number":315,"context_line":"            self.plugin.delete_port(context, ports[0][\u0027id\u0027])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"def check_services_requirements(cluster):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAic%3D","line":315,"in_reply_to":"AAAATn%2F%2FB1I%3D","updated":"2013-11-15 19:37:00.000000000","message":"If you recall how dhcp works under the agent model, on subnet deletion the port gets deleted by the dhcp agent; since there\u0027s no agent anymore, the port must be deleted by the server.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":364,"context_line":"    elif port[\"device_owner\"] !\u003d const.DEVICE_OWNER_DHCP:"},{"line_number":365,"context_line":"        if port.get(\"fixed_ips\"):"},{"line_number":366,"context_line":"            # do something only if there are IP\u0027s and dhcp is enabled"},{"line_number":367,"context_line":"            subnet_id \u003d port[\"fixed_ips\"][0][\u0027subnet_id\u0027]"},{"line_number":368,"context_line":"            if not plugin.get_subnet(context, subnet_id)[\u0027enable_dhcp\u0027]:"},{"line_number":369,"context_line":"                LOG.info(_(\"DHCP is disabled: nothing to do\"))"},{"line_number":370,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FB0A%3D","line":367,"updated":"2013-11-15 14:18:55.000000000","message":"Are we able to handle in someway multi-homed networks?","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"ea2ab9bb435ecdb2beaacd40d3c40f8bbcc1b7b7","unresolved":false,"context_lines":[{"line_number":364,"context_line":"    elif port[\"device_owner\"] !\u003d const.DEVICE_OWNER_DHCP:"},{"line_number":365,"context_line":"        if port.get(\"fixed_ips\"):"},{"line_number":366,"context_line":"            # do something only if there are IP\u0027s and dhcp is enabled"},{"line_number":367,"context_line":"            subnet_id \u003d port[\"fixed_ips\"][0][\u0027subnet_id\u0027]"},{"line_number":368,"context_line":"            if not plugin.get_subnet(context, subnet_id)[\u0027enable_dhcp\u0027]:"},{"line_number":369,"context_line":"                LOG.info(_(\"DHCP is disabled: nothing to do\"))"},{"line_number":370,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FALA%3D","line":367,"in_reply_to":"AAAATn%2F%2FAiQ%3D","updated":"2013-11-15 21:21:32.000000000","message":"unsupported it is then.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":364,"context_line":"    elif port[\"device_owner\"] !\u003d const.DEVICE_OWNER_DHCP:"},{"line_number":365,"context_line":"        if port.get(\"fixed_ips\"):"},{"line_number":366,"context_line":"            # do something only if there are IP\u0027s and dhcp is enabled"},{"line_number":367,"context_line":"            subnet_id \u003d port[\"fixed_ips\"][0][\u0027subnet_id\u0027]"},{"line_number":368,"context_line":"            if not plugin.get_subnet(context, subnet_id)[\u0027enable_dhcp\u0027]:"},{"line_number":369,"context_line":"                LOG.info(_(\"DHCP is disabled: nothing to do\"))"},{"line_number":370,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAiQ%3D","line":367,"in_reply_to":"AAAATn%2F%2FB0A%3D","updated":"2013-11-15 19:37:00.000000000","message":"multi-homed network as in multiple subnet per networks? As blueprint spec details NSX does not support that.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        if port.get(\"fixed_ips\"):"},{"line_number":366,"context_line":"            # do something only if there are IP\u0027s and dhcp is enabled"},{"line_number":367,"context_line":"            subnet_id \u003d port[\"fixed_ips\"][0][\u0027subnet_id\u0027]"},{"line_number":368,"context_line":"            if not plugin.get_subnet(context, subnet_id)[\u0027enable_dhcp\u0027]:"},{"line_number":369,"context_line":"                LOG.info(_(\"DHCP is disabled: nothing to do\"))"},{"line_number":370,"context_line":"                return"},{"line_number":371,"context_line":"            host_data \u003d {"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FB0I%3D","line":368,"updated":"2013-11-15 14:18:55.000000000","message":"as an optimizatio, it is probably worth checking if we can avoid this plugin call either pass the enable_dhcp flag to this call or avoid the dhcp access handling for subnets where it\u0027s disabled.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        if port.get(\"fixed_ips\"):"},{"line_number":366,"context_line":"            # do something only if there are IP\u0027s and dhcp is enabled"},{"line_number":367,"context_line":"            subnet_id \u003d port[\"fixed_ips\"][0][\u0027subnet_id\u0027]"},{"line_number":368,"context_line":"            if not plugin.get_subnet(context, subnet_id)[\u0027enable_dhcp\u0027]:"},{"line_number":369,"context_line":"                LOG.info(_(\"DHCP is disabled: nothing to do\"))"},{"line_number":370,"context_line":"                return"},{"line_number":371,"context_line":"            host_data \u003d {"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAh4%3D","line":368,"in_reply_to":"AAAATn%2F%2FB0I%3D","updated":"2013-11-15 19:37:00.000000000","message":"I cannot do so, unless I change the way we call handle_port_dhcp_access from the Plugin and this may have quite an impact to the agent-based support. It\u0027s a small price to pay to minimize regressions.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":376,"context_line":"            if action \u003d\u003d \"create_port\":"},{"line_number":377,"context_line":"                handler \u003d plugin.lsn_manager.lsn_port_dhcp_host_add"},{"line_number":378,"context_line":"            elif action \u003d\u003d \"delete_port\":"},{"line_number":379,"context_line":"                handler \u003d plugin.lsn_manager.lsn_port_dhcp_host_remove"},{"line_number":380,"context_line":"            try:"},{"line_number":381,"context_line":"                handler(context, network_id, subnet_id, host_data)"},{"line_number":382,"context_line":"            except p_exc.PortConfigurationError:"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FBzg%3D","line":379,"updated":"2013-11-15 14:18:55.000000000","message":"is there a need to have a handler for dealing with IPs being updated on a port?","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":376,"context_line":"            if action \u003d\u003d \"create_port\":"},{"line_number":377,"context_line":"                handler \u003d plugin.lsn_manager.lsn_port_dhcp_host_add"},{"line_number":378,"context_line":"            elif action \u003d\u003d \"delete_port\":"},{"line_number":379,"context_line":"                handler \u003d plugin.lsn_manager.lsn_port_dhcp_host_remove"},{"line_number":380,"context_line":"            try:"},{"line_number":381,"context_line":"                handler(context, network_id, subnet_id, host_data)"},{"line_number":382,"context_line":"            except p_exc.PortConfigurationError:"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAhk%3D","line":379,"in_reply_to":"AAAATn%2F%2FBzg%3D","updated":"2013-11-15 19:37:00.000000000","message":"there is, see: https://review.openstack.org/#/c/49415/","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"}],"neutron/plugins/nicira/nsxlib/lsn.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"da007d15f953874c5864be769e57c620266dda1c","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def lsn_for_network_get(cluster, network_id):"},{"line_number":66,"context_line":"    filters \u003d {\"tag\": network_id, \"tag_scope\": \"n_network_id\"}"},{"line_number":67,"context_line":"    results \u003d do_request(HTTP_GET,"},{"line_number":68,"context_line":"                         _build_uri_path(LSERVICESNODE_RESOURCE,"},{"line_number":69,"context_line":"                                         fields\u003d\"uuid\","}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2FcyU%3D","line":66,"updated":"2013-10-16 01:25:04.000000000","message":"nit: why not just network_id","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7ff25ca6c4c70591573274a891f4ce713c8b687d","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def lsn_for_network_get(cluster, network_id):"},{"line_number":66,"context_line":"    filters \u003d {\"tag\": network_id, \"tag_scope\": \"n_network_id\"}"},{"line_number":67,"context_line":"    results \u003d do_request(HTTP_GET,"},{"line_number":68,"context_line":"                         _build_uri_path(LSERVICESNODE_RESOURCE,"},{"line_number":69,"context_line":"                                         fields\u003d\"uuid\","}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2FcWE%3D","line":66,"in_reply_to":"AAAATH%2F%2FcyU%3D","updated":"2013-10-16 04:14:16.000000000","message":"I was following convention of old way of tagging, where \u0027q\u0027 stayed for quantum","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"da007d15f953874c5864be769e57c620266dda1c","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        raise exception.NotFound()"},{"line_number":74,"context_line":"    elif len(results) \u003d\u003d 1:"},{"line_number":75,"context_line":"        return results[0][\u0027uuid\u0027]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def lsn_delete(cluster, lsn_id):"},{"line_number":79,"context_line":"    do_request(HTTP_DELETE,"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2Fcxk%3D","line":76,"updated":"2013-10-16 01:25:04.000000000","message":"else? Looks like more than one here can return?","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7ff25ca6c4c70591573274a891f4ce713c8b687d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        raise exception.NotFound()"},{"line_number":74,"context_line":"    elif len(results) \u003d\u003d 1:"},{"line_number":75,"context_line":"        return results[0][\u0027uuid\u0027]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def lsn_delete(cluster, lsn_id):"},{"line_number":79,"context_line":"    do_request(HTTP_DELETE,"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2FcV4%3D","line":76,"in_reply_to":"AAAATH%2F%2Fcxk%3D","updated":"2013-10-16 04:14:16.000000000","message":"Logic enforces one LSN per network, so more LSN would be bad, I can raise an exception for corrupted state?","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"da007d15f953874c5864be769e57c620266dda1c","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    port_obj \u003d {"},{"line_number":87,"context_line":"        \"ip_address\": port_data[\"ip_address\"],"},{"line_number":88,"context_line":"        \"mac_address\": port_data[\"mac_address\"],"},{"line_number":89,"context_line":"        \"tags\": utils.get_tags(n_mac_address\u003dport_data[\"mac_address\"],"},{"line_number":90,"context_line":"                               n_subnet_id\u003dport_data[\"subnet_id\"]),"},{"line_number":91,"context_line":"        \"type\": \"LogicalServicesNodePortConfig\","},{"line_number":92,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2FcxY%3D","line":89,"updated":"2013-10-16 01:25:04.000000000","message":"ditto, why start with n_ ? neutron, nicira, nsx what\u0027s the n_","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7ff25ca6c4c70591573274a891f4ce713c8b687d","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    port_obj \u003d {"},{"line_number":87,"context_line":"        \"ip_address\": port_data[\"ip_address\"],"},{"line_number":88,"context_line":"        \"mac_address\": port_data[\"mac_address\"],"},{"line_number":89,"context_line":"        \"tags\": utils.get_tags(n_mac_address\u003dport_data[\"mac_address\"],"},{"line_number":90,"context_line":"                               n_subnet_id\u003dport_data[\"subnet_id\"]),"},{"line_number":91,"context_line":"        \"type\": \"LogicalServicesNodePortConfig\","},{"line_number":92,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2FcVo%3D","line":89,"in_reply_to":"AAAATH%2F%2FcxY%3D","updated":"2013-10-16 04:14:16.000000000","message":"all of the above? :) \n\nNo, seriously it stands for Neutron, as the q- stood for Quantum","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"da007d15f953874c5864be769e57c620266dda1c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    if not results:"},{"line_number":116,"context_line":"        raise exception.NotFound()"},{"line_number":117,"context_line":"    elif len(results) \u003d\u003d 1:"},{"line_number":118,"context_line":"        return results[0][\u0027uuid\u0027]"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"def lsn_port_by_mac_get(cluster, lsn_id, mac_address):"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2FcxI%3D","line":118,"updated":"2013-10-16 01:25:04.000000000","message":"looks like this will only return on as it\u0027s a LSERVICESNODEPORT_RESOURCE\n...LSERVICESNODEPORT_RESOURCE \u003d \"lport/%s","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"da2a7bf4d974b41fcbd89157b9f38c945030809a","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    if not results:"},{"line_number":116,"context_line":"        raise exception.NotFound()"},{"line_number":117,"context_line":"    elif len(results) \u003d\u003d 1:"},{"line_number":118,"context_line":"        return results[0][\u0027uuid\u0027]"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"def lsn_port_by_mac_get(cluster, lsn_id, mac_address):"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2FV5g%3D","line":118,"in_reply_to":"AAAATH%2F%2FcVY%3D","updated":"2013-10-17 14:35:08.000000000","message":"I checked, this may return more than port, The URI is like:\n/ws.v1/lservices-node/9521b317-95d4-4f30-b984-38c121d1d86e/lport\n\nThe result may be something like:\n\n{\n  \"results\": [\n    {\n      \"display_name\": \"t1\", \n      \"_href\": \"/ws.v1/lservices-node/9521b317-95d4-4f30-b984-38c121d1d86e/lport/0bae4b60-8b2a-4d1d-955b-e8fc4fcc2978\", \n     ...\n      \"uuid\": \"0bae4b60-8b2a-4d1d-955b-e8fc4fcc2978\"\n    }, \n    {\n      \"display_name\": \"c8de987a-48c2-43d1-8025-02ada2d96633\", \n      \"_href\": \"/ws.v1/lservices-node/9521b317-95d4-4f30-b984-38c121d1d86e/lport/c8de987a-48c2-43d1-8025-02ada2d96633\", \n      \"portno\": 1, \n     ..., \n      \"admin_status_enabled\": true, \n      \"type\": \"LogicalServicesNodePortConfig\", \n      \"uuid\": \"c8de987a-48c2-43d1-8025-02ada2d96633\"\n    }\n  ], \n  \"result_count\": 2\n}","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7ff25ca6c4c70591573274a891f4ce713c8b687d","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    if not results:"},{"line_number":116,"context_line":"        raise exception.NotFound()"},{"line_number":117,"context_line":"    elif len(results) \u003d\u003d 1:"},{"line_number":118,"context_line":"        return results[0][\u0027uuid\u0027]"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"def lsn_port_by_mac_get(cluster, lsn_id, mac_address):"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2FcVY%3D","line":118,"in_reply_to":"AAAATH%2F%2FcxI%3D","updated":"2013-10-16 04:14:16.000000000","message":"not sure that\u0027s how the NSX API works, I\u0027ll double check.","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"da007d15f953874c5864be769e57c620266dda1c","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def lsn_port_dhcp_configure("},{"line_number":172,"context_line":"        cluster, lsn_id, lsn_port_id, is_enabled\u003dTrue, dhcp_options\u003dNone):"},{"line_number":173,"context_line":"    dhcp_options \u003d dhcp_options or {}"},{"line_number":174,"context_line":"    opts \u003d [\"%s\u003d%s\" % (key, val) for key, val in dhcp_options.iteritems()]"},{"line_number":175,"context_line":"    dhcp_obj \u003d {"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2Fcw8%3D","line":172,"updated":"2013-10-16 01:25:04.000000000","message":"nit: all the other methods in neturon are usually formatted like: \n\ndef lsn_port_dhcp_configure(cluster, lsn_id, lsn_port_id,\n                            is_enabled\u003dTrue, dhcp_options\u003dNone):\n\nit would be nice to keep them consistent.","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7ff25ca6c4c70591573274a891f4ce713c8b687d","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def lsn_port_dhcp_configure("},{"line_number":172,"context_line":"        cluster, lsn_id, lsn_port_id, is_enabled\u003dTrue, dhcp_options\u003dNone):"},{"line_number":173,"context_line":"    dhcp_options \u003d dhcp_options or {}"},{"line_number":174,"context_line":"    opts \u003d [\"%s\u003d%s\" % (key, val) for key, val in dhcp_options.iteritems()]"},{"line_number":175,"context_line":"    dhcp_obj \u003d {"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATH%2F%2FcVM%3D","line":172,"in_reply_to":"AAAATH%2F%2Fcw8%3D","updated":"2013-10-16 04:14:16.000000000","message":"I can, but what if I am going to change the other ones? ;)","commit_id":"77bffd620f25f55dec12c188e35b8c16ff47649c"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"HTTP_GET \u003d \"GET\""},{"line_number":29,"context_line":"HTTP_POST \u003d \"POST\""},{"line_number":30,"context_line":"HTTP_DELETE \u003d \"DELETE\""},{"line_number":31,"context_line":"HTTP_PUT \u003d \"PUT\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"SERVICECLUSTER_RESOURCE \u003d \"service-cluster\""},{"line_number":34,"context_line":"LSERVICESNODE_RESOURCE \u003d \"lservices-node\""}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FBxE%3D","line":31,"updated":"2013-11-15 14:18:55.000000000","message":"Do you think it might be a good time to move this constants in a sep module and avoid their ploriferation?","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":28,"context_line":"HTTP_GET \u003d \"GET\""},{"line_number":29,"context_line":"HTTP_POST \u003d \"POST\""},{"line_number":30,"context_line":"HTTP_DELETE \u003d \"DELETE\""},{"line_number":31,"context_line":"HTTP_PUT \u003d \"PUT\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"SERVICECLUSTER_RESOURCE \u003d \"service-cluster\""},{"line_number":34,"context_line":"LSERVICESNODE_RESOURCE \u003d \"lservices-node\""}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAg8%3D","line":31,"in_reply_to":"AAAATn%2F%2FBxE%3D","updated":"2013-11-15 19:37:00.000000000","message":"Perhaps, but reuse gives us very little of gain; these values are never really gonna change and I can save the import and the nasty referencing my_crappy_module.HTTP_GET which could only make my pep8 80 chars rule violation more likely.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                       cluster\u003dcluster) is not None)"},{"line_number":49,"context_line":"    except exception.NotFound:"},{"line_number":50,"context_line":"        pass"},{"line_number":51,"context_line":"    return exists"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def lsn_for_network_create(cluster, network_id):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FBwQ%3D","line":51,"updated":"2013-11-15 14:18:55.000000000","message":"I reckon this is safe and easily readable.\neven if there\u0027s a pass in an except block, I\u0027m ok with it.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                       cluster\u003dcluster) is not None)"},{"line_number":49,"context_line":"    except exception.NotFound:"},{"line_number":50,"context_line":"        pass"},{"line_number":51,"context_line":"    return exists"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def lsn_for_network_create(cluster, network_id):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAgg%3D","line":51,"in_reply_to":"AAAATn%2F%2FBwQ%3D","updated":"2013-11-15 19:37:00.000000000","message":"I want service_cluster_exists to be safe: only true/false must be returned, unless there\u0027s a bug; in which case the exception is thrown anyway. I don\u0027t need to log either, as False means I got in the except block","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    return exists"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def lsn_for_network_create(cluster, network_id):"},{"line_number":55,"context_line":"    lsn_obj \u003d {"},{"line_number":56,"context_line":"        \"service_cluster_uuid\": cluster.default_service_cluster_uuid,"},{"line_number":57,"context_line":"        \"tags\": utils.get_tags(n_network_id\u003dnetwork_id)"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FBvw%3D","line":54,"updated":"2013-11-15 14:18:55.000000000","message":"nit - I personally find the convention\n\u003caction\u003e_\u003cresource\u003e more understandable, so I would consider a renaming to create_lsn_for_network.\n\nBut this is just an opinion, do as you think it\u0027s better.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    return exists"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def lsn_for_network_create(cluster, network_id):"},{"line_number":55,"context_line":"    lsn_obj \u003d {"},{"line_number":56,"context_line":"        \"service_cluster_uuid\": cluster.default_service_cluster_uuid,"},{"line_number":57,"context_line":"        \"tags\": utils.get_tags(n_network_id\u003dnetwork_id)"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAfo%3D","line":54,"in_reply_to":"AAAATn%2F%2FBvw%3D","updated":"2013-11-15 19:37:00.000000000","message":"This can turn into a religion war: people who think action_resource is better and people who think resource_action is better. I personally am in the latter faction, besides there are many other examples where this is applied: neutron cli, xe cli, ovs cli...\n\nThat said, most importantly we need consistency. Since this module is new and does not clash with others I felt I wanted to go my own way, in the hope of changing the others in nvplib when we deal with blueprint nicira-plugin-renaming","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    if not results:"},{"line_number":73,"context_line":"        raise exception.NotFound()"},{"line_number":74,"context_line":"    elif len(results) \u003d\u003d 1:"},{"line_number":75,"context_line":"        return results[0][\u0027uuid\u0027]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def lsn_delete(cluster, lsn_id):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FBvc%3D","line":75,"updated":"2013-11-15 14:18:55.000000000","message":"I am not sure how the case with multiple lsns for a network should be handled - honestly I do not even know if that\u0027s possible at all","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    if not results:"},{"line_number":73,"context_line":"        raise exception.NotFound()"},{"line_number":74,"context_line":"    elif len(results) \u003d\u003d 1:"},{"line_number":75,"context_line":"        return results[0][\u0027uuid\u0027]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def lsn_delete(cluster, lsn_id):"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAfI%3D","line":75,"in_reply_to":"AAAATn%2F%2FBvc%3D","updated":"2013-11-15 19:37:00.000000000","message":"Nope, 1-1 between LSN and Logical Networks","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                 \"already exists with another port\") %"},{"line_number":149,"context_line":"               {\u0027lsn\u0027: lsn_id, \u0027port\u0027: lswitch_port_id})"},{"line_number":150,"context_line":"        LOG.exception(msg)"},{"line_number":151,"context_line":"        raise nvp_exc.LsnConfigurationConflict(lsn_id\u003dlsn_id)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"def _lsn_port_configure_action("}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FBvI%3D","line":151,"updated":"2013-11-15 14:18:55.000000000","message":"This would be the exception which is thrown is the lswitch_port_id already has an attachment, or the exception which can be thrown because of the unability of having multiple patch attachments on a single switch?\n\nFor the former question - is that possible?\nFor the latter case - I seem to recall we verified that restriction can already be lifted?","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                 \"already exists with another port\") %"},{"line_number":149,"context_line":"               {\u0027lsn\u0027: lsn_id, \u0027port\u0027: lswitch_port_id})"},{"line_number":150,"context_line":"        LOG.exception(msg)"},{"line_number":151,"context_line":"        raise nvp_exc.LsnConfigurationConflict(lsn_id\u003dlsn_id)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"def _lsn_port_configure_action("}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAew%3D","line":151,"in_reply_to":"AAAATn%2F%2FBvI%3D","updated":"2013-11-15 19:37:00.000000000","message":"This exception is raised because NSX does not support multiple patch attachments on the same logical switch and to multiple LSN ports. I don\u0027t think this restriction will ever be lifted, but I might be wrong.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                               extra_action\u003daction),"},{"line_number":160,"context_line":"               json.dumps({\"enabled\": is_enabled}),"},{"line_number":161,"context_line":"               cluster\u003dcluster)"},{"line_number":162,"context_line":"    do_request(HTTP_PUT,"},{"line_number":163,"context_line":"               _build_uri_path(LSERVICESNODEPORT_RESOURCE,"},{"line_number":164,"context_line":"                               parent_resource_id\u003dlsn_id,"},{"line_number":165,"context_line":"                               resource_id\u003dlsn_port_id,"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FBuo%3D","line":162,"updated":"2013-11-15 14:18:55.000000000","message":"is this NSX API request needed if the DHCP is not enabled?","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                               extra_action\u003daction),"},{"line_number":160,"context_line":"               json.dumps({\"enabled\": is_enabled}),"},{"line_number":161,"context_line":"               cluster\u003dcluster)"},{"line_number":162,"context_line":"    do_request(HTTP_PUT,"},{"line_number":163,"context_line":"               _build_uri_path(LSERVICESNODEPORT_RESOURCE,"},{"line_number":164,"context_line":"                               parent_resource_id\u003dlsn_id,"},{"line_number":165,"context_line":"                               resource_id\u003dlsn_port_id,"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAcQ%3D","line":162,"in_reply_to":"AAAATn%2F%2FBuo%3D","updated":"2013-11-15 19:37:00.000000000","message":"If the subnet was created with dhcp was off no port will exist; once you switch dhcp on the ports gets created and when you switch dhcp off only the service gets switched off, the port remains. Currently this PUT is a like a noop, but we might want to add port-based options, in which case this put might turn to be useful","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"}],"neutron/tests/unit/nicira/test_dhcpmeta.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.tests import base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class LsnManagerTestCase(base.BaseTestCase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def setUp(self):"},{"line_number":32,"context_line":"        super(LsnManagerTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FBpk%3D","line":29,"updated":"2013-11-15 14:18:55.000000000","message":"just out of pedantry, I wonder if test_dhcpmeta is the right module name for this test case","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"ea2ab9bb435ecdb2beaacd40d3c40f8bbcc1b7b7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.tests import base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class LsnManagerTestCase(base.BaseTestCase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def setUp(self):"},{"line_number":32,"context_line":"        super(LsnManagerTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAKw%3D","line":29,"in_reply_to":"AAAATn%2F%2FAbw%3D","updated":"2013-11-15 21:21:32.000000000","message":"if you want, otherwise it does not matter.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.tests import base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class LsnManagerTestCase(base.BaseTestCase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def setUp(self):"},{"line_number":32,"context_line":"        super(LsnManagerTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAbw%3D","line":29,"in_reply_to":"AAAATn%2F%2FBpk%3D","updated":"2013-11-15 19:37:00.000000000","message":"what do you suggest? I could break it out in its own if you like","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.mock_lsn_api \u003d self.mock_lsn_api_p.start()"},{"line_number":42,"context_line":"        nvp.register_dhcp_opts(cfg)"},{"line_number":43,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":44,"context_line":"        self.addCleanup(self.mock_lsn_api_p.stop)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_lsn_get(self):"},{"line_number":47,"context_line":"        self.mock_lsn_api.lsn_for_network_get.return_value \u003d self.lsn_id"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FBto%3D","line":44,"updated":"2013-11-15 14:18:55.000000000","message":"nit: I\u0027m starting to find a better approach to add just self.mock.stopall as a cleanup action","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.mock_lsn_api \u003d self.mock_lsn_api_p.start()"},{"line_number":42,"context_line":"        nvp.register_dhcp_opts(cfg)"},{"line_number":43,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":44,"context_line":"        self.addCleanup(self.mock_lsn_api_p.stop)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_lsn_get(self):"},{"line_number":47,"context_line":"        self.mock_lsn_api.lsn_for_network_get.return_value \u003d self.lsn_id"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAbo%3D","line":44,"in_reply_to":"AAAATn%2F%2FBto%3D","updated":"2013-11-15 19:37:00.000000000","message":"being just two I favor being explicit, if this grows then I agree with you.","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"452066b5beaf1d3cf812b7180f891e40d451af5f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self._test_lsn_get_silent_raise_with_exc(n_exc.NotFound)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def test_lsn_get_silent_raise_with_api_error(self):"},{"line_number":79,"context_line":"        self._test_lsn_get_silent_raise_with_exc(NvpApiException)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_lsn_create(self):"},{"line_number":82,"context_line":"        self.mock_lsn_api.lsn_for_network_create.return_value \u003d self.lsn_id"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FBso%3D","line":79,"updated":"2013-11-15 14:18:55.000000000","message":"just saying: true completeness would be achieved with injecting some random exception which is not among the ones in the except block in lsn_get","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"94cfcb787f55c3bb33c59a3123528e6814767c54","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self._test_lsn_get_silent_raise_with_exc(n_exc.NotFound)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def test_lsn_get_silent_raise_with_api_error(self):"},{"line_number":79,"context_line":"        self._test_lsn_get_silent_raise_with_exc(NvpApiException)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_lsn_create(self):"},{"line_number":82,"context_line":"        self.mock_lsn_api.lsn_for_network_create.return_value \u003d self.lsn_id"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAATn%2F%2FAbg%3D","line":79,"in_reply_to":"AAAATn%2F%2FBso%3D","updated":"2013-11-15 19:37:00.000000000","message":"left as exercise for the reader :)","commit_id":"b8810bf3c0b482bbfe20174258fe0fd71431f944"}]}
