)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"d2740da574f1adedc49979fc3e2f0f777de47811","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-09-26 09:57:23 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Infiniband Support for IPA"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I4e7f7649a1bdeaa3ee99b2748037b0f37fea486c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa6399be_d43a3498","line":8,"updated":"2016-10-17 15:55:00.000000000","message":"This needs to reference https://bugs.launchpad.net/ironic/+bug/1532534 as it\u0027s closing a bug.","commit_id":"1083c9fc843c63916a7ad57c63d458769d15c99b"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"8a657bd50dcb61f6cf47b349834130525db158d8","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-09-26 09:57:23 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Infiniband Support for IPA"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I4e7f7649a1bdeaa3ee99b2748037b0f37fea486c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa6399be_f3562405","line":8,"in_reply_to":"fa6399be_d43a3498","updated":"2016-10-19 08:22:47.000000000","message":"Done","commit_id":"1083c9fc843c63916a7ad57c63d458769d15c99b"}],"ironic_python_agent/hardware.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"d2740da574f1adedc49979fc3e2f0f777de47811","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        self.lldp \u003d lldp"},{"line_number":222,"context_line":"        self.vendor \u003d vendor"},{"line_number":223,"context_line":"        self.product \u003d product"},{"line_number":224,"context_line":"        self.client_id \u003d client_id"},{"line_number":225,"context_line":"        # TODO(sambetts) Remove these fields in Ocata, they have been"},{"line_number":226,"context_line":"        # superseded by self.lldp"},{"line_number":227,"context_line":"        self.switch_port_descr \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa6399be_149d8c59","line":224,"updated":"2016-10-17 15:55:00.000000000","message":"client_id is not a term I\u0027m familiar with? Is this standard for infiniband? I googled for \u0027infiniband client id\u0027 and this patch was pretty high up in the list.\n\nShould this be named something else for clarity? At a minimum, can you document exactly what client_id means in this context?\n\nFor bonus points: add a pydoc for this whole NetworkInterface identifying what every field is.","commit_id":"1083c9fc843c63916a7ad57c63d458769d15c99b"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"8a657bd50dcb61f6cf47b349834130525db158d8","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        self.lldp \u003d lldp"},{"line_number":222,"context_line":"        self.vendor \u003d vendor"},{"line_number":223,"context_line":"        self.product \u003d product"},{"line_number":224,"context_line":"        self.client_id \u003d client_id"},{"line_number":225,"context_line":"        # TODO(sambetts) Remove these fields in Ocata, they have been"},{"line_number":226,"context_line":"        # superseded by self.lldp"},{"line_number":227,"context_line":"        self.switch_port_descr \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa6399be_446d4498","line":224,"in_reply_to":"fa6399be_149d8c59","updated":"2016-10-19 08:22:47.000000000","message":"Done","commit_id":"1083c9fc843c63916a7ad57c63d458769d15c99b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8942c74c7cd9056ebb559d57cc7286ce164ae294","unresolved":false,"context_lines":[{"line_number":509,"context_line":"            address \u003d addr_file.read().strip()"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        vendor \u003d _get_device_info(interface_name, \u0027net\u0027, \u0027vendor\u0027)"},{"line_number":512,"context_line":"        client_id \u003d None"},{"line_number":513,"context_line":"        if len(address) \u003d\u003d netutils.INFINIBAND_ADDR_LEN:"},{"line_number":514,"context_line":"            mac_addr \u003d netutils.infiniband_address_to_mac(address, vendor)"},{"line_number":515,"context_line":"            client_id \u003d netutils.generate_client_id(address, vendor)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_2a0624ce","line":512,"updated":"2016-10-20 11:37:35.000000000","message":"nit: this could go to the \"else\" branch","commit_id":"a41f9a97e902a304a458103c876c47af77216cfc"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"a15ac18c8dc12dc49c9781a14e0731daf3ce2a7b","unresolved":false,"context_lines":[{"line_number":510,"context_line":"            mac_addr \u003d addr_file.read().strip()"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        if len(mac_addr) \u003d\u003d netutils.INFINIBAND_ADDR_LEN:"},{"line_number":513,"context_line":"            raise errors.IncompatibleHardwareMethodError"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        return NetworkInterface("},{"line_number":516,"context_line":"            interface_name, mac_addr,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a77a97e_405e5f46","line":513,"updated":"2016-11-14 22:48:20.000000000","message":"This will completely fail IPA in situations where your new hardware manager isn\u0027t loaded, and there\u0027s an infiniband nic. Is this intended? Given your new manager only handles Mellanox NICs, I suspect this could break folks in some otherwise-working cases.","commit_id":"b085842e7e8bf42ee444f933bc049f7e0e2bdc4d"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"60307919f60559089f2a049d4e6fb09e2f4792eb","unresolved":false,"context_lines":[{"line_number":510,"context_line":"            mac_addr \u003d addr_file.read().strip()"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        if len(mac_addr) \u003d\u003d netutils.INFINIBAND_ADDR_LEN:"},{"line_number":513,"context_line":"            raise errors.IncompatibleHardwareMethodError"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        return NetworkInterface("},{"line_number":516,"context_line":"            interface_name, mac_addr,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a77a97e_befd563c","line":513,"in_reply_to":"7a77a97e_0b970391","updated":"2016-11-16 06:19:53.000000000","message":"ok got it, thanks","commit_id":"b085842e7e8bf42ee444f933bc049f7e0e2bdc4d"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"dd6b5c2bffed64bc801c0c03684662f7f9506565","unresolved":false,"context_lines":[{"line_number":510,"context_line":"            mac_addr \u003d addr_file.read().strip()"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        if len(mac_addr) \u003d\u003d netutils.INFINIBAND_ADDR_LEN:"},{"line_number":513,"context_line":"            raise errors.IncompatibleHardwareMethodError"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        return NetworkInterface("},{"line_number":516,"context_line":"            interface_name, mac_addr,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a77a97e_0b970391","line":513,"in_reply_to":"7a77a97e_39b515cd","updated":"2016-11-15 16:15:05.000000000","message":"This code is used to more than inspection -- it\u0027s also used for deployment and cleaning, to fetch MAC addresses for lookup. This is why it\u0027s an important issue to fix.","commit_id":"b085842e7e8bf42ee444f933bc049f7e0e2bdc4d"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e97a094136771ef5a105326b6f264a640d824839","unresolved":false,"context_lines":[{"line_number":510,"context_line":"            mac_addr \u003d addr_file.read().strip()"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        if len(mac_addr) \u003d\u003d netutils.INFINIBAND_ADDR_LEN:"},{"line_number":513,"context_line":"            raise errors.IncompatibleHardwareMethodError"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        return NetworkInterface("},{"line_number":516,"context_line":"            interface_name, mac_addr,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a77a97e_39b515cd","line":513,"in_reply_to":"7a77a97e_405e5f46","updated":"2016-11-15 06:53:30.000000000","message":"not really because ironic-inpsector validate the address of the interface see https://github.com/openstack/ironic-inspector/blob/master/ironic_inspector/plugins/standard.py#L180 and skip if it not mac address. \nso basically if Mellanox hardware manager is not loaded and \nwe will catch this exception","commit_id":"b085842e7e8bf42ee444f933bc049f7e0e2bdc4d"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"ceceafe38a3e040bf02081b756e0af8d89af6d55","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        self.product \u003d product"},{"line_number":222,"context_line":"        # client_id is used for InfiniBand only. we calculate the DHCP"},{"line_number":223,"context_line":"        # client identifier Option to allow DHCP to work over InfiniBand."},{"line_number":224,"context_line":"        # see https://tools.ietf.org/html/rfc4390"},{"line_number":225,"context_line":"        self.client_id \u003d client_id"},{"line_number":226,"context_line":"        # TODO(sambetts) Remove these fields in Ocata, they have been"},{"line_number":227,"context_line":"        # superseded by self.lldp"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_4cb99178","line":224,"range":{"start_line":224,"start_character":14,"end_line":224,"end_character":49},"updated":"2016-11-17 22:17:44.000000000","message":"Is it OK to put URLs like this in comments? I think it\u0027s OK here since it\u0027s an IETF URL, but I wanted to point it out.","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"93aeadd67ccee3f2a2adaa6e4a9401d7f9e8c86a","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        self.product \u003d product"},{"line_number":222,"context_line":"        # client_id is used for InfiniBand only. we calculate the DHCP"},{"line_number":223,"context_line":"        # client identifier Option to allow DHCP to work over InfiniBand."},{"line_number":224,"context_line":"        # see https://tools.ietf.org/html/rfc4390"},{"line_number":225,"context_line":"        self.client_id \u003d client_id"},{"line_number":226,"context_line":"        # TODO(sambetts) Remove these fields in Ocata, they have been"},{"line_number":227,"context_line":"        # superseded by self.lldp"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_329d8e0a","line":224,"range":{"start_line":224,"start_character":14,"end_line":224,"end_character":49},"in_reply_to":"7a77a97e_4cb99178","updated":"2016-11-17 23:12:45.000000000","message":"I would say linking to RFCs in code comments is not only OK; it\u0027s awesome and should be encouraged :D","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"}],"ironic_python_agent/hardware_managers/mlnx.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"a15ac18c8dc12dc49c9781a14e0731daf3ce2a7b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"class MellanoxDeviceHardwareManager(hardware.HardwareManager):"},{"line_number":61,"context_line":"    \"\"\"Mellanox hardware manager to support a single device\"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # All hardware managers have a name and a version."},{"line_number":64,"context_line":"    # Version should be bumped anytime a change is introduced. This will"},{"line_number":65,"context_line":"    # signal to Ironic that if automatic node cleaning is in progress to"},{"line_number":66,"context_line":"    # restart it from the beginning, to ensure consistency. The value can"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a77a97e_003b87ec","line":63,"updated":"2016-11-14 22:48:20.000000000","message":"You can drop all the extra-verbose comments from my cookie cutter hardware manager :)","commit_id":"b085842e7e8bf42ee444f933bc049f7e0e2bdc4d"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e97a094136771ef5a105326b6f264a640d824839","unresolved":false,"context_lines":[{"line_number":60,"context_line":"class MellanoxDeviceHardwareManager(hardware.HardwareManager):"},{"line_number":61,"context_line":"    \"\"\"Mellanox hardware manager to support a single device\"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    # All hardware managers have a name and a version."},{"line_number":64,"context_line":"    # Version should be bumped anytime a change is introduced. This will"},{"line_number":65,"context_line":"    # signal to Ironic that if automatic node cleaning is in progress to"},{"line_number":66,"context_line":"    # restart it from the beginning, to ensure consistency. The value can"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a77a97e_f908fd93","line":63,"in_reply_to":"7a77a97e_003b87ec","updated":"2016-11-15 06:53:30.000000000","message":"Done","commit_id":"b085842e7e8bf42ee444f933bc049f7e0e2bdc4d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7b789132993a3156f49b7340f5e9f288068c780a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        \"\"\"Declare level of hardware support provided.\"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        if _detect_hardware():"},{"line_number":67,"context_line":"            LOG.debug(\u0027Found Mellanox device, returning MAINLINE\u0027)"},{"line_number":68,"context_line":"            return hardware.HardwareSupport.MAINLINE"},{"line_number":69,"context_line":"        else:"},{"line_number":70,"context_line":"            LOG.debug(\u0027No Mellanox devices found, returning NONE\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_c245be70","line":67,"range":{"start_line":67,"start_character":46,"end_line":67,"end_character":64},"updated":"2016-11-16 13:46:00.000000000","message":"MAINLINE is just the name of the variable and operators looking at the logs won\u0027t know what it means (nor they should). Same for NONE on L70.\n\nI think that \"Mellanox devices found\" and \"No Mellanox devices were found\" is already self-explanatory.","commit_id":"d153037acce522c70d6e2c335adc70ee60fe055a"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"1576881cd439122a1bc08e2686f66f7de9e725d8","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        \"\"\"Declare level of hardware support provided.\"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        if _detect_hardware():"},{"line_number":67,"context_line":"            LOG.debug(\u0027Found Mellanox device, returning MAINLINE\u0027)"},{"line_number":68,"context_line":"            return hardware.HardwareSupport.MAINLINE"},{"line_number":69,"context_line":"        else:"},{"line_number":70,"context_line":"            LOG.debug(\u0027No Mellanox devices found, returning NONE\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_855f50e4","line":67,"range":{"start_line":67,"start_character":46,"end_line":67,"end_character":64},"in_reply_to":"7a77a97e_c245be70","updated":"2016-11-16 14:16:27.000000000","message":"Done","commit_id":"d153037acce522c70d6e2c335adc70ee60fe055a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7b789132993a3156f49b7340f5e9f288068c780a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            LOG.debug(\u0027No Mellanox devices found, returning NONE\u0027)"},{"line_number":71,"context_line":"            return hardware.HardwareSupport.NONE"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def get_interface_info(self, interface_name):"},{"line_number":74,"context_line":"        addr_path \u003d \u0027/sys/class/net/{0}/address\u0027.format(interface_name)"},{"line_number":75,"context_line":"        with open(addr_path) as addr_file:"},{"line_number":76,"context_line":"            address \u003d addr_file.read().strip()"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_62f94a4d","line":73,"updated":"2016-11-16 13:46:00.000000000","message":"nit: docstring","commit_id":"d153037acce522c70d6e2c335adc70ee60fe055a"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"1576881cd439122a1bc08e2686f66f7de9e725d8","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            LOG.debug(\u0027No Mellanox devices found, returning NONE\u0027)"},{"line_number":71,"context_line":"            return hardware.HardwareSupport.NONE"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def get_interface_info(self, interface_name):"},{"line_number":74,"context_line":"        addr_path \u003d \u0027/sys/class/net/{0}/address\u0027.format(interface_name)"},{"line_number":75,"context_line":"        with open(addr_path) as addr_file:"},{"line_number":76,"context_line":"            address \u003d addr_file.read().strip()"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_a87d03e9","line":73,"in_reply_to":"7a77a97e_62f94a4d","updated":"2016-11-16 14:16:27.000000000","message":"Done","commit_id":"d153037acce522c70d6e2c335adc70ee60fe055a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7b789132993a3156f49b7340f5e9f288068c780a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        vendor \u003d hardware._get_device_info(interface_name, \u0027net\u0027, \u0027vendor\u0027)"},{"line_number":78,"context_line":"        if (len(address) !\u003d netutils.INFINIBAND_ADDR_LEN or"},{"line_number":79,"context_line":"            vendor !\u003d MLNX_VENDOR_ID):"},{"line_number":80,"context_line":"            raise errors.IncompatibleHardwareMethodError"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        mac_addr \u003d _infiniband_address_to_mac(address)"},{"line_number":83,"context_line":"        client_id \u003d _generate_client_id(address)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_e2b8fae7","line":80,"range":{"start_line":80,"start_character":18,"end_line":80,"end_character":56},"updated":"2016-11-16 13:46:00.000000000","message":"nit: Should instantiate the exception, e.g:\n\nraise errors.IncompatibleHardwareMethodError()","commit_id":"d153037acce522c70d6e2c335adc70ee60fe055a"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"1576881cd439122a1bc08e2686f66f7de9e725d8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        vendor \u003d hardware._get_device_info(interface_name, \u0027net\u0027, \u0027vendor\u0027)"},{"line_number":78,"context_line":"        if (len(address) !\u003d netutils.INFINIBAND_ADDR_LEN or"},{"line_number":79,"context_line":"            vendor !\u003d MLNX_VENDOR_ID):"},{"line_number":80,"context_line":"            raise errors.IncompatibleHardwareMethodError"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        mac_addr \u003d _infiniband_address_to_mac(address)"},{"line_number":83,"context_line":"        client_id \u003d _generate_client_id(address)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_05fb40c2","line":80,"range":{"start_line":80,"start_character":18,"end_line":80,"end_character":56},"in_reply_to":"7a77a97e_e2b8fae7","updated":"2016-11-16 14:16:27.000000000","message":"Done","commit_id":"d153037acce522c70d6e2c335adc70ee60fe055a"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"ceceafe38a3e040bf02081b756e0af8d89af6d55","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_log import log"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d log.getLogger()"},{"line_number":22,"context_line":"MLNX_VENDOR_ID \u003d \u00270x15b3\u0027"},{"line_number":23,"context_line":"MLNX_INFINIBAND_CLIENT_ID_PREFEX \u003d \u0027ff:00:00:00:00:00:02:00:00:02:c9:00:\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_6c79edc7","line":22,"updated":"2016-11-17 22:17:44.000000000","message":"Can you add comments for what these \"magic variables\" mean?","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e795820d9b5ee600a8aaf07364262e40c89da5fd","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_log import log"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d log.getLogger()"},{"line_number":22,"context_line":"MLNX_VENDOR_ID \u003d \u00270x15b3\u0027"},{"line_number":23,"context_line":"MLNX_INFINIBAND_CLIENT_ID_PREFEX \u003d \u0027ff:00:00:00:00:00:02:00:00:02:c9:00:\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_743288a8","line":22,"in_reply_to":"7a77a97e_6c79edc7","updated":"2016-11-18 07:22:19.000000000","message":"Done","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"ceceafe38a3e040bf02081b756e0af8d89af6d55","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d log.getLogger()"},{"line_number":22,"context_line":"MLNX_VENDOR_ID \u003d \u00270x15b3\u0027"},{"line_number":23,"context_line":"MLNX_INFINIBAND_CLIENT_ID_PREFEX \u003d \u0027ff:00:00:00:00:00:02:00:00:02:c9:00:\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def _infiniband_address_to_mac(address):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_0c6a39ee","line":23,"range":{"start_line":23,"start_character":26,"end_line":23,"end_character":32},"updated":"2016-11-17 22:17:44.000000000","message":"s/PREFEX/PREFIX, right?","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e795820d9b5ee600a8aaf07364262e40c89da5fd","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d log.getLogger()"},{"line_number":22,"context_line":"MLNX_VENDOR_ID \u003d \u00270x15b3\u0027"},{"line_number":23,"context_line":"MLNX_INFINIBAND_CLIENT_ID_PREFEX \u003d \u0027ff:00:00:00:00:00:02:00:00:02:c9:00:\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def _infiniband_address_to_mac(address):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_511bde80","line":23,"range":{"start_line":23,"start_character":26,"end_line":23,"end_character":32},"in_reply_to":"7a77a97e_0c6a39ee","updated":"2016-11-18 07:22:19.000000000","message":"Done","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"ceceafe38a3e040bf02081b756e0af8d89af6d55","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    :param address: InfiniBand Address."},{"line_number":33,"context_line":"    :returns: InfiniBand MAC."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":"    return address[36:-14] + address[51:]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def _generate_client_id(address):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_cc2a0190","line":35,"updated":"2016-11-17 22:17:44.000000000","message":"Can you add a comment for what this is actually supposed to do?\n\nIt seems like you need the 36th to the 15th from last byte (inclusive), and then the 51st to the end of the address. These aren\u0027t all multiples of 2, so it seemed a little strange. Maybe because of the \":\" ?","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e795820d9b5ee600a8aaf07364262e40c89da5fd","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    :param address: InfiniBand Address."},{"line_number":33,"context_line":"    :returns: InfiniBand MAC."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":"    return address[36:-14] + address[51:]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def _generate_client_id(address):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_f4113853","line":35,"in_reply_to":"7a77a97e_cc2a0190","updated":"2016-11-18 07:22:19.000000000","message":"Done","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"93aeadd67ccee3f2a2adaa6e4a9401d7f9e8c86a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    :param address: InfiniBand address."},{"line_number":42,"context_line":"    :returns: client id."},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":"    return MLNX_INFINIBAND_CLIENT_ID_PREFEX + address[36:]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def _detect_hardware():"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_928822c7","line":44,"updated":"2016-11-17 23:12:45.000000000","message":"if you fix the PREFIX above, you have to fix it here too","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e795820d9b5ee600a8aaf07364262e40c89da5fd","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    :param address: InfiniBand address."},{"line_number":42,"context_line":"    :returns: client id."},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":"    return MLNX_INFINIBAND_CLIENT_ID_PREFEX + address[36:]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def _detect_hardware():"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_b470a0a5","line":44,"in_reply_to":"7a77a97e_928822c7","updated":"2016-11-18 07:22:19.000000000","message":"Done","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"ceceafe38a3e040bf02081b756e0af8d89af6d55","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def _detect_hardware():"},{"line_number":48,"context_line":"    \"\"\"method for detection of Mellanox NICs\"\"\""},{"line_number":49,"context_line":"    iface_names \u003d os.listdir(\u0027/sys/class/net\u0027)"},{"line_number":50,"context_line":"    for ifname in iface_names:"},{"line_number":51,"context_line":"        if (hardware._get_device_info(ifname, \u0027net\u0027, \u0027vendor\u0027) \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_e700b603","line":48,"updated":"2016-11-17 22:17:44.000000000","message":"Please add a :returns: docstring here.","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e795820d9b5ee600a8aaf07364262e40c89da5fd","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def _detect_hardware():"},{"line_number":48,"context_line":"    \"\"\"method for detection of Mellanox NICs\"\"\""},{"line_number":49,"context_line":"    iface_names \u003d os.listdir(\u0027/sys/class/net\u0027)"},{"line_number":50,"context_line":"    for ifname in iface_names:"},{"line_number":51,"context_line":"        if (hardware._get_device_info(ifname, \u0027net\u0027, \u0027vendor\u0027) \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a77a97e_34fe50ae","line":48,"in_reply_to":"7a77a97e_e700b603","updated":"2016-11-18 07:22:19.000000000","message":"Done","commit_id":"0c2d0dc57b1b293c29d64d56d3fbd769e3065a51"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"73f7174df01e26f2a650ef9f00a5b9dd2a8f75c5","unresolved":false,"context_lines":[{"line_number":56,"context_line":"def _detect_hardware():"},{"line_number":57,"context_line":"    \"\"\"method for detection of Mellanox NICs"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    :return True/False"},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":"    iface_names \u003d os.listdir(\u0027/sys/class/net\u0027)"},{"line_number":62,"context_line":"    for ifname in iface_names:"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_407294e4","line":59,"range":{"start_line":59,"start_character":12,"end_line":59,"end_character":22},"updated":"2016-11-22 16:20:50.000000000","message":"nit: :returns:\n\n...\n\nAlso, instead of \"True/False\" it should be a bit more explicit, e.g\n\n:returns: Boolean value. True if the machine contain one or more Mellanox NIC(s), False otherwise.","commit_id":"1bdcd4449f6dc3c39cffcefa8efba243b7c00456"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"d543b3c1f5f64bac54da914b472923dd996e762d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"def _detect_hardware():"},{"line_number":57,"context_line":"    \"\"\"method for detection of Mellanox NICs"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    :return True/False"},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":"    iface_names \u003d os.listdir(\u0027/sys/class/net\u0027)"},{"line_number":62,"context_line":"    for ifname in iface_names:"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_46846cb0","line":59,"range":{"start_line":59,"start_character":12,"end_line":59,"end_character":22},"in_reply_to":"7a77a97e_407294e4","updated":"2016-11-22 16:53:41.000000000","message":"++ Please fix in a followup patch","commit_id":"1bdcd4449f6dc3c39cffcefa8efba243b7c00456"}],"ironic_python_agent/hardware_managers/mlnx_hardware_manager.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0b44c296fa2060ea60ff6412b44cadd5acf6e9d3","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            # return a value higher than 2 (HardwareSupport.MAINLINE). This"},{"line_number":116,"context_line":"            # means your managers should always be SERVICE_PROVIDER or higher."},{"line_number":117,"context_line":"            LOG.debug(\u0027Found example device, returning SERVICE_PROVIDER\u0027)"},{"line_number":118,"context_line":"            return hardware.HardwareSupport.SERVICE_PROVIDER"},{"line_number":119,"context_line":"        else:"},{"line_number":120,"context_line":"            # If the hardware isn\u0027t supported, return HardwareSupport.NONE (0)"},{"line_number":121,"context_line":"            # in order to prevent IPA from loading its clean steps or"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_ed729110","line":118,"updated":"2016-11-09 16:12:33.000000000","message":"Since this in in-tree, you should make sure to change this to MAINLINE -- SERVICE_PROVIDER and above are reserved for out of tree Hardware Managers.","commit_id":"e7d884a43876b144d8f323f191797cb46564eebf"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"636e4cb228481e3edf71be8a57a8d36edd15ae92","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            # return a value higher than 2 (HardwareSupport.MAINLINE). This"},{"line_number":116,"context_line":"            # means your managers should always be SERVICE_PROVIDER or higher."},{"line_number":117,"context_line":"            LOG.debug(\u0027Found example device, returning SERVICE_PROVIDER\u0027)"},{"line_number":118,"context_line":"            return hardware.HardwareSupport.SERVICE_PROVIDER"},{"line_number":119,"context_line":"        else:"},{"line_number":120,"context_line":"            # If the hardware isn\u0027t supported, return HardwareSupport.NONE (0)"},{"line_number":121,"context_line":"            # in order to prevent IPA from loading its clean steps or"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a629dbe_eca273fb","line":118,"in_reply_to":"9a629dbe_ed729110","updated":"2016-11-10 09:35:38.000000000","message":"Done","commit_id":"e7d884a43876b144d8f323f191797cb46564eebf"}],"ironic_python_agent/netutils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8942c74c7cd9056ebb559d57cc7286ce164ae294","unresolved":false,"context_lines":[{"line_number":35,"context_line":"_INFINIBAND_VENDOR_MAC_TRANSLATION_MAPPING \u003d ("},{"line_number":36,"context_line":"    {_MLNX_VENDOR_ID: lambda address: address[36:-14] + address[51:]})"},{"line_number":37,"context_line":"_INFINIBAND_CLIENT_ID_VENDOR_MAPPING \u003d ("},{"line_number":38,"context_line":"    {_MLNX_VENDOR_ID: _MLNX_INFINIBAND_CLIENT_ID_PREFEX})"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class ifreq(ctypes.Structure):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_4a0b58d6","line":38,"updated":"2016-10-20 11:37:35.000000000","message":"We should somehow make this pluggable for other vendors. So I think (Jay will correct me if I\u0027m wrong), that this should go to a new HardwareManager. So, GenericHardwareManager will always set mac_addr to None and client_addr to something. Then your specific hardware manager will perform the tranformation.","commit_id":"a41f9a97e902a304a458103c876c47af77216cfc"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"fc1a8b2e9701a632129ee933dafe8d6da446bf26","unresolved":false,"context_lines":[{"line_number":35,"context_line":"_INFINIBAND_VENDOR_MAC_TRANSLATION_MAPPING \u003d ("},{"line_number":36,"context_line":"    {_MLNX_VENDOR_ID: lambda address: address[36:-14] + address[51:]})"},{"line_number":37,"context_line":"_INFINIBAND_CLIENT_ID_VENDOR_MAPPING \u003d ("},{"line_number":38,"context_line":"    {_MLNX_VENDOR_ID: _MLNX_INFINIBAND_CLIENT_ID_PREFEX})"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class ifreq(ctypes.Structure):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_69f08791","line":38,"in_reply_to":"fa6399be_4a0b58d6","updated":"2016-10-27 21:15:05.000000000","message":"I agree, I think generally vendor-specific functionality should be more pluggable.\n\nI\u0027m not sure whether this particular functionality would go in a separate hardware manager or a separate extension, but I don\u0027t think that just deciding what strategy to use based on a field length is appropriate.","commit_id":"a41f9a97e902a304a458103c876c47af77216cfc"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7b789132993a3156f49b7340f5e9f288068c780a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"IFF_PROMISC \u003d 0x100"},{"line_number":31,"context_line":"SIOCGIFFLAGS \u003d 0x8913"},{"line_number":32,"context_line":"SIOCSIFFLAGS \u003d 0x8914"},{"line_number":33,"context_line":"SYS_PATH \u003d \u0027/sys\u0027"},{"line_number":34,"context_line":"INFINIBAND_ADDR_LEN \u003d 59"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_e25e3a75","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":17},"updated":"2016-11-16 13:46:00.000000000","message":"nit: Not sure there\u0027s much benefit of having this variable available, it\u0027s used in only one place","commit_id":"d153037acce522c70d6e2c335adc70ee60fe055a"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"1576881cd439122a1bc08e2686f66f7de9e725d8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"IFF_PROMISC \u003d 0x100"},{"line_number":31,"context_line":"SIOCGIFFLAGS \u003d 0x8913"},{"line_number":32,"context_line":"SIOCSIFFLAGS \u003d 0x8914"},{"line_number":33,"context_line":"SYS_PATH \u003d \u0027/sys\u0027"},{"line_number":34,"context_line":"INFINIBAND_ADDR_LEN \u003d 59"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a77a97e_85a2f0ac","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":17},"in_reply_to":"7a77a97e_e25e3a75","updated":"2016-11-16 14:16:27.000000000","message":"Done","commit_id":"d153037acce522c70d6e2c335adc70ee60fe055a"}]}
