)]}'
{"neutron/plugins/ml2/db.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"652671d903bc836571cf6c7cb70f29e12ba001c1","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                for record in records]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def get_port_binding(session, port_id):"},{"line_number":64,"context_line":"    with session.begin(subtransactions\u003dTrue):"},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            record \u003d (session.query(models.PortBinding)."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FpdM%3D","line":63,"updated":"2013-09-01 16:16:53.000000000","message":"nit: i prefer ensure_port_binding here","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"322a17027625356e8acdb82f4541093deba23eed","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                for record in records]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def get_port_binding(session, port_id):"},{"line_number":64,"context_line":"    with session.begin(subtransactions\u003dTrue):"},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            record \u003d (session.query(models.PortBinding)."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2Flzs%3D","line":63,"in_reply_to":"AAAASn%2F%2FpdM%3D","updated":"2013-09-03 04:27:45.000000000","message":"Done","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"}],"neutron/plugins/ml2/driver_api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2051b615898ddff5bf415468ecf0ab39c079b2d3","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    @abstractproperty"},{"line_number":205,"context_line":"    def bound_segment(self):"},{"line_number":206,"context_line":"        \"\"\"Return the currently bound segment dictionary.\"\"\""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @abstractmethod"},{"line_number":209,"context_line":"    def host_agents(self, agent_type):"},{"line_number":210,"context_line":"        \"\"\"Get agents of the specified type on port\u0027s host."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASX%2F%2F394%3D","line":207,"updated":"2013-08-25 13:37:46.000000000","message":"why no pass? or is the meant to return None?","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"a6c7001010d786cb95077ee4b3c38ac898caa520","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    @abstractproperty"},{"line_number":205,"context_line":"    def bound_segment(self):"},{"line_number":206,"context_line":"        \"\"\"Return the currently bound segment dictionary.\"\"\""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @abstractmethod"},{"line_number":209,"context_line":"    def host_agents(self, agent_type):"},{"line_number":210,"context_line":"        \"\"\"Get agents of the specified type on port\u0027s host."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2F8Hk%3D","line":207,"in_reply_to":"AAAASX%2F%2F394%3D","updated":"2013-08-28 16:21:28.000000000","message":"Done","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"85f104d7e343013f63dd9dbd0d789a0ca54e64e3","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    @abstractproperty"},{"line_number":205,"context_line":"    def bound_segment(self):"},{"line_number":206,"context_line":"        \"\"\"Return the currently bound segment dictionary.\"\"\""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @abstractmethod"},{"line_number":209,"context_line":"    def host_agents(self, agent_type):"},{"line_number":210,"context_line":"        \"\"\"Get agents of the specified type on port\u0027s host."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2F7qE%3D","line":207,"in_reply_to":"AAAASX%2F%2F394%3D","updated":"2013-08-27 20:41:45.000000000","message":"method having docstring is not necessary to have \u0027pass\u0027 statement. And will return None.\n\nSo in fact pass should be either added here or removed in code below just to preserve common style.","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2051b615898ddff5bf415468ecf0ab39c079b2d3","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        :param agent_type: Agent type identifier"},{"line_number":213,"context_line":"        :returns: List of agents_db.Agent records"},{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    @abstractmethod"},{"line_number":217,"context_line":"    def set_binding(self, segment_id, vif_type, cap_port_filter):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASX%2F%2F390%3D","line":214,"updated":"2013-08-25 13:37:46.000000000","message":"ditto","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"a6c7001010d786cb95077ee4b3c38ac898caa520","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        :param agent_type: Agent type identifier"},{"line_number":213,"context_line":"        :returns: List of agents_db.Agent records"},{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    @abstractmethod"},{"line_number":217,"context_line":"    def set_binding(self, segment_id, vif_type, cap_port_filter):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2F8Hg%3D","line":214,"in_reply_to":"AAAASX%2F%2F390%3D","updated":"2013-08-28 16:21:28.000000000","message":"Done","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2051b615898ddff5bf415468ecf0ab39c079b2d3","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        Called by MechanismDriver.bind_port to indicate success and"},{"line_number":225,"context_line":"        specify binding details to use for port. The segment_id must"},{"line_number":226,"context_line":"        identify an item in network.network_segments."},{"line_number":227,"context_line":"        \"\"\""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"class MechanismDriver(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASX%2F%2F39w%3D","line":227,"updated":"2013-08-25 13:37:46.000000000","message":"ditto","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"a6c7001010d786cb95077ee4b3c38ac898caa520","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        Called by MechanismDriver.bind_port to indicate success and"},{"line_number":225,"context_line":"        specify binding details to use for port. The segment_id must"},{"line_number":226,"context_line":"        identify an item in network.network_segments."},{"line_number":227,"context_line":"        \"\"\""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"class MechanismDriver(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2F8Hc%3D","line":227,"in_reply_to":"AAAASX%2F%2F39w%3D","updated":"2013-08-28 16:21:28.000000000","message":"Done","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"}],"neutron/plugins/ml2/driver_context.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2051b615898ddff5bf415468ecf0ab39c079b2d3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            for segment in self._network_context.network_segments():"},{"line_number":75,"context_line":"                if segment[api.ID] \u003d\u003d id:"},{"line_number":76,"context_line":"                    return segment"},{"line_number":77,"context_line":"        return None"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def host_agents(self, agent_type):"},{"line_number":80,"context_line":"        return self._plugin.get_agents(self._plugin_context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASX%2F%2F39s%3D","line":77,"updated":"2013-08-25 13:37:46.000000000","message":"by default a method returns None","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"a6c7001010d786cb95077ee4b3c38ac898caa520","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            for segment in self._network_context.network_segments():"},{"line_number":75,"context_line":"                if segment[api.ID] \u003d\u003d id:"},{"line_number":76,"context_line":"                    return segment"},{"line_number":77,"context_line":"        return None"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def host_agents(self, agent_type):"},{"line_number":80,"context_line":"        return self._plugin.get_agents(self._plugin_context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2F8HQ%3D","line":77,"in_reply_to":"AAAASX%2F%2F39s%3D","updated":"2013-08-28 16:21:28.000000000","message":"Done","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"}],"neutron/plugins/ml2/drivers/mech_agent.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6476ad9ab4d5bc0abcf5c30acfdb3bd7c0cc624e","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                  {\u0027port\u0027: context.current[\u0027id\u0027],"},{"line_number":57,"context_line":"                   \u0027network\u0027: context.network.current[\u0027id\u0027]})"},{"line_number":58,"context_line":"        for agent in context.host_agents(self.agent_type):"},{"line_number":59,"context_line":"            LOG.debug(_(\"Checking agent: %s\") % agent)"},{"line_number":60,"context_line":"            if agent[\u0027alive\u0027]:"},{"line_number":61,"context_line":"                for segment in context.network.network_segments:"},{"line_number":62,"context_line":"                    if self.check_segment_for_agent(segment, agent):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2Fj5E%3D","line":59,"updated":"2013-09-03 14:12:29.000000000","message":"Nit: A comma instead of % is recommended in LOG.xxxx.","commit_id":"66dff455a87b8b6b218ac0794cdc96155e06c3b5"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"3125b39d3bed6c5b6522ec173d0efdb9b29022d9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                  {\u0027port\u0027: context.current[\u0027id\u0027],"},{"line_number":57,"context_line":"                   \u0027network\u0027: context.network.current[\u0027id\u0027]})"},{"line_number":58,"context_line":"        for agent in context.host_agents(self.agent_type):"},{"line_number":59,"context_line":"            LOG.debug(_(\"Checking agent: %s\") % agent)"},{"line_number":60,"context_line":"            if agent[\u0027alive\u0027]:"},{"line_number":61,"context_line":"                for segment in context.network.network_segments:"},{"line_number":62,"context_line":"                    if self.check_segment_for_agent(segment, agent):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FiIc%3D","line":59,"in_reply_to":"AAAASn%2F%2Fj5E%3D","updated":"2013-09-03 18:47:54.000000000","message":"Done","commit_id":"66dff455a87b8b6b218ac0794cdc96155e06c3b5"}],"neutron/plugins/ml2/drivers/mech_hyperv.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2051b615898ddff5bf415468ecf0ab39c079b2d3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASX%2F%2F39g%3D","line":1,"updated":"2013-08-25 13:37:46.000000000","message":"seems to be the exact code as linux bridge. Why not just have common code and then pass the type (for example constants.AGENT_TYPE_LINUXBRIDGE)","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"a6c7001010d786cb95077ee4b3c38ac898caa520","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2F31Q%3D","line":1,"in_reply_to":"AAAASX%2F%2F39g%3D","updated":"2013-08-28 16:21:28.000000000","message":"I\u0027ll add a common base class for the agent-based mechanism drivers.","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"}],"neutron/plugins/ml2/drivers/mech_openvswitch.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"cf76c9f2f15e0a54acafa13bdd7c00d3854b09c0","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    to have connectivity to the port\u0027s network."},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self):"},{"line_number":35,"context_line":"        pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def initialize(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FqI8%3D","line":34,"updated":"2013-09-01 03:15:56.000000000","message":"This method is not required.","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"322a17027625356e8acdb82f4541093deba23eed","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    to have connectivity to the port\u0027s network."},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self):"},{"line_number":35,"context_line":"        pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def initialize(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2Fl4A%3D","line":34,"in_reply_to":"AAAASn%2F%2FqI8%3D","updated":"2013-09-03 04:27:45.000000000","message":"It now has code.","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"615386851f2c22a3e1784490c8a76f75dde7b8aa","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        pass"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def bind_port(self, context):"},{"line_number":41,"context_line":"        LOG.info(_(\"attempting to bind port: %(port)s on \""},{"line_number":42,"context_line":"                   \"network %(network)s\"),"},{"line_number":43,"context_line":"                 {\u0027port\u0027: context.current[\u0027id\u0027],"},{"line_number":44,"context_line":"                  \u0027network\u0027: context.network.current[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2Fpc4%3D","line":41,"updated":"2013-09-01 16:32:53.000000000","message":"Though it is not need to be addressed in this patch, we need to sort out the log levels. All log level here is INFO. This is called for each port REST operation and it leads to many logs. I understand LOG.debug is used in too many places including openstack.common and using LOG.info is useful to mask such debug log messages.","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"322a17027625356e8acdb82f4541093deba23eed","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        pass"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def bind_port(self, context):"},{"line_number":41,"context_line":"        LOG.info(_(\"attempting to bind port: %(port)s on \""},{"line_number":42,"context_line":"                   \"network %(network)s\"),"},{"line_number":43,"context_line":"                 {\u0027port\u0027: context.current[\u0027id\u0027],"},{"line_number":44,"context_line":"                  \u0027network\u0027: context.network.current[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FlxY%3D","line":41,"in_reply_to":"AAAASn%2F%2Fpc4%3D","updated":"2013-09-03 04:27:45.000000000","message":"I\u0027ve changed most of the LOG.info() calls to LOG.debug(), and changed a few that indicate potential problems to LOG.warning().","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6476ad9ab4d5bc0abcf5c30acfdb3bd7c0cc624e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def __init__(self):"},{"line_number":36,"context_line":"        super(OpenvswitchMechanismDriver, self).__init__("},{"line_number":37,"context_line":"            constants.AGENT_TYPE_OVS,"},{"line_number":38,"context_line":"            portbindings.VIF_TYPE_OVS,  # REVISIT(rkukura): hybrid?"},{"line_number":39,"context_line":"            True)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def check_segment_for_agent(self, segment, agent):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2Fj5Y%3D","line":38,"updated":"2013-09-03 14:12:29.000000000","message":"VIF_TYPE_OVS is right.\n\nAn issue related to hybrid will be addressed in the patch https://review.openstack.org/#/c/21946/ . A new attribute VIF_SECURITY informs nova whether iptables (ie hybrid driver) is required.","commit_id":"66dff455a87b8b6b218ac0794cdc96155e06c3b5"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"3125b39d3bed6c5b6522ec173d0efdb9b29022d9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def __init__(self):"},{"line_number":36,"context_line":"        super(OpenvswitchMechanismDriver, self).__init__("},{"line_number":37,"context_line":"            constants.AGENT_TYPE_OVS,"},{"line_number":38,"context_line":"            portbindings.VIF_TYPE_OVS,  # REVISIT(rkukura): hybrid?"},{"line_number":39,"context_line":"            True)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def check_segment_for_agent(self, segment, agent):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FiIg%3D","line":38,"in_reply_to":"AAAASn%2F%2Fj5Y%3D","updated":"2013-09-03 18:47:54.000000000","message":"Done","commit_id":"66dff455a87b8b6b218ac0794cdc96155e06c3b5"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"85f104d7e343013f63dd9dbd0d789a0ca54e64e3","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        values \u003d filters and filters.get(portbindings.HOST_ID, [])"},{"line_number":233,"context_line":"        if not values:"},{"line_number":234,"context_line":"            return query"},{"line_number":235,"context_line":"        if len(values) \u003d\u003d 1:"},{"line_number":236,"context_line":"            query \u003d query.filter(models.PortBinding.host \u003d\u003d values[0])"},{"line_number":237,"context_line":"        else:"},{"line_number":238,"context_line":"            query \u003d query.filter(models.PortBinding.host.in_(values))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2F7ow%3D","line":235,"updated":"2013-08-27 20:41:45.000000000","message":"IMO that if-else is unnecessary.\nwhy not just:\n return query.filter(models.PortBinding.host.in_(values))\n?","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"a6c7001010d786cb95077ee4b3c38ac898caa520","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        values \u003d filters and filters.get(portbindings.HOST_ID, [])"},{"line_number":233,"context_line":"        if not values:"},{"line_number":234,"context_line":"            return query"},{"line_number":235,"context_line":"        if len(values) \u003d\u003d 1:"},{"line_number":236,"context_line":"            query \u003d query.filter(models.PortBinding.host \u003d\u003d values[0])"},{"line_number":237,"context_line":"        else:"},{"line_number":238,"context_line":"            query \u003d query.filter(models.PortBinding.host.in_(values))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2F3t0%3D","line":235,"in_reply_to":"AAAASn%2F%2F7ow%3D","updated":"2013-08-28 16:21:28.000000000","message":"Done","commit_id":"44ec8b744603207c5d296658fb5480522a7a07e9"},{"author":{"_account_id":6558,"name":"Sukhdev Kapur","email":"sukhdevkapur@gmail.com","username":"sukhdev-8"},"change_message_id":"98a7b87fd848fb0ac53f54ea76e9e67a78cbc234","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        if host_set:"},{"line_number":190,"context_line":"            binding.host \u003d host"},{"line_number":191,"context_line":"            port[portbindings.HOST_ID] \u003d host"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        if binding.host:"},{"line_number":194,"context_line":"            self.mechanism_manager.bind_port(mech_context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FmMk%3D","line":191,"updated":"2013-09-02 20:43:27.000000000","message":"I noticed that only host name is being set in the bindings. There is a port name as well. This needs to be sent to the mechanism drivers as well. Should that not be set here here as well?","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"322a17027625356e8acdb82f4541093deba23eed","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        if host_set:"},{"line_number":190,"context_line":"            binding.host \u003d host"},{"line_number":191,"context_line":"            port[portbindings.HOST_ID] \u003d host"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        if binding.host:"},{"line_number":194,"context_line":"            self.mechanism_manager.bind_port(mech_context)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2Fl30%3D","line":191,"in_reply_to":"AAAASn%2F%2FmMk%3D","updated":"2013-09-03 04:27:45.000000000","message":"The NeutronDbPluginV2 implementation already stores the name in the port model and makes it available in the port dictionary under the \u0027name\u0027 key. The port dictionary is passed to the mechanism driver methods, so I don\u0027t think ml2 needs to do anything more here. Am I missing something?","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"},{"author":{"_account_id":6820,"name":"Francois Eleouet","email":"f.eleouet@gmail.com","username":"fanchon"},"change_message_id":"6eb28a34d6cd0b3f7fe7e0f45cda6a3103ad1168","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            # REVISIT(rkukura): This should notify agent to unplug port"},{"line_number":249,"context_line":"            network \u003d mech_context.network.current"},{"line_number":250,"context_line":"            LOG.warning(_(\"In _notify_port_updated(), no bound segment for \""},{"line_number":251,"context_line":"                          \"port %(port_id) on network %(network_id)\"),"},{"line_number":252,"context_line":"                        {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":253,"context_line":"                         \u0027network_id\u0027: network[\u0027id\u0027]})"},{"line_number":254,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FoGo%3D","line":251,"updated":"2013-09-02 11:41:52.000000000","message":"Shouldn\u0027t it be %(port_id)s and %(network_id)s instead?","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"322a17027625356e8acdb82f4541093deba23eed","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            # REVISIT(rkukura): This should notify agent to unplug port"},{"line_number":249,"context_line":"            network \u003d mech_context.network.current"},{"line_number":250,"context_line":"            LOG.warning(_(\"In _notify_port_updated(), no bound segment for \""},{"line_number":251,"context_line":"                          \"port %(port_id) on network %(network_id)\"),"},{"line_number":252,"context_line":"                        {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":253,"context_line":"                         \u0027network_id\u0027: network[\u0027id\u0027]})"},{"line_number":254,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FlxE%3D","line":251,"in_reply_to":"AAAASn%2F%2FoGo%3D","updated":"2013-09-03 04:27:45.000000000","message":"Done","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"}],"neutron/plugins/ml2/rpc.py":[{"author":{"_account_id":6820,"name":"Francois Eleouet","email":"f.eleouet@gmail.com","username":"fanchon"},"change_message_id":"6eb28a34d6cd0b3f7fe7e0f45cda6a3103ad1168","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                              \"%(agent_id)s on network %(network_id)s not \""},{"line_number":115,"context_line":"                              \"bound, vif_type: %(vif_type)s\"),"},{"line_number":116,"context_line":"                            {\u0027device\u0027: device,"},{"line_number":117,"context_line":"                             \u0027agent_id\u0027: agent_id,"},{"line_number":118,"context_line":"                             \u0027network_id\u0027: port.network_id,"},{"line_number":119,"context_line":"                             \u0027vif_type\u0027: binding.vif_type})"},{"line_number":120,"context_line":"                return {\u0027device\u0027: device}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FnoA%3D","line":117,"updated":"2013-09-02 11:41:52.000000000","message":"Binding is failing on my testbed because agent_id mismatches: CONF.host will default to fdqn for quantum agent [1], while nova will set port binding with hostname (without domain) [2], resulting in binding failure.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/common/config.py#L82\n\n[2] https://github.com/openstack/nova/blob/master/nova/netconf.py#L53","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"322a17027625356e8acdb82f4541093deba23eed","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                              \"%(agent_id)s on network %(network_id)s not \""},{"line_number":115,"context_line":"                              \"bound, vif_type: %(vif_type)s\"),"},{"line_number":116,"context_line":"                            {\u0027device\u0027: device,"},{"line_number":117,"context_line":"                             \u0027agent_id\u0027: agent_id,"},{"line_number":118,"context_line":"                             \u0027network_id\u0027: port.network_id,"},{"line_number":119,"context_line":"                             \u0027vif_type\u0027: binding.vif_type})"},{"line_number":120,"context_line":"                return {\u0027device\u0027: device}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2Fl3g%3D","line":117,"in_reply_to":"AAAASn%2F%2FnoA%3D","updated":"2013-09-03 04:27:45.000000000","message":"The names used by nova and quantum to identify hosts need to agree for ML2\u0027s port binding to work. Note that ML2 should now be using host field from agents_db rather than the agent_id for this.\n\nIf the host names don\u0027t currently agree, it seems using FQDNs by default would be preferable, so this probably should be treated as a nova bug. Alternatively, we could change neutron to not use FQDNs, or implement a more lenient comparison.\n\nIn the mean time, setting the host in either the nova or neutron config file should allow working around the issue.","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"}],"neutron/tests/unit/ml2/test_ml2_plugin.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"615386851f2c22a3e1784490c8a76f75dde7b8aa","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            self.assertEqual(port[\u0027port\u0027][\u0027status\u0027], \u0027DOWN\u0027)"},{"line_number":63,"context_line":"            self.assertEqual(self.port_create_status, \u0027DOWN\u0027)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class TestMl2PortBinding(Ml2PluginV2TestCase,"},{"line_number":67,"context_line":"                         test_bindings.PortBindingsTestCase):"},{"line_number":68,"context_line":"    # Test case does not set binding:host_id, so ml2 does not attempt"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2Fpb0%3D","line":65,"updated":"2013-09-01 16:32:53.000000000","message":"ML2 now has a separate test module test_port_binding.py. How about moving the following three classes to test_port_binding.py?","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"322a17027625356e8acdb82f4541093deba23eed","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            self.assertEqual(port[\u0027port\u0027][\u0027status\u0027], \u0027DOWN\u0027)"},{"line_number":63,"context_line":"            self.assertEqual(self.port_create_status, \u0027DOWN\u0027)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class TestMl2PortBinding(Ml2PluginV2TestCase,"},{"line_number":67,"context_line":"                         test_bindings.PortBindingsTestCase):"},{"line_number":68,"context_line":"    # Test case does not set binding:host_id, so ml2 does not attempt"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FlvY%3D","line":65,"in_reply_to":"AAAASn%2F%2Fpb0%3D","updated":"2013-09-03 04:27:45.000000000","message":"I gave this a try, but since these tests use Ml2PluginV2TestCase, it seemed to make more sense to keep them here. Also, this is more consistent with all the other plugins that use these tests.","commit_id":"03d6bae356b080244b82b404e347e30e16544d67"}]}
