)]}'
{"neutron/agent/l2/extensions/dhcp/base.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"efe5085b79c053a5f59bd36256bd72308c85a4ee","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":3,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":4,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":1,"id":"e662f538_6b651b44","line":1,"updated":"2021-02-01 18:12:36.000000000","message":"Not sure if you intended to not put a company copyright here?  Same would apply to other files in the review chain.","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a397f0517bb3c5634663b876c054b2f27d94142b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":3,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":4,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":1,"id":"02eef595_8b33cbe6","line":1,"in_reply_to":"e662f538_6b651b44","updated":"2021-02-03 04:23:03.000000000","message":"Done","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"efe5085b79c053a5f59bd36256bd72308c85a4ee","unresolved":true,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class DHCPResponderBase(base_oskenapp.BaseNeutronAgentOSKenApp):"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, agent_api, ext_api, version\u003d\"v4\", *args, **kwargs):"},{"line_number":39,"context_line":"        super(DHCPResponderBase, self).__init__(*args, **kwargs)"},{"line_number":40,"context_line":"        self.agent_api \u003d agent_api"},{"line_number":41,"context_line":"        self.int_br \u003d self.agent_api.request_int_br()"}],"source_content_type":"text/x-python","patch_set":1,"id":"0fa561a3_65607c03","line":38,"range":{"start_line":38,"start_character":51,"end_line":38,"end_character":55},"updated":"2021-02-01 18:12:36.000000000","message":"Maybe use one of the defined constants?  Like IPv4 or IP_VERSION_4?  Although some of the logs below are using this.","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a397f0517bb3c5634663b876c054b2f27d94142b","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class DHCPResponderBase(base_oskenapp.BaseNeutronAgentOSKenApp):"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, agent_api, ext_api, version\u003d\"v4\", *args, **kwargs):"},{"line_number":39,"context_line":"        super(DHCPResponderBase, self).__init__(*args, **kwargs)"},{"line_number":40,"context_line":"        self.agent_api \u003d agent_api"},{"line_number":41,"context_line":"        self.int_br \u003d self.agent_api.request_int_br()"}],"source_content_type":"text/x-python","patch_set":1,"id":"47770bc9_2acb7277","line":38,"range":{"start_line":38,"start_character":51,"end_line":38,"end_character":55},"in_reply_to":"0fa561a3_65607c03","updated":"2021-02-03 04:23:03.000000000","message":"Done","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"efe5085b79c053a5f59bd36256bd72308c85a4ee","unresolved":true,"context_lines":[{"line_number":43,"context_line":"        self.version \u003d version"},{"line_number":44,"context_line":"        self.name \u003d \"DHCP%sResponder\" % version"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.hw_addr \u003d \u0027fa:16:3e:ff:ff:ff\u0027"},{"line_number":47,"context_line":"        self.register_packet_in_handler(self._packet_in_handler)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _packet_in_handler(self, ev):"}],"source_content_type":"text/x-python","patch_set":1,"id":"a78a8656_f5e5abb5","line":46,"updated":"2021-02-01 18:12:36.000000000","message":"Should this be using the base_mac from neutron/conf/common.py ?","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a397f0517bb3c5634663b876c054b2f27d94142b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.version \u003d version"},{"line_number":44,"context_line":"        self.name \u003d \"DHCP%sResponder\" % version"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.hw_addr \u003d \u0027fa:16:3e:ff:ff:ff\u0027"},{"line_number":47,"context_line":"        self.register_packet_in_handler(self._packet_in_handler)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _packet_in_handler(self, ev):"}],"source_content_type":"text/x-python","patch_set":1,"id":"647e87d9_f7657172","line":46,"in_reply_to":"a78a8656_f5e5abb5","updated":"2021-02-03 04:23:03.000000000","message":"Done","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"efe5085b79c053a5f59bd36256bd72308c85a4ee","unresolved":true,"context_lines":[{"line_number":58,"context_line":"        elif msg.reason \u003d\u003d ofproto.OFPR_INVALID_TTL:"},{"line_number":59,"context_line":"            reason \u003d \u0027INVALID TTL\u0027"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            reason \u003d \u0027unknown\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        of_in_port \u003d msg.match[\u0027in_port\u0027]"},{"line_number":64,"context_line":"        LOG.info(\"DHCP Controller packet in OF port: %s\", of_in_port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"84324f3f_de3061ea","line":61,"updated":"2021-02-01 18:12:36.000000000","message":"Should this be returning early?  Or you\u0027re just decoding this for debugging?","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a397f0517bb3c5634663b876c054b2f27d94142b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        elif msg.reason \u003d\u003d ofproto.OFPR_INVALID_TTL:"},{"line_number":59,"context_line":"            reason \u003d \u0027INVALID TTL\u0027"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            reason \u003d \u0027unknown\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        of_in_port \u003d msg.match[\u0027in_port\u0027]"},{"line_number":64,"context_line":"        LOG.info(\"DHCP Controller packet in OF port: %s\", of_in_port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"8464e9b7_270610ba","line":61,"in_reply_to":"84324f3f_de3061ea","updated":"2021-02-03 04:23:03.000000000","message":"Done","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"efe5085b79c053a5f59bd36256bd72308c85a4ee","unresolved":true,"context_lines":[{"line_number":84,"context_line":"        if self.version \u003d\u003d \"v4\":"},{"line_number":85,"context_line":"            dhcp_protocol \u003d dhcp.dhcp"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            dhcp_protocol \u003d dhcp6.dhcp6"},{"line_number":88,"context_line":"        dhcp_pkt \u003d pkt.get_protocol(dhcp_protocol)"},{"line_number":89,"context_line":"        if not dhcp_pkt:"},{"line_number":90,"context_line":"            LOG.info(\"DHCP Controller received packet is not a DHCP%s packet\","}],"source_content_type":"text/x-python","patch_set":1,"id":"5e1f13f6_a1223417","line":87,"updated":"2021-02-01 18:12:36.000000000","message":"Could just as easily assign these above and remove this second if/else","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a397f0517bb3c5634663b876c054b2f27d94142b","unresolved":true,"context_lines":[{"line_number":84,"context_line":"        if self.version \u003d\u003d \"v4\":"},{"line_number":85,"context_line":"            dhcp_protocol \u003d dhcp.dhcp"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            dhcp_protocol \u003d dhcp6.dhcp6"},{"line_number":88,"context_line":"        dhcp_pkt \u003d pkt.get_protocol(dhcp_protocol)"},{"line_number":89,"context_line":"        if not dhcp_pkt:"},{"line_number":90,"context_line":"            LOG.info(\"DHCP Controller received packet is not a DHCP%s packet\","}],"source_content_type":"text/x-python","patch_set":1,"id":"aa45d0bc_588ea3d6","line":87,"in_reply_to":"5e1f13f6_a1223417","updated":"2021-02-03 04:23:03.000000000","message":"No, line 78 needs to check if it is IPv4 or IPv6 packet, since every packet go in to controller will go through all handlers, see the LOG in line 80.","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"efe5085b79c053a5f59bd36256bd72308c85a4ee","unresolved":true,"context_lines":[{"line_number":118,"context_line":"    def get_port_id_from_br(self, ofport, vif_mac):"},{"line_number":119,"context_line":"        vifs \u003d self.int_br.get_vif_ports()"},{"line_number":120,"context_line":"        for vif in vifs:"},{"line_number":121,"context_line":"            if (vif.ofport \u003d\u003d ofport and vif.vif_mac \u003d\u003d vif_mac):"},{"line_number":122,"context_line":"                return vif.vif_id"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def get_port_ip(self, port_info, ip_version):"}],"source_content_type":"text/x-python","patch_set":1,"id":"b89a39eb_2e5e6307","line":121,"updated":"2021-02-01 18:12:36.000000000","message":"nit: don\u0027t need parens","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a397f0517bb3c5634663b876c054b2f27d94142b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def get_port_id_from_br(self, ofport, vif_mac):"},{"line_number":119,"context_line":"        vifs \u003d self.int_br.get_vif_ports()"},{"line_number":120,"context_line":"        for vif in vifs:"},{"line_number":121,"context_line":"            if (vif.ofport \u003d\u003d ofport and vif.vif_mac \u003d\u003d vif_mac):"},{"line_number":122,"context_line":"                return vif.vif_id"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def get_port_ip(self, port_info, ip_version):"}],"source_content_type":"text/x-python","patch_set":1,"id":"0c25c8f6_aa524800","line":121,"in_reply_to":"b89a39eb_2e5e6307","updated":"2021-02-03 04:23:03.000000000","message":"Done","commit_id":"420d68c7923a32536b071bf5e4eaaaf545d96b82"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"473c9119c5d0a8215acd2ef84a9361c7ac45ffca","unresolved":true,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"DHCP_V4_REQUEST_PORT \u003d 67"},{"line_number":34,"context_line":"DHCP_V4_RESPONSE_PORT \u003d 68"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"DHCP_V6_REQUEST_PORT \u003d 546"},{"line_number":37,"context_line":"DHCP_V6_RESPONSE_PORT \u003d 547"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"IPV4_STR \u003d \"v4\""},{"line_number":40,"context_line":"IPV6_STR \u003d \"v6\""}],"source_content_type":"text/x-python","patch_set":2,"id":"4695c9d2_4390a763","line":37,"range":{"start_line":33,"start_character":0,"end_line":37,"end_character":27},"updated":"2021-02-03 07:28:32.000000000","message":"These are defined in neutron-lib, also please check bug https://bugs.launchpad.net/neutron/+bug/1882588","commit_id":"23cbaac4217c27b4049e8014d469c1977e49ebc2"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f2214c00713f3d746b7d1ceb836a130cb8ee1f6f","unresolved":true,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"DHCP_V4_REQUEST_PORT \u003d 67"},{"line_number":34,"context_line":"DHCP_V4_RESPONSE_PORT \u003d 68"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"DHCP_V6_REQUEST_PORT \u003d 546"},{"line_number":37,"context_line":"DHCP_V6_RESPONSE_PORT \u003d 547"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"IPV4_STR \u003d \"v4\""},{"line_number":40,"context_line":"IPV6_STR \u003d \"v6\""}],"source_content_type":"text/x-python","patch_set":2,"id":"50892e3d_8d534a58","line":37,"range":{"start_line":33,"start_character":0,"end_line":37,"end_character":27},"in_reply_to":"4695c9d2_4390a763","updated":"2021-02-05 02:00:17.000000000","message":"Sure, I will update.","commit_id":"23cbaac4217c27b4049e8014d469c1977e49ebc2"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"53c85732beb7a72bd43eac90c4747c6b4b8d792c","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"DHCP_V4_REQUEST_PORT \u003d 67"},{"line_number":34,"context_line":"DHCP_V4_RESPONSE_PORT \u003d 68"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"DHCP_V6_REQUEST_PORT \u003d 546"},{"line_number":37,"context_line":"DHCP_V6_RESPONSE_PORT \u003d 547"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"IPV4_STR \u003d \"v4\""},{"line_number":40,"context_line":"IPV6_STR \u003d \"v6\""}],"source_content_type":"text/x-python","patch_set":2,"id":"71061164_de3ba171","line":37,"range":{"start_line":33,"start_character":0,"end_line":37,"end_character":27},"in_reply_to":"50892e3d_8d534a58","updated":"2021-02-05 03:14:26.000000000","message":"Done","commit_id":"23cbaac4217c27b4049e8014d469c1977e49ebc2"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"473c9119c5d0a8215acd2ef84a9361c7ac45ffca","unresolved":true,"context_lines":[{"line_number":64,"context_line":"            return"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        of_in_port \u003d msg.match[\u0027in_port\u0027]"},{"line_number":67,"context_line":"        LOG.info(\"DHCP Controller packet in OF port: %s\", of_in_port)"},{"line_number":68,"context_line":"        pkt \u003d packet.Packet(data\u003dmsg.data)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        LOG.debug(\u0027DHCP Controller packet received: \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"d157b566_096fdb04","line":67,"range":{"start_line":67,"start_character":12,"end_line":67,"end_character":16},"updated":"2021-02-03 07:28:32.000000000","message":"should this really be info level?","commit_id":"23cbaac4217c27b4049e8014d469c1977e49ebc2"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f2214c00713f3d746b7d1ceb836a130cb8ee1f6f","unresolved":true,"context_lines":[{"line_number":64,"context_line":"            return"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        of_in_port \u003d msg.match[\u0027in_port\u0027]"},{"line_number":67,"context_line":"        LOG.info(\"DHCP Controller packet in OF port: %s\", of_in_port)"},{"line_number":68,"context_line":"        pkt \u003d packet.Packet(data\u003dmsg.data)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        LOG.debug(\u0027DHCP Controller packet received: \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"38863b68_c8798c23","line":67,"range":{"start_line":67,"start_character":12,"end_line":67,"end_character":16},"in_reply_to":"d157b566_096fdb04","updated":"2021-02-05 02:00:17.000000000","message":"The fact is that DHCP request should be run only few times during VM booting. So this log should be just a little few in principle. But if there are some attacks, this may be useful for operators or cloud log collection system to detect problems in advance.","commit_id":"23cbaac4217c27b4049e8014d469c1977e49ebc2"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"473c9119c5d0a8215acd2ef84a9361c7ac45ffca","unresolved":true,"context_lines":[{"line_number":74,"context_line":"                  msg.table_id, msg.cookie, msg.match,"},{"line_number":75,"context_line":"                  pkt)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        if self.version \u003d\u003d \"v4\":"},{"line_number":78,"context_line":"            ip_protocol \u003d ipv4.ipv4"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            ip_protocol \u003d ipv6.ipv6"},{"line_number":81,"context_line":"        ip_header \u003d pkt.get_protocol(ip_protocol)"},{"line_number":82,"context_line":"        if not ip_header:"},{"line_number":83,"context_line":"            LOG.info(\"DHCP Controller received packet is not an IP%s packet\","},{"line_number":84,"context_line":"                     self.version)"},{"line_number":85,"context_line":"            return"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if self.version \u003d\u003d \"v4\":"},{"line_number":88,"context_line":"            dhcp_protocol \u003d dhcp.dhcp"},{"line_number":89,"context_line":"        else:"},{"line_number":90,"context_line":"            dhcp_protocol \u003d dhcp6.dhcp6"},{"line_number":91,"context_line":"        dhcp_pkt \u003d pkt.get_protocol(dhcp_protocol)"},{"line_number":92,"context_line":"        if not dhcp_pkt:"},{"line_number":93,"context_line":"            LOG.info(\"DHCP Controller received packet is not a DHCP%s packet\","},{"line_number":94,"context_line":"                     self.version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"552d67fe_a65dc28a","line":91,"range":{"start_line":77,"start_character":8,"end_line":91,"end_character":50},"updated":"2021-02-03 07:28:32.000000000","message":"Consider single if-else block for both","commit_id":"23cbaac4217c27b4049e8014d469c1977e49ebc2"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f2214c00713f3d746b7d1ceb836a130cb8ee1f6f","unresolved":true,"context_lines":[{"line_number":74,"context_line":"                  msg.table_id, msg.cookie, msg.match,"},{"line_number":75,"context_line":"                  pkt)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        if self.version \u003d\u003d \"v4\":"},{"line_number":78,"context_line":"            ip_protocol \u003d ipv4.ipv4"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            ip_protocol \u003d ipv6.ipv6"},{"line_number":81,"context_line":"        ip_header \u003d pkt.get_protocol(ip_protocol)"},{"line_number":82,"context_line":"        if not ip_header:"},{"line_number":83,"context_line":"            LOG.info(\"DHCP Controller received packet is not an IP%s packet\","},{"line_number":84,"context_line":"                     self.version)"},{"line_number":85,"context_line":"            return"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if self.version \u003d\u003d \"v4\":"},{"line_number":88,"context_line":"            dhcp_protocol \u003d dhcp.dhcp"},{"line_number":89,"context_line":"        else:"},{"line_number":90,"context_line":"            dhcp_protocol \u003d dhcp6.dhcp6"},{"line_number":91,"context_line":"        dhcp_pkt \u003d pkt.get_protocol(dhcp_protocol)"},{"line_number":92,"context_line":"        if not dhcp_pkt:"},{"line_number":93,"context_line":"            LOG.info(\"DHCP Controller received packet is not a DHCP%s packet\","},{"line_number":94,"context_line":"                     self.version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c7b3d5ca_d3cd6761","line":91,"range":{"start_line":77,"start_character":8,"end_line":91,"end_character":50},"in_reply_to":"552d67fe_a65dc28a","updated":"2021-02-05 02:00:17.000000000","message":"Every step here includes strict header checking to avoid request forgery.","commit_id":"23cbaac4217c27b4049e8014d469c1977e49ebc2"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"77e9783f27f378775b8553ce39bf9d25f580a63d","unresolved":true,"context_lines":[{"line_number":74,"context_line":"                  msg.table_id, msg.cookie, msg.match,"},{"line_number":75,"context_line":"                  pkt)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        if self.version \u003d\u003d \"v4\":"},{"line_number":78,"context_line":"            ip_protocol \u003d ipv4.ipv4"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            ip_protocol \u003d ipv6.ipv6"},{"line_number":81,"context_line":"        ip_header \u003d pkt.get_protocol(ip_protocol)"},{"line_number":82,"context_line":"        if not ip_header:"},{"line_number":83,"context_line":"            LOG.info(\"DHCP Controller received packet is not an IP%s packet\","},{"line_number":84,"context_line":"                     self.version)"},{"line_number":85,"context_line":"            return"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if self.version \u003d\u003d \"v4\":"},{"line_number":88,"context_line":"            dhcp_protocol \u003d dhcp.dhcp"},{"line_number":89,"context_line":"        else:"},{"line_number":90,"context_line":"            dhcp_protocol \u003d dhcp6.dhcp6"},{"line_number":91,"context_line":"        dhcp_pkt \u003d pkt.get_protocol(dhcp_protocol)"},{"line_number":92,"context_line":"        if not dhcp_pkt:"},{"line_number":93,"context_line":"            LOG.info(\"DHCP Controller received packet is not a DHCP%s packet\","},{"line_number":94,"context_line":"                     self.version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"2c01679e_69bfe448","line":91,"range":{"start_line":77,"start_character":8,"end_line":91,"end_character":50},"in_reply_to":"c7b3d5ca_d3cd6761","updated":"2021-02-05 07:33:11.000000000","message":"Just meant:\n\n  if self.version \u003d\u003d \"v4\":\n    ip_protocol \u003d ipv4.ipv4\n    dhcp_protocol \u003d dhcp.dhcp\n  else:\n    ip_protocol \u003d ipv6.ipv6\n    dhcp_protocol \u003d dhcp.dhcp6","commit_id":"23cbaac4217c27b4049e8014d469c1977e49ebc2"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"914f37c7623fc433e7efc1aa0ce79e8c2c2a5885","unresolved":true,"context_lines":[{"line_number":38,"context_line":"DHCP_V6_RESPONSE_PORT \u003d constants.DHCPV6_RESPONSE_PORT"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"IPV4_STR \u003d \"v4\""},{"line_number":41,"context_line":"IPV6_STR \u003d \"v6\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class DHCPResponderBase(base_oskenapp.BaseNeutronAgentOSKenApp):"}],"source_content_type":"text/x-python","patch_set":7,"id":"c47d285c_c8f06112","line":41,"updated":"2021-03-03 11:07:49.000000000","message":"can\u0027t You use neutron_lib.constants.IPv4 and IPv6 instead?","commit_id":"3bc4a357549d0e9a87f10ec798f59bc0fab1e792"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"76fcf7a2d705ae6e9b809f551ae72a54a3b78109","unresolved":false,"context_lines":[{"line_number":38,"context_line":"DHCP_V6_RESPONSE_PORT \u003d constants.DHCPV6_RESPONSE_PORT"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"IPV4_STR \u003d \"v4\""},{"line_number":41,"context_line":"IPV6_STR \u003d \"v6\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class DHCPResponderBase(base_oskenapp.BaseNeutronAgentOSKenApp):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ccc16894_f508ed81","line":41,"in_reply_to":"c47d285c_c8f06112","updated":"2021-03-05 08:04:08.000000000","message":"Seems negtive, there are some logs which will assemble the word \"DHCP%s\" % (\"v4\"/\"v6\"). But the neutron_lib.constants.IPv4/6 is \"IPv4\"/\"IPv6\". Then the final word is not as expected.","commit_id":"3bc4a357549d0e9a87f10ec798f59bc0fab1e792"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"914f37c7623fc433e7efc1aa0ce79e8c2c2a5885","unresolved":true,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if msg.reason !\u003d ofproto.OFPR_ACTION:"},{"line_number":63,"context_line":"            LOG.debug(\"DHCP Controller only handle the packet which \""},{"line_number":64,"context_line":"                      \"match the rules and the action is send to controller.\")"},{"line_number":65,"context_line":"            return"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        of_in_port \u003d msg.match[\u0027in_port\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"5563b84f_9240d43f","line":64,"range":{"start_line":64,"start_character":65,"end_line":64,"end_character":75},"updated":"2021-03-03 11:07:49.000000000","message":"I think it should be \"the controller\" here","commit_id":"3bc4a357549d0e9a87f10ec798f59bc0fab1e792"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"76fcf7a2d705ae6e9b809f551ae72a54a3b78109","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if msg.reason !\u003d ofproto.OFPR_ACTION:"},{"line_number":63,"context_line":"            LOG.debug(\"DHCP Controller only handle the packet which \""},{"line_number":64,"context_line":"                      \"match the rules and the action is send to controller.\")"},{"line_number":65,"context_line":"            return"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        of_in_port \u003d msg.match[\u0027in_port\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"41e0247b_2bd3396b","line":64,"range":{"start_line":64,"start_character":65,"end_line":64,"end_character":75},"in_reply_to":"5563b84f_9240d43f","updated":"2021-03-05 08:04:08.000000000","message":"Done","commit_id":"3bc4a357549d0e9a87f10ec798f59bc0fab1e792"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"914f37c7623fc433e7efc1aa0ce79e8c2c2a5885","unresolved":true,"context_lines":[{"line_number":75,"context_line":"                  msg.table_id, msg.cookie, msg.match,"},{"line_number":76,"context_line":"                  pkt)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        if self.version \u003d\u003d \"v4\":"},{"line_number":79,"context_line":"            ip_protocol \u003d ipv4.ipv4"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            ip_protocol \u003d ipv6.ipv6"}],"source_content_type":"text/x-python","patch_set":7,"id":"7d7de7d7_59c00888","line":78,"range":{"start_line":78,"start_character":28,"end_line":78,"end_character":30},"updated":"2021-03-03 11:07:49.000000000","message":"if You already have defined constant on top of that file, why You don\u0027t use it here?","commit_id":"3bc4a357549d0e9a87f10ec798f59bc0fab1e792"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"76fcf7a2d705ae6e9b809f551ae72a54a3b78109","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                  msg.table_id, msg.cookie, msg.match,"},{"line_number":76,"context_line":"                  pkt)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        if self.version \u003d\u003d \"v4\":"},{"line_number":79,"context_line":"            ip_protocol \u003d ipv4.ipv4"},{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            ip_protocol \u003d ipv6.ipv6"}],"source_content_type":"text/x-python","patch_set":7,"id":"07bb575f_e75dcdc5","line":78,"range":{"start_line":78,"start_character":28,"end_line":78,"end_character":30},"in_reply_to":"7d7de7d7_59c00888","updated":"2021-03-05 08:04:08.000000000","message":"Done","commit_id":"3bc4a357549d0e9a87f10ec798f59bc0fab1e792"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d5d505dc46cf04fd362f5a205abca7b85852a20d","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DHCP_V4_REQUEST_PORT \u003d constants.DHCP_RESPONSE_PORT"},{"line_number":38,"context_line":"DHCP_V4_RESPONSE_PORT \u003d constants.DHCP_CLIENT_PORT"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"DHCP_V6_REQUEST_PORT \u003d constants.DHCPV6_CLIENT_PORT"},{"line_number":41,"context_line":"DHCP_V6_RESPONSE_PORT \u003d constants.DHCPV6_RESPONSE_PORT"}],"source_content_type":"text/x-python","patch_set":8,"id":"d781126e_158ceea6","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":50},"updated":"2021-03-09 08:41:33.000000000","message":"why vice versa here?","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0a0fac17fc1594472592c970f5aeb818362388fb","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DHCP_V4_REQUEST_PORT \u003d constants.DHCP_RESPONSE_PORT"},{"line_number":38,"context_line":"DHCP_V4_RESPONSE_PORT \u003d constants.DHCP_CLIENT_PORT"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"DHCP_V6_REQUEST_PORT \u003d constants.DHCPV6_CLIENT_PORT"},{"line_number":41,"context_line":"DHCP_V6_RESPONSE_PORT \u003d constants.DHCPV6_RESPONSE_PORT"}],"source_content_type":"text/x-python","patch_set":8,"id":"b19e9ea3_dace9c32","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":50},"in_reply_to":"000278e6_1ab213db","updated":"2021-03-09 17:00:31.000000000","message":"I would agree, lets just use the constants we have","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b3bcbd728902f38fc7b6b21e64154d8415935626","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DHCP_V4_REQUEST_PORT \u003d constants.DHCP_RESPONSE_PORT"},{"line_number":38,"context_line":"DHCP_V4_RESPONSE_PORT \u003d constants.DHCP_CLIENT_PORT"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"DHCP_V6_REQUEST_PORT \u003d constants.DHCPV6_CLIENT_PORT"},{"line_number":41,"context_line":"DHCP_V6_RESPONSE_PORT \u003d constants.DHCPV6_RESPONSE_PORT"}],"source_content_type":"text/x-python","patch_set":8,"id":"000278e6_1ab213db","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":50},"in_reply_to":"6aa94516_7b6e9c38","updated":"2021-03-09 11:09:42.000000000","message":"Let\u0027s be consistent in neutron and neutron lib, https://bugs.launchpad.net/neutron/+bug/1882588 - we don\u0027t need to confuse things even more","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6363e636bb0db16e6d0759d464bb6651c39f22a3","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"DHCP_V4_REQUEST_PORT \u003d constants.DHCP_RESPONSE_PORT"},{"line_number":38,"context_line":"DHCP_V4_RESPONSE_PORT \u003d constants.DHCP_CLIENT_PORT"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"DHCP_V6_REQUEST_PORT \u003d constants.DHCPV6_CLIENT_PORT"},{"line_number":41,"context_line":"DHCP_V6_RESPONSE_PORT \u003d constants.DHCPV6_RESPONSE_PORT"}],"source_content_type":"text/x-python","patch_set":8,"id":"6aa94516_7b6e9c38","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":50},"in_reply_to":"d781126e_158ceea6","updated":"2021-03-09 08:55:25.000000000","message":"All from the perpective of VM, VM is the client, then it requests the server port is 67.","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d5d505dc46cf04fd362f5a205abca7b85852a20d","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        self.hw_addr \u003d cfg.CONF.base_mac"},{"line_number":58,"context_line":"        self.register_packet_in_handler(self._packet_in_handler)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _packet_in_handler(self, ev):"},{"line_number":61,"context_line":"        msg \u003d ev.msg"},{"line_number":62,"context_line":"        datapath \u003d msg.datapath"},{"line_number":63,"context_line":"        ofproto \u003d datapath.ofproto"}],"source_content_type":"text/x-python","patch_set":8,"id":"6dbae00a_7da7ce02","line":60,"range":{"start_line":60,"start_character":33,"end_line":60,"end_character":35},"updated":"2021-03-09 08:41:33.000000000","message":"what is ev?","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6363e636bb0db16e6d0759d464bb6651c39f22a3","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        self.hw_addr \u003d cfg.CONF.base_mac"},{"line_number":58,"context_line":"        self.register_packet_in_handler(self._packet_in_handler)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _packet_in_handler(self, ev):"},{"line_number":61,"context_line":"        msg \u003d ev.msg"},{"line_number":62,"context_line":"        datapath \u003d msg.datapath"},{"line_number":63,"context_line":"        ofproto \u003d datapath.ofproto"}],"source_content_type":"text/x-python","patch_set":8,"id":"b44131fa_0bbe35db","line":60,"range":{"start_line":60,"start_character":33,"end_line":60,"end_character":35},"in_reply_to":"6dbae00a_7da7ce02","updated":"2021-03-09 08:55:25.000000000","message":"It\u0027s a common param of ryu, represent for \u0027event\u0027.\nhttps://github.com/openstack/os-ken/blob/master/os_ken/base/app_manager.py#L229","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d5d505dc46cf04fd362f5a205abca7b85852a20d","unresolved":true,"context_lines":[{"line_number":80,"context_line":"                  pkt)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        if self.version \u003d\u003d IPV4_STR:"},{"line_number":83,"context_line":"            ip_protocol \u003d ipv4.ipv4"},{"line_number":84,"context_line":"        else:"},{"line_number":85,"context_line":"            ip_protocol \u003d ipv6.ipv6"},{"line_number":86,"context_line":"        ip_header \u003d pkt.get_protocol(ip_protocol)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fc7c1cac_e28333f9","line":83,"updated":"2021-03-09 08:41:33.000000000","message":"please add here \u0027dhcp_protocol \u003d dhcp.dhcp\u0027 (same for \u0027else\u0027 block) and can remove #92-95","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"03306df51bb35ba576d35d665a478b5c6b6dd500","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                  pkt)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        if self.version \u003d\u003d IPV4_STR:"},{"line_number":83,"context_line":"            ip_protocol \u003d ipv4.ipv4"},{"line_number":84,"context_line":"        else:"},{"line_number":85,"context_line":"            ip_protocol \u003d ipv6.ipv6"},{"line_number":86,"context_line":"        ip_header \u003d pkt.get_protocol(ip_protocol)"}],"source_content_type":"text/x-python","patch_set":8,"id":"2ce25e4c_6d007cdf","line":83,"in_reply_to":"fc7c1cac_e28333f9","updated":"2021-03-10 02:05:12.000000000","message":"Done","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d5d505dc46cf04fd362f5a205abca7b85852a20d","unresolved":true,"context_lines":[{"line_number":85,"context_line":"            ip_protocol \u003d ipv6.ipv6"},{"line_number":86,"context_line":"        ip_header \u003d pkt.get_protocol(ip_protocol)"},{"line_number":87,"context_line":"        if not ip_header:"},{"line_number":88,"context_line":"            LOG.info(\"DHCP Controller received packet is not an IP%s packet\","},{"line_number":89,"context_line":"                     self.version)"},{"line_number":90,"context_line":"            return"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"00ac8a98_dc210609","line":88,"range":{"start_line":88,"start_character":21,"end_line":88,"end_character":76},"updated":"2021-03-09 08:41:33.000000000","message":"Why is it a valuable info for operator? What can he/she do with it? IMO it should be either debug or warn level, depending if it\u0027s ok or not.","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"cd9413d077727b62f7ac7f0730c5a95cb0e07c5c","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            ip_protocol \u003d ipv6.ipv6"},{"line_number":86,"context_line":"        ip_header \u003d pkt.get_protocol(ip_protocol)"},{"line_number":87,"context_line":"        if not ip_header:"},{"line_number":88,"context_line":"            LOG.info(\"DHCP Controller received packet is not an IP%s packet\","},{"line_number":89,"context_line":"                     self.version)"},{"line_number":90,"context_line":"            return"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"f08e46d0_6a01a28b","line":88,"range":{"start_line":88,"start_character":21,"end_line":88,"end_character":76},"in_reply_to":"00ac8a98_dc210609","updated":"2021-03-09 09:05:12.000000000","message":"My idea is to notify LOG system or administor that there may have something wrong from the user. Or maybe bad thing, like attack from users\u0027 VM. Why not set it to warning is because info level may not hurt the LOG system too much, otherwise, the WARNING may give the LOG monitor system some pressure. But, anyway, I will change this to warning level.","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d5d505dc46cf04fd362f5a205abca7b85852a20d","unresolved":true,"context_lines":[{"line_number":95,"context_line":"            dhcp_protocol \u003d dhcp6.dhcp6"},{"line_number":96,"context_line":"        dhcp_pkt \u003d pkt.get_protocol(dhcp_protocol)"},{"line_number":97,"context_line":"        if not dhcp_pkt:"},{"line_number":98,"context_line":"            LOG.info(\"DHCP Controller received packet is not a DHCP%s packet\","},{"line_number":99,"context_line":"                     self.version)"},{"line_number":100,"context_line":"            return"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        eth_pkt \u003d pkt.get_protocol(ethernet.ethernet)"}],"source_content_type":"text/x-python","patch_set":8,"id":"d99a1b97_ca67f18c","line":99,"range":{"start_line":98,"start_character":12,"end_line":99,"end_character":34},"updated":"2021-03-09 08:41:33.000000000","message":"ditto","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"cd9413d077727b62f7ac7f0730c5a95cb0e07c5c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            dhcp_protocol \u003d dhcp6.dhcp6"},{"line_number":96,"context_line":"        dhcp_pkt \u003d pkt.get_protocol(dhcp_protocol)"},{"line_number":97,"context_line":"        if not dhcp_pkt:"},{"line_number":98,"context_line":"            LOG.info(\"DHCP Controller received packet is not a DHCP%s packet\","},{"line_number":99,"context_line":"                     self.version)"},{"line_number":100,"context_line":"            return"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        eth_pkt \u003d pkt.get_protocol(ethernet.ethernet)"}],"source_content_type":"text/x-python","patch_set":8,"id":"13b1b6e8_694d56c6","line":99,"range":{"start_line":98,"start_character":12,"end_line":99,"end_character":34},"in_reply_to":"d99a1b97_ca67f18c","updated":"2021-03-09 09:05:12.000000000","message":"Done","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"}],"neutron/tests/unit/agent/l2/extensions/dhcp/test_base.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d5d505dc46cf04fd362f5a205abca7b85852a20d","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        self.base_responer.get_port_id_from_br \u003d mock.Mock()"},{"line_number":162,"context_line":"        self.base_responer.get_port_id_from_br.return_value \u003d ("},{"line_number":163,"context_line":"            PORT_INFO[\u0027port_id\u0027])"},{"line_number":164,"context_line":"        self.ext_api.get_port_info \u003d mock.Mock()"},{"line_number":165,"context_line":"        self.ext_api.get_port_info.return_value \u003d PORT_INFO"},{"line_number":166,"context_line":"        self.base_responer._packet_in_handler(ev)"},{"line_number":167,"context_line":"        self.base_responer.handle_dhcp.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":8,"id":"a13a53b3_b096a978","line":164,"range":{"start_line":164,"start_character":8,"end_line":164,"end_character":48},"updated":"2021-03-09 08:41:33.000000000","message":"nit: it\u0027s already mock","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b3bcbd728902f38fc7b6b21e64154d8415935626","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        self.base_responer.get_port_id_from_br \u003d mock.Mock()"},{"line_number":162,"context_line":"        self.base_responer.get_port_id_from_br.return_value \u003d ("},{"line_number":163,"context_line":"            PORT_INFO[\u0027port_id\u0027])"},{"line_number":164,"context_line":"        self.ext_api.get_port_info \u003d mock.Mock()"},{"line_number":165,"context_line":"        self.ext_api.get_port_info.return_value \u003d PORT_INFO"},{"line_number":166,"context_line":"        self.base_responer._packet_in_handler(ev)"},{"line_number":167,"context_line":"        self.base_responer.handle_dhcp.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":8,"id":"f42c607b_1cc5ce66","line":164,"range":{"start_line":164,"start_character":8,"end_line":164,"end_character":48},"in_reply_to":"88a9d681_b875575f","updated":"2021-03-09 11:09:42.000000000","message":"if ext_api is mocked, then ext_api.\u003canything\u003e is also a Mock() object","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6363e636bb0db16e6d0759d464bb6651c39f22a3","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        self.base_responer.get_port_id_from_br \u003d mock.Mock()"},{"line_number":162,"context_line":"        self.base_responer.get_port_id_from_br.return_value \u003d ("},{"line_number":163,"context_line":"            PORT_INFO[\u0027port_id\u0027])"},{"line_number":164,"context_line":"        self.ext_api.get_port_info \u003d mock.Mock()"},{"line_number":165,"context_line":"        self.ext_api.get_port_info.return_value \u003d PORT_INFO"},{"line_number":166,"context_line":"        self.base_responer._packet_in_handler(ev)"},{"line_number":167,"context_line":"        self.base_responer.handle_dhcp.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":8,"id":"88a9d681_b875575f","line":164,"range":{"start_line":164,"start_character":8,"end_line":164,"end_character":48},"in_reply_to":"a13a53b3_b096a978","updated":"2021-03-09 08:55:25.000000000","message":"ext_api is mocked, but this method get_port_info  is not.","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"e5caaf3c01af196a81230d5f2e25ed4f57d80619","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        self.base_responer.get_port_id_from_br \u003d mock.Mock()"},{"line_number":162,"context_line":"        self.base_responer.get_port_id_from_br.return_value \u003d ("},{"line_number":163,"context_line":"            PORT_INFO[\u0027port_id\u0027])"},{"line_number":164,"context_line":"        self.ext_api.get_port_info \u003d mock.Mock()"},{"line_number":165,"context_line":"        self.ext_api.get_port_info.return_value \u003d PORT_INFO"},{"line_number":166,"context_line":"        self.base_responer._packet_in_handler(ev)"},{"line_number":167,"context_line":"        self.base_responer.handle_dhcp.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":8,"id":"a5062d92_48392a62","line":164,"range":{"start_line":164,"start_character":8,"end_line":164,"end_character":48},"in_reply_to":"f42c607b_1cc5ce66","updated":"2021-03-10 01:58:40.000000000","message":"IMO. it\u0027s better to make it explicit.","commit_id":"22310ca64ec4f5159d09606f9722cc5cfc97834f"}]}
