)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"906bf7f1fa3c71424a68d9b1a11697470867fe32","unresolved":false,"context_lines":[{"line_number":12,"context_line":"decreases this quantity depending on the Neutron"},{"line_number":13,"context_line":"ports QoS minimum bandwidth requirements."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"DocImpact"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Related-Bug: #1578989"},{"line_number":18,"context_line":"Change-Id: Ieb13c52d34a42f760e42fc7474ee306e4c01502d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9a30ddce_47174f51","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":9},"updated":"2017-03-07 13:53:07.000000000","message":"This should include a little description of what should be changed, see http://lists.openstack.org/pipermail/openstack-dev/2015-November/080294.html for more info.","commit_id":"4159c50a350ad4fa1986c3d86cb1a2307c692dec"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1e8b83d7e77ea5f77871f9b68ba2b7be8a0dd408","unresolved":false,"context_lines":[{"line_number":12,"context_line":"decreases this quantity depending on the Neutron"},{"line_number":13,"context_line":"ports QoS minimum bandwidth requirements."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"DocImpact"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Related-Bug: #1578989"},{"line_number":18,"context_line":"Change-Id: Ieb13c52d34a42f760e42fc7474ee306e4c01502d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9a30ddce_afba62df","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":9},"in_reply_to":"9a30ddce_47174f51","updated":"2017-03-08 16:50:23.000000000","message":"Done","commit_id":"4159c50a350ad4fa1986c3d86cb1a2307c692dec"}],"neutron/agent/l2/extensions/qos.py":[{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"567b148a601c53f30585126cefdf0bfe10e0316e","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                                                         net_name, pci_slots)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def get_device(self, dev_name):"},{"line_number":325,"context_line":"        return self._devices.get(dev_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_0660f134","line":325,"range":{"start_line":325,"start_character":15,"end_line":325,"end_character":42},"updated":"2016-12-01 15:54:16.000000000","message":"Should this be returning None or a dict?","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e98ee5e738b6207e48363fb311aabfb4b48104b","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                                                         net_name, pci_slots)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def get_device(self, dev_name):"},{"line_number":325,"context_line":"        return self._devices.get(dev_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_5f13675c","line":325,"range":{"start_line":325,"start_character":15,"end_line":325,"end_character":42},"in_reply_to":"3a71b18c_0660f134","updated":"2016-12-09 11:58:14.000000000","message":"Actually, I\u0027m using this only in L317, so I\u0027m going to remove it.","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0ee21f7ad26aa27a309de84ecf68dc5f74cc0ee6","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            self.pci_slots.update(pci_slots)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        def has_pci_slot(self, pci_slot):"},{"line_number":311,"context_line":"            return True if pci_slot in self.pci_slots else False"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def __init__(self):"},{"line_number":314,"context_line":"        self._devices \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_d3a6700f","line":311,"range":{"start_line":311,"start_character":19,"end_line":311,"end_character":64},"updated":"2016-12-14 10:57:02.000000000","message":"Would just \"pci_slot in self.pci_slots\" not be enough to return Boolean True or False?","commit_id":"44c73fe4f509af3c12e451f55c47c4316cae8f66"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"39d52a925eb8e5290a6047ade868984cb9850432","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            self.pci_slots.update(pci_slots)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        def has_pci_slot(self, pci_slot):"},{"line_number":311,"context_line":"            return True if pci_slot in self.pci_slots else False"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def __init__(self):"},{"line_number":314,"context_line":"        self._devices \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_b42f1af5","line":311,"range":{"start_line":311,"start_character":19,"end_line":311,"end_character":64},"in_reply_to":"1a6eadb0_d3a6700f","updated":"2016-12-14 11:58:27.000000000","message":"Yes! I missed that","commit_id":"44c73fe4f509af3c12e451f55c47c4316cae8f66"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0ee21f7ad26aa27a309de84ecf68dc5f74cc0ee6","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        for dev in (dev for dev in self._devices.itervalues() if"},{"line_number":327,"context_line":"                    dev.has_pci_slot(pci_slot)):"},{"line_number":328,"context_line":"            dev.available_bw +\u003d bw"},{"line_number":329,"context_line":"            return"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def decrease_available_bw(self, pci_slot, bw):"},{"line_number":332,"context_line":"        self._update_available_bw(pci_slot, -bw)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_1356285c","line":329,"range":{"start_line":329,"start_character":12,"end_line":329,"end_character":18},"updated":"2016-12-14 10:57:02.000000000","message":"Is this function meant to return after updating only one NicBW object?","commit_id":"44c73fe4f509af3c12e451f55c47c4316cae8f66"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"39d52a925eb8e5290a6047ade868984cb9850432","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        for dev in (dev for dev in self._devices.itervalues() if"},{"line_number":327,"context_line":"                    dev.has_pci_slot(pci_slot)):"},{"line_number":328,"context_line":"            dev.available_bw +\u003d bw"},{"line_number":329,"context_line":"            return"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def decrease_available_bw(self, pci_slot, bw):"},{"line_number":332,"context_line":"        self._update_available_bw(pci_slot, -bw)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_cb807449","line":329,"range":{"start_line":329,"start_character":12,"end_line":329,"end_character":18},"in_reply_to":"1a6eadb0_1356285c","updated":"2016-12-14 11:58:27.000000000","message":"Yes, that\u0027s right.\n\nself._devices is a dict with all physical devices. The values in this dict is a NicBW object. This object contains the VF PCI slots (in a set). This generator should (must) return only ONE device, because a VF, defined by its PCI slot, should be present only in one physical device.\n\nI\u0027ll keep this return just to brake the iteration.","commit_id":"44c73fe4f509af3c12e451f55c47c4316cae8f66"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"949594205ec8acd77a8bec081dd279fe875a3194","unresolved":false,"context_lines":[{"line_number":281,"context_line":"class NicBwManager(object):"},{"line_number":282,"context_line":"    \"\"\"Class to manage the NIC bandwidth capacity.\"\"\""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    class NicBW(object):"},{"line_number":285,"context_line":"        def __init__(self, dev_name, bw, available_bw, net_name, vf_pci_slots):"},{"line_number":286,"context_line":"            self.vf_pci_slots \u003d vf_pci_slots"},{"line_number":287,"context_line":"            self.dev_name \u003d dev_name"}],"source_content_type":"text/x-python","patch_set":21,"id":"7ffa3b31_310576c3","line":284,"updated":"2017-04-16 07:25:35.000000000","message":"Don\u0027t nest this inside of the NicBwManager. It clutters the definition of the parent class.","commit_id":"6636bd8137cf798fbcc1c8a24cffb6912f713c14"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7e94878c51768d2a539905dfb25e86214fcf03dd","unresolved":false,"context_lines":[{"line_number":281,"context_line":"class NicBwManager(object):"},{"line_number":282,"context_line":"    \"\"\"Class to manage the NIC bandwidth capacity.\"\"\""},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    class NicBW(object):"},{"line_number":285,"context_line":"        def __init__(self, dev_name, bw, available_bw, net_name, vf_pci_slots):"},{"line_number":286,"context_line":"            self.vf_pci_slots \u003d vf_pci_slots"},{"line_number":287,"context_line":"            self.dev_name \u003d dev_name"}],"source_content_type":"text/x-python","patch_set":21,"id":"7ffa3b31_17d45c1f","line":284,"in_reply_to":"7ffa3b31_310576c3","updated":"2017-04-19 09:12:32.000000000","message":"Done","commit_id":"6636bd8137cf798fbcc1c8a24cffb6912f713c14"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"949594205ec8acd77a8bec081dd279fe875a3194","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        if available_bw is None:"},{"line_number":314,"context_line":"            available_bw \u003d bw"},{"line_number":315,"context_line":"        elif available_bw.endswith(\u0027%\u0027):"},{"line_number":316,"context_line":"            percentage \u003d float(available_bw.split(\u0027%\u0027)[0])"},{"line_number":317,"context_line":"            if percentage \u003e 100:"},{"line_number":318,"context_line":"                percentage \u003d 100"},{"line_number":319,"context_line":"            elif percentage \u003c 0:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7ffa3b31_110a7ad1","line":316,"updated":"2017-04-16 07:25:35.000000000","message":"percentage \u003d max(0, min(float(available_bw.split(\u0027%\u0027)[0]), 100))","commit_id":"6636bd8137cf798fbcc1c8a24cffb6912f713c14"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7e94878c51768d2a539905dfb25e86214fcf03dd","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        if available_bw is None:"},{"line_number":314,"context_line":"            available_bw \u003d bw"},{"line_number":315,"context_line":"        elif available_bw.endswith(\u0027%\u0027):"},{"line_number":316,"context_line":"            percentage \u003d float(available_bw.split(\u0027%\u0027)[0])"},{"line_number":317,"context_line":"            if percentage \u003e 100:"},{"line_number":318,"context_line":"                percentage \u003d 100"},{"line_number":319,"context_line":"            elif percentage \u003c 0:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7ffa3b31_371758f0","line":316,"in_reply_to":"7ffa3b31_110a7ad1","updated":"2017-04-19 09:12:32.000000000","message":"Uhmm, that\u0027s a very good way to limit the percentage. I\u0027ll remember this line.","commit_id":"6636bd8137cf798fbcc1c8a24cffb6912f713c14"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f6f85653cf02bc6e6c19a44d3ba18cc5cd4fb56a","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        elif available_bw.endswith(\u0027%\u0027):"},{"line_number":322,"context_line":"            percentage \u003d max(0, min(float(available_bw.split(\u0027%\u0027)[0]), 100))"},{"line_number":323,"context_line":"            if percentage \u003e 100:"},{"line_number":324,"context_line":"                percentage \u003d 100"},{"line_number":325,"context_line":"            elif percentage \u003c 0:"},{"line_number":326,"context_line":"                percentage \u003d 0"},{"line_number":327,"context_line":"            available_bw \u003d (bw * percentage) / 100"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_df5316e2","line":324,"updated":"2017-04-23 09:35:42.000000000","message":"nit: could be:\n\n    percentage \u003d min(percentage, 100)","commit_id":"8e49727f0a80a9b72bae7084a6039a71bd60c299"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"24e495f4e8f20d4d5c5c041df5bded3b560bd79e","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            available_bw \u003d bw"},{"line_number":321,"context_line":"        elif available_bw.endswith(\u0027%\u0027):"},{"line_number":322,"context_line":"            percentage \u003d max(0, min(float(available_bw.split(\u0027%\u0027)[0]), 100))"},{"line_number":323,"context_line":"            if percentage \u003e 100:"},{"line_number":324,"context_line":"                percentage \u003d 100"},{"line_number":325,"context_line":"            elif percentage \u003c 0:"},{"line_number":326,"context_line":"                percentage \u003d 0"},{"line_number":327,"context_line":"            available_bw \u003d (bw * percentage) / 100"},{"line_number":328,"context_line":"        else:"},{"line_number":329,"context_line":"            if int(available_bw) \u003e bw:"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_ed07d581","line":326,"range":{"start_line":323,"start_character":12,"end_line":326,"end_character":30},"updated":"2017-04-26 20:22:55.000000000","message":"actully these lines are not need at all\nits already clamped by 322.","commit_id":"8e49727f0a80a9b72bae7084a6039a71bd60c299"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f6f85653cf02bc6e6c19a44d3ba18cc5cd4fb56a","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            if percentage \u003e 100:"},{"line_number":324,"context_line":"                percentage \u003d 100"},{"line_number":325,"context_line":"            elif percentage \u003c 0:"},{"line_number":326,"context_line":"                percentage \u003d 0"},{"line_number":327,"context_line":"            available_bw \u003d (bw * percentage) / 100"},{"line_number":328,"context_line":"        else:"},{"line_number":329,"context_line":"            if int(available_bw) \u003e bw:"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_bf504ad6","line":326,"updated":"2017-04-23 09:35:42.000000000","message":"nit: see comment above :)","commit_id":"8e49727f0a80a9b72bae7084a6039a71bd60c299"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1e3b012263a0c73fefc2d223b30c39a542da40b1","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            available_bw \u003d bw"},{"line_number":321,"context_line":"        elif available_bw.endswith(\u0027%\u0027):"},{"line_number":322,"context_line":"            percentage \u003d max(0, min(float(available_bw.split(\u0027%\u0027)[0]), 100))"},{"line_number":323,"context_line":"            if percentage \u003e 100:"},{"line_number":324,"context_line":"                percentage \u003d 100"},{"line_number":325,"context_line":"            elif percentage \u003c 0:"},{"line_number":326,"context_line":"                percentage \u003d 0"},{"line_number":327,"context_line":"            available_bw \u003d (bw * percentage) / 100"},{"line_number":328,"context_line":"        else:"},{"line_number":329,"context_line":"            if int(available_bw) \u003e bw:"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_3b304ae8","line":326,"range":{"start_line":323,"start_character":12,"end_line":326,"end_character":30},"in_reply_to":"5ff73747_ed07d581","updated":"2017-04-27 13:08:36.000000000","message":"Done","commit_id":"8e49727f0a80a9b72bae7084a6039a71bd60c299"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f6f85653cf02bc6e6c19a44d3ba18cc5cd4fb56a","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            available_bw \u003d (bw * percentage) / 100"},{"line_number":328,"context_line":"        else:"},{"line_number":329,"context_line":"            if int(available_bw) \u003e bw:"},{"line_number":330,"context_line":"                available_bw \u003d bw"},{"line_number":331,"context_line":"            elif int(available_bw) \u003c 0:"},{"line_number":332,"context_line":"                available_bw \u003d 0"},{"line_number":333,"context_line":"        return int(available_bw)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_9f5fcee4","line":330,"updated":"2017-04-23 09:35:42.000000000","message":"nit: here also :)","commit_id":"8e49727f0a80a9b72bae7084a6039a71bd60c299"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f6f85653cf02bc6e6c19a44d3ba18cc5cd4fb56a","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            if int(available_bw) \u003e bw:"},{"line_number":330,"context_line":"                available_bw \u003d bw"},{"line_number":331,"context_line":"            elif int(available_bw) \u003c 0:"},{"line_number":332,"context_line":"                available_bw \u003d 0"},{"line_number":333,"context_line":"        return int(available_bw)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_7f6402ba","line":332,"updated":"2017-04-23 09:35:42.000000000","message":"nit: and here","commit_id":"8e49727f0a80a9b72bae7084a6039a71bd60c299"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"24e495f4e8f20d4d5c5c041df5bded3b560bd79e","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                percentage \u003d 0"},{"line_number":327,"context_line":"            available_bw \u003d (bw * percentage) / 100"},{"line_number":328,"context_line":"        else:"},{"line_number":329,"context_line":"            if int(available_bw) \u003e bw:"},{"line_number":330,"context_line":"                available_bw \u003d bw"},{"line_number":331,"context_line":"            elif int(available_bw) \u003c 0:"},{"line_number":332,"context_line":"                available_bw \u003d 0"},{"line_number":333,"context_line":"        return int(available_bw)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_4d6b691d","line":332,"range":{"start_line":329,"start_character":12,"end_line":332,"end_character":32},"updated":"2017-04-26 20:22:55.000000000","message":"this is just max(0,min(int(available_bw),bw))","commit_id":"8e49727f0a80a9b72bae7084a6039a71bd60c299"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1e3b012263a0c73fefc2d223b30c39a542da40b1","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                percentage \u003d 0"},{"line_number":327,"context_line":"            available_bw \u003d (bw * percentage) / 100"},{"line_number":328,"context_line":"        else:"},{"line_number":329,"context_line":"            if int(available_bw) \u003e bw:"},{"line_number":330,"context_line":"                available_bw \u003d bw"},{"line_number":331,"context_line":"            elif int(available_bw) \u003c 0:"},{"line_number":332,"context_line":"                available_bw \u003d 0"},{"line_number":333,"context_line":"        return int(available_bw)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_1b4fce6b","line":332,"range":{"start_line":329,"start_character":12,"end_line":332,"end_character":32},"in_reply_to":"5ff73747_4d6b691d","updated":"2017-04-27 13:08:36.000000000","message":"Done","commit_id":"8e49727f0a80a9b72bae7084a6039a71bd60c299"}],"neutron/agent/linux/ethtool.py":[{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"567b148a601c53f30585126cefdf0bfe10e0316e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# IPSET_ADD_BULK_THRESHOLD \u003d 5"},{"line_number":25,"context_line":"# NET_PREFIX \u003d \u0027N\u0027"},{"line_number":26,"context_line":"# SWAP_SUFFIX \u003d \u0027-n\u0027"},{"line_number":27,"context_line":"# IPSET_NAME_MAX_LENGTH \u003d 31 - len(SWAP_SUFFIX)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class EthtoolDevice(object):"},{"line_number":30,"context_line":"    pat_speed \u003d re.compile(r\"Speed: (?P\u003cspeed\u003e\\d*)Mb/s\", re.MULTILINE)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_603fd025","line":27,"range":{"start_line":27,"start_character":47,"end_line":27,"end_character":47},"updated":"2016-12-01 15:54:16.000000000","message":"Needs an extra line, failing pep8","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e98ee5e738b6207e48363fb311aabfb4b48104b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# IPSET_ADD_BULK_THRESHOLD \u003d 5"},{"line_number":25,"context_line":"# NET_PREFIX \u003d \u0027N\u0027"},{"line_number":26,"context_line":"# SWAP_SUFFIX \u003d \u0027-n\u0027"},{"line_number":27,"context_line":"# IPSET_NAME_MAX_LENGTH \u003d 31 - len(SWAP_SUFFIX)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class EthtoolDevice(object):"},{"line_number":30,"context_line":"    pat_speed \u003d re.compile(r\"Speed: (?P\u003cspeed\u003e\\d*)Mb/s\", re.MULTILINE)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_ff28b387","line":27,"range":{"start_line":27,"start_character":47,"end_line":27,"end_character":47},"in_reply_to":"3a71b18c_603fd025","updated":"2016-12-09 11:58:14.000000000","message":"Yes and I\u0027m going to remove these commented lines","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"90ed385bc69b8b2f3683c9b0b7a8c5108d448f78","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class EthtoolDevice(object):"},{"line_number":27,"context_line":"    pat_speed \u003d re.compile(r\"Speed: (?P\u003cspeed\u003e\\d*)Mb/s\", re.MULTILINE)"},{"line_number":28,"context_line":"    pat_duplex \u003d re.compile(r\"Duplex: (?P\u003cduplex\u003eFull|Half)\", re.MULTILINE)"},{"line_number":29,"context_line":"    pat_link \u003d re.compile(r\"Link detected: (?P\u003clink\u003eyes|no)\", re.MULTILINE)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_06c1b180","line":26,"updated":"2016-12-19 21:20:12.000000000","message":"there is some library for ethtool in python: https://launchpad.net/ubuntu/+source/python-ethtool\nMaybe it could be used here? instead of parsing output with regex?","commit_id":"68100d269c199232bba8780e561ef7e809146150"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3f76f1fcda36f2e5e449de8d8be3fcefcb40b858","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class EthtoolDevice(object):"},{"line_number":27,"context_line":"    pat_speed \u003d re.compile(r\"Speed: (?P\u003cspeed\u003e\\d*)Mb/s\", re.MULTILINE)"},{"line_number":28,"context_line":"    pat_duplex \u003d re.compile(r\"Duplex: (?P\u003cduplex\u003eFull|Half)\", re.MULTILINE)"},{"line_number":29,"context_line":"    pat_link \u003d re.compile(r\"Link detected: (?P\u003clink\u003eyes|no)\", re.MULTILINE)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_36bb6c74","line":26,"in_reply_to":"1a6eadb0_06c1b180","updated":"2017-01-12 15:45:23.000000000","message":"Yes, I\u0027m going to take a look at this library.\n\nThank you!","commit_id":"68100d269c199232bba8780e561ef7e809146150"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0bebb7d8502c126e08932f40f604d8f1efd87abe","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class EthtoolDevice(object):"},{"line_number":27,"context_line":"    pat_speed \u003d re.compile(r\"Speed: (?P\u003cspeed\u003e\\d*)Mb/s\", re.MULTILINE)"},{"line_number":28,"context_line":"    pat_duplex \u003d re.compile(r\"Duplex: (?P\u003cduplex\u003eFull|Half)\", re.MULTILINE)"},{"line_number":29,"context_line":"    pat_link \u003d re.compile(r\"Link detected: (?P\u003clink\u003eyes|no)\", re.MULTILINE)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_efcf42b1","line":26,"in_reply_to":"9a57fde8_03e9c71a","updated":"2017-01-12 18:10:06.000000000","message":"ok, thx for info","commit_id":"68100d269c199232bba8780e561ef7e809146150"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0b89286056d4ad50df3b28bf76db1395da91cab4","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class EthtoolDevice(object):"},{"line_number":27,"context_line":"    pat_speed \u003d re.compile(r\"Speed: (?P\u003cspeed\u003e\\d*)Mb/s\", re.MULTILINE)"},{"line_number":28,"context_line":"    pat_duplex \u003d re.compile(r\"Duplex: (?P\u003cduplex\u003eFull|Half)\", re.MULTILINE)"},{"line_number":29,"context_line":"    pat_link \u003d re.compile(r\"Link detected: (?P\u003clink\u003eyes|no)\", re.MULTILINE)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a57fde8_03e9c71a","line":26,"in_reply_to":"9a57fde8_36bb6c74","updated":"2017-01-12 16:44:49.000000000","message":"I check this. The problem is:\n- There is no pypi support for this tool\n- The latest verion, 0.12, has more than 5 months in Fedora. In ubuntu the last patch is from 2014.","commit_id":"68100d269c199232bba8780e561ef7e809146150"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"32ea03cdb12bd07367d9f1459250b7b07f20df50","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        m \u003d self.pat_link.search(cmd_output)"},{"line_number":55,"context_line":"        self._link \u003d True if m and m.group(\u0027link\u0027) \u003d\u003d \u0027yes\u0027 else False"},{"line_number":56,"context_line":"        m \u003d self.pat_speed.search(cmd_output)"},{"line_number":57,"context_line":"        self._speed \u003d int(m.group(\u0027speed\u0027)) if m else self._speed"},{"line_number":58,"context_line":"        m \u003d self.pat_duplex.search(cmd_output)"},{"line_number":59,"context_line":"        self._duplex \u003d m.group(\u0027duplex\u0027) if m else self._duplex"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a461143_7711a55c","line":57,"range":{"start_line":57,"start_character":22,"end_line":57,"end_character":48},"updated":"2017-01-31 18:00:18.000000000","message":"shouldn\u0027t here be a check if m.group(\u0027speed\u0027) exits along with if m ??","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"15deda6cd849b2ec4355c90bc0639da26108558e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        m \u003d self.pat_link.search(cmd_output)"},{"line_number":55,"context_line":"        self._link \u003d True if m and m.group(\u0027link\u0027) \u003d\u003d \u0027yes\u0027 else False"},{"line_number":56,"context_line":"        m \u003d self.pat_speed.search(cmd_output)"},{"line_number":57,"context_line":"        self._speed \u003d int(m.group(\u0027speed\u0027)) if m else self._speed"},{"line_number":58,"context_line":"        m \u003d self.pat_duplex.search(cmd_output)"},{"line_number":59,"context_line":"        self._duplex \u003d m.group(\u0027duplex\u0027) if m else self._duplex"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_4e52c7de","line":57,"range":{"start_line":57,"start_character":22,"end_line":57,"end_character":48},"in_reply_to":"3a461143_7711a55c","updated":"2017-02-13 09:39:04.000000000","message":"\u0027speed\u0027 regex section is not conditional. If \"search\" function in L56 returns a re.match object, \u0027speed\u0027 match group will be always there.","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"32ea03cdb12bd07367d9f1459250b7b07f20df50","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        m \u003d self.pat_speed.search(cmd_output)"},{"line_number":57,"context_line":"        self._speed \u003d int(m.group(\u0027speed\u0027)) if m else self._speed"},{"line_number":58,"context_line":"        m \u003d self.pat_duplex.search(cmd_output)"},{"line_number":59,"context_line":"        self._duplex \u003d m.group(\u0027duplex\u0027) if m else self._duplex"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class Ethtool(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a461143_d70a5925","line":59,"range":{"start_line":59,"start_character":23,"end_line":59,"end_character":45},"updated":"2017-01-31 18:00:18.000000000","message":"same here","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"15deda6cd849b2ec4355c90bc0639da26108558e","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        m \u003d self.pat_speed.search(cmd_output)"},{"line_number":57,"context_line":"        self._speed \u003d int(m.group(\u0027speed\u0027)) if m else self._speed"},{"line_number":58,"context_line":"        m \u003d self.pat_duplex.search(cmd_output)"},{"line_number":59,"context_line":"        self._duplex \u003d m.group(\u0027duplex\u0027) if m else self._duplex"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class Ethtool(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_8e62ffab","line":59,"range":{"start_line":59,"start_character":23,"end_line":59,"end_character":45},"in_reply_to":"3a461143_d70a5925","updated":"2017-02-13 09:39:04.000000000","message":"ditto","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"32ea03cdb12bd07367d9f1459250b7b07f20df50","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        dev \u003d self._devices.get(dev_name) or EthtoolDevice(dev_name)"},{"line_number":83,"context_line":"        cmd \u003d [self.CMD_ETHTOOL, \u0027-i\u0027, dev_name]"},{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            output \u003d self._exec(cmd)"},{"line_number":86,"context_line":"            dev.parse(output)"},{"line_number":87,"context_line":"        except Exception:"},{"line_number":88,"context_line":"            LOG.warning(_LW(\"Device %s doesn\u0027t exist\"), dev_name)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a461143_72e613e9","line":85,"range":{"start_line":85,"start_character":22,"end_line":85,"end_character":36},"updated":"2017-01-31 18:00:18.000000000","message":"correct me if I am wrong here, to read a device we just need `ethtool -i device` right but _exec is doing a extend on cmd_ns which may or may not have other commands depending on if self.namespace ?","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"15deda6cd849b2ec4355c90bc0639da26108558e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        dev \u003d self._devices.get(dev_name) or EthtoolDevice(dev_name)"},{"line_number":83,"context_line":"        cmd \u003d [self.CMD_ETHTOOL, \u0027-i\u0027, dev_name]"},{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            output \u003d self._exec(cmd)"},{"line_number":86,"context_line":"            dev.parse(output)"},{"line_number":87,"context_line":"        except Exception:"},{"line_number":88,"context_line":"            LOG.warning(_LW(\"Device %s doesn\u0027t exist\"), dev_name)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_2ecaf36d","line":85,"range":{"start_line":85,"start_character":22,"end_line":85,"end_character":36},"in_reply_to":"3a461143_72e613e9","updated":"2017-02-13 09:39:04.000000000","message":"Yes, your are right. \"self._exec\" is extending the command depending on the namespace. Take a look at:\nneutron.agent.linux.ip_conntrack\nneutron.agent.linux.ipset_manager","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"2c69697b19543b662ebce06f8e2e1f2b2c12604c","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            output \u003d self._exec(cmd)"},{"line_number":86,"context_line":"            dev.parse(output)"},{"line_number":87,"context_line":"        except Exception:"},{"line_number":88,"context_line":"            LOG.warning(_LW(\"Device %s doesn\u0027t exist\"), dev_name)"},{"line_number":89,"context_line":"        self._devices[dev_name] \u003d dev"},{"line_number":90,"context_line":"        return dev"}],"source_content_type":"text/x-python","patch_set":11,"id":"da36d5c6_cd34944b","line":87,"range":{"start_line":87,"start_character":15,"end_line":87,"end_character":24},"updated":"2017-02-24 14:57:31.000000000","message":"Should we use a more sepcific exception? This will make asserting the exception being thrown in tests easier to debug/more clear because Exception will catch anything under it\u0027s branch, see https://docs.python.org/2/library/exceptions.html#exception-hierarchy","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2f15f7489de8f104d97da0d306c09381a8083686","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            output \u003d self._exec(cmd)"},{"line_number":86,"context_line":"            dev.parse(output)"},{"line_number":87,"context_line":"        except Exception:"},{"line_number":88,"context_line":"            LOG.warning(_LW(\"Device %s doesn\u0027t exist\"), dev_name)"},{"line_number":89,"context_line":"        self._devices[dev_name] \u003d dev"},{"line_number":90,"context_line":"        return dev"}],"source_content_type":"text/x-python","patch_set":11,"id":"da36d5c6_6353b939","line":87,"range":{"start_line":87,"start_character":15,"end_line":87,"end_character":24},"in_reply_to":"da36d5c6_cd34944b","updated":"2017-02-24 15:26:10.000000000","message":"I\u0027ll use RuntimeError. But I don\u0027t think we need to be more accurate on this: if the command fails, we won\u0027t have the needed result.","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"2c69697b19543b662ebce06f8e2e1f2b2c12604c","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            dev.parse(output)"},{"line_number":87,"context_line":"        except Exception:"},{"line_number":88,"context_line":"            LOG.warning(_LW(\"Device %s doesn\u0027t exist\"), dev_name)"},{"line_number":89,"context_line":"        self._devices[dev_name] \u003d dev"},{"line_number":90,"context_line":"        return dev"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def get_device(self, dev_name):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da36d5c6_6dd648f2","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":37},"updated":"2017-02-24 14:57:31.000000000","message":"This could add a device that doesn\u0027t exist if there is an exception. Is that what we want?","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2f15f7489de8f104d97da0d306c09381a8083686","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            dev.parse(output)"},{"line_number":87,"context_line":"        except Exception:"},{"line_number":88,"context_line":"            LOG.warning(_LW(\"Device %s doesn\u0027t exist\"), dev_name)"},{"line_number":89,"context_line":"        self._devices[dev_name] \u003d dev"},{"line_number":90,"context_line":"        return dev"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def get_device(self, dev_name):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da36d5c6_03103d56","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":37},"in_reply_to":"da36d5c6_6dd648f2","updated":"2017-02-24 15:26:10.000000000","message":"You are right. There should be a \"return None\" statement in the exception branch.","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"9b64d9c5bb99cd65794102dbf6d9837b1da02f94","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Intel Ltd."},{"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":13,"id":"ba2be162_2187af62","line":1,"range":{"start_line":1,"start_character":23,"end_line":1,"end_character":26},"updated":"2017-02-28 23:15:14.000000000","message":"nit: /s/Ltd./Corporation","commit_id":"a233113a77c1aa2581cd25d5b0012533cfdc7a01"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"118c5f36069634d702979e20acab3b7add6af54b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Intel Ltd."},{"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":13,"id":"ba2be162_dffcd840","line":1,"range":{"start_line":1,"start_character":23,"end_line":1,"end_character":26},"in_reply_to":"ba2be162_2187af62","updated":"2017-03-01 15:09:34.000000000","message":"Done","commit_id":"a233113a77c1aa2581cd25d5b0012533cfdc7a01"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"949594205ec8acd77a8bec081dd279fe875a3194","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def parse(self, cmd_output):"},{"line_number":54,"context_line":"        m \u003d self.pat_link.search(cmd_output)"},{"line_number":55,"context_line":"        self._link \u003d True if m and m.group(\u0027link\u0027) \u003d\u003d \u0027yes\u0027 else False"},{"line_number":56,"context_line":"        m \u003d self.pat_speed.search(cmd_output)"},{"line_number":57,"context_line":"        self._speed \u003d int(m.group(\u0027speed\u0027)) if m else self._speed"},{"line_number":58,"context_line":"        m \u003d self.pat_duplex.search(cmd_output)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7ffa3b31_d113f20c","line":55,"updated":"2017-04-16 07:25:35.000000000","message":"self._link \u003d bool(m and m.group(\u0027link\u0027) \u003d\u003d \u0027yes\u0027)","commit_id":"6636bd8137cf798fbcc1c8a24cffb6912f713c14"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7e94878c51768d2a539905dfb25e86214fcf03dd","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def parse(self, cmd_output):"},{"line_number":54,"context_line":"        m \u003d self.pat_link.search(cmd_output)"},{"line_number":55,"context_line":"        self._link \u003d True if m and m.group(\u0027link\u0027) \u003d\u003d \u0027yes\u0027 else False"},{"line_number":56,"context_line":"        m \u003d self.pat_speed.search(cmd_output)"},{"line_number":57,"context_line":"        self._speed \u003d int(m.group(\u0027speed\u0027)) if m else self._speed"},{"line_number":58,"context_line":"        m \u003d self.pat_duplex.search(cmd_output)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7ffa3b31_f7a450bb","line":55,"in_reply_to":"7ffa3b31_d113f20c","updated":"2017-04-19 09:12:32.000000000","message":"Yes, that\u0027s better.","commit_id":"6636bd8137cf798fbcc1c8a24cffb6912f713c14"}],"neutron/conf/agent/agent_extensions_manager.py":[{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"47c3a201b49af15c5132e474cbab8e79b678e4c8","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from neutron._i18n import _"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"AGENT_EXT_MANAGER_OPTS \u003d ["},{"line_number":19,"context_line":"    cfg.ListOpt(\u0027extensions\u0027,"},{"line_number":20,"context_line":"                default\u003d[],"}],"source_content_type":"text/x-python","patch_set":25,"id":"df140735_921424a2","line":17,"updated":"2017-05-31 12:58:33.000000000","message":"This was added for pep8?","commit_id":"f6ee97ae0444f63ff8f43ae7331ff60b568b99a5"}],"neutron/plugins/ml2/drivers/mech_sriov/agent/sriov_agent_extension_api.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"906bf7f1fa3c71424a68d9b1a11697470867fe32","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    \"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, eswitch_mgr):"},{"line_number":25,"context_line":"        super(SRIOVAgentExtensionAPI, self).__init__()"},{"line_number":26,"context_line":"        self._eswitch_mgr \u003d eswitch_mgr"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def request_devices(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_438d8230","line":25,"range":{"start_line":25,"start_character":8,"end_line":25,"end_character":54},"updated":"2017-03-07 13:53:07.000000000","message":"Did you mean to inherit a class ? Because I don\u0027t see what this is doing.","commit_id":"4159c50a350ad4fa1986c3d86cb1a2307c692dec"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1e8b83d7e77ea5f77871f9b68ba2b7be8a0dd408","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    \"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, eswitch_mgr):"},{"line_number":25,"context_line":"        super(SRIOVAgentExtensionAPI, self).__init__()"},{"line_number":26,"context_line":"        self._eswitch_mgr \u003d eswitch_mgr"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def request_devices(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_efe7fae1","line":25,"range":{"start_line":25,"start_character":8,"end_line":25,"end_character":54},"in_reply_to":"9a30ddce_438d8230","updated":"2017-03-08 16:50:23.000000000","message":"Yesm you are right! It was just the habit of doing this in the __init__ function.","commit_id":"4159c50a350ad4fa1986c3d86cb1a2307c692dec"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"906bf7f1fa3c71424a68d9b1a11697470867fe32","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        containing the network name and the VF PCI slots."},{"line_number":33,"context_line":"        \"\"\""},{"line_number":34,"context_line":"        devices \u003d {}"},{"line_number":35,"context_line":"        for dev_name, dev in self._eswitch_mgr.pci_slot_map.items():"},{"line_number":36,"context_line":"            device \u003d {\u0027network\u0027: dev.phys_net,"},{"line_number":37,"context_line":"                      \u0027vf_pci_slots\u0027: set(dev.get_pci_slot_list())}"},{"line_number":38,"context_line":"            devices[dev.dev_name] \u003d device"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_a6680cbc","line":35,"range":{"start_line":35,"start_character":22,"end_line":35,"end_character":25},"updated":"2017-03-07 13:53:07.000000000","message":"since you are only using dev here we can just call .values() instead of .items()\n\nAlso if I understand this right, dev_name is the manager and dev is the eswitch so can we rename dev to eswitch?","commit_id":"4159c50a350ad4fa1986c3d86cb1a2307c692dec"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1e8b83d7e77ea5f77871f9b68ba2b7be8a0dd408","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        containing the network name and the VF PCI slots."},{"line_number":33,"context_line":"        \"\"\""},{"line_number":34,"context_line":"        devices \u003d {}"},{"line_number":35,"context_line":"        for dev_name, dev in self._eswitch_mgr.pci_slot_map.items():"},{"line_number":36,"context_line":"            device \u003d {\u0027network\u0027: dev.phys_net,"},{"line_number":37,"context_line":"                      \u0027vf_pci_slots\u0027: set(dev.get_pci_slot_list())}"},{"line_number":38,"context_line":"            devices[dev.dev_name] \u003d device"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_0fa36e50","line":35,"range":{"start_line":35,"start_character":22,"end_line":35,"end_character":25},"in_reply_to":"9a30ddce_a6680cbc","updated":"2017-03-08 16:50:23.000000000","message":"Both statements are correct.","commit_id":"4159c50a350ad4fa1986c3d86cb1a2307c692dec"}],"neutron/plugins/ml2/drivers/mech_sriov/agent/sriov_nic_agent.py":[{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"567b148a601c53f30585126cefdf0bfe10e0316e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"from neutron.plugins.ml2.drivers.mech_sriov.agent.common \\"},{"line_number":45,"context_line":"    import exceptions as exc"},{"line_number":46,"context_line":"from neutron.plugins.ml2.drivers.mech_sriov.agent import eswitch_manager as esm"},{"line_number":47,"context_line":"from neutron.plugins.ml2.drivers.mech_sriov.agent import ("},{"line_number":48,"context_line":"    sriov_agent_extension_api as sriov_ext_api)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_01e9bb1a","line":48,"range":{"start_line":47,"start_character":57,"end_line":48,"end_character":47},"updated":"2016-12-01 15:54:16.000000000","message":"use \u0027\\\u0027 for consistency.","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e98ee5e738b6207e48363fb311aabfb4b48104b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"from neutron.plugins.ml2.drivers.mech_sriov.agent.common \\"},{"line_number":45,"context_line":"    import exceptions as exc"},{"line_number":46,"context_line":"from neutron.plugins.ml2.drivers.mech_sriov.agent import eswitch_manager as esm"},{"line_number":47,"context_line":"from neutron.plugins.ml2.drivers.mech_sriov.agent import ("},{"line_number":48,"context_line":"    sriov_agent_extension_api as sriov_ext_api)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_3f5a2b2b","line":48,"range":{"start_line":47,"start_character":57,"end_line":48,"end_character":47},"in_reply_to":"3a71b18c_01e9bb1a","updated":"2016-12-09 11:58:14.000000000","message":"Done","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"}],"neutron/tests/unit/agent/l2/extensions/test_qos.py":[{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"9b64d9c5bb99cd65794102dbf6d9837b1da02f94","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                                      (\u00270000:01:99.0\u0027,))"},{"line_number":445,"context_line":"            mock_update.assert_not_called()"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_update_available_bw_existing_device(self):"},{"line_number":448,"context_line":"        nic_bw_manager \u003d qos.NicBwManager()"},{"line_number":449,"context_line":"        nic_bw_manager.add_device(\u0027name1\u0027, 100, \u0027100\u0027, \u0027phynet1\u0027,"},{"line_number":450,"context_line":"                                  (\u00270000:01:01.0\u0027, ))"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba2be162_41dd8341","line":447,"updated":"2017-02-28 23:15:14.000000000","message":"This test case decreases the available bw. Can we add a test case that increases the available bw?","commit_id":"a233113a77c1aa2581cd25d5b0012533cfdc7a01"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"118c5f36069634d702979e20acab3b7add6af54b","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                                      (\u00270000:01:99.0\u0027,))"},{"line_number":445,"context_line":"            mock_update.assert_not_called()"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def test_update_available_bw_existing_device(self):"},{"line_number":448,"context_line":"        nic_bw_manager \u003d qos.NicBwManager()"},{"line_number":449,"context_line":"        nic_bw_manager.add_device(\u0027name1\u0027, 100, \u0027100\u0027, \u0027phynet1\u0027,"},{"line_number":450,"context_line":"                                  (\u00270000:01:01.0\u0027, ))"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba2be162_3acc2235","line":447,"in_reply_to":"ba2be162_41dd8341","updated":"2017-03-01 15:09:34.000000000","message":"Done","commit_id":"a233113a77c1aa2581cd25d5b0012533cfdc7a01"}],"neutron/tests/unit/agent/linux/test_ethtool.py":[{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"567b148a601c53f30585126cefdf0bfe10e0316e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron.agent.linux import ethtool"},{"line_number":19,"context_line":"from neutron.agent.linux import ip_conntrack"},{"line_number":20,"context_line":"from neutron.tests import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_21d5d742","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":44},"updated":"2016-12-01 15:54:16.000000000","message":"Not used in the file.","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e98ee5e738b6207e48363fb311aabfb4b48104b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron.agent.linux import ethtool"},{"line_number":19,"context_line":"from neutron.agent.linux import ip_conntrack"},{"line_number":20,"context_line":"from neutron.tests import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_9f625fd7","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":44},"in_reply_to":"3a71b18c_21d5d742","updated":"2016-12-09 11:58:14.000000000","message":"Done","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"567b148a601c53f30585126cefdf0bfe10e0316e","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        dev \u003d ethtool.EthtoolDevice(\u0027enp6s0f0\u0027)"},{"line_number":99,"context_line":"        dev.parse(self.DEVICE1)"},{"line_number":100,"context_line":"        self.assertEqual(dev.duplex, \u0027Full\u0027)"},{"line_number":101,"context_line":"        self.assertEqual(dev.link, True)"},{"line_number":102,"context_line":"        self.assertEqual(dev.speed, 1000)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_device2(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_e603f50d","line":101,"range":{"start_line":101,"start_character":8,"end_line":101,"end_character":40},"updated":"2016-12-01 15:54:16.000000000","message":"assertTrue","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e98ee5e738b6207e48363fb311aabfb4b48104b","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        dev \u003d ethtool.EthtoolDevice(\u0027enp6s0f0\u0027)"},{"line_number":99,"context_line":"        dev.parse(self.DEVICE1)"},{"line_number":100,"context_line":"        self.assertEqual(dev.duplex, \u0027Full\u0027)"},{"line_number":101,"context_line":"        self.assertEqual(dev.link, True)"},{"line_number":102,"context_line":"        self.assertEqual(dev.speed, 1000)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_device2(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_df5f7773","line":101,"range":{"start_line":101,"start_character":8,"end_line":101,"end_character":40},"in_reply_to":"3a71b18c_e603f50d","updated":"2016-12-09 11:58:14.000000000","message":"Done","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"567b148a601c53f30585126cefdf0bfe10e0316e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        dev \u003d ethtool.EthtoolDevice(\u0027enp6s0f0\u0027)"},{"line_number":106,"context_line":"        dev.parse(self.DEVICE2)"},{"line_number":107,"context_line":"        self.assertEqual(dev.duplex, \u0027Full\u0027)"},{"line_number":108,"context_line":"        self.assertEqual(dev.link, False)"},{"line_number":109,"context_line":"        self.assertEqual(dev.speed, 40000)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_device_noinfo(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_261ded73","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":41},"updated":"2016-12-01 15:54:16.000000000","message":"assertFalse","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e98ee5e738b6207e48363fb311aabfb4b48104b","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        dev \u003d ethtool.EthtoolDevice(\u0027enp6s0f0\u0027)"},{"line_number":106,"context_line":"        dev.parse(self.DEVICE2)"},{"line_number":107,"context_line":"        self.assertEqual(dev.duplex, \u0027Full\u0027)"},{"line_number":108,"context_line":"        self.assertEqual(dev.link, False)"},{"line_number":109,"context_line":"        self.assertEqual(dev.speed, 40000)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_device_noinfo(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_1f5acf83","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":41},"in_reply_to":"3a71b18c_261ded73","updated":"2016-12-09 11:58:14.000000000","message":"Done","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"567b148a601c53f30585126cefdf0bfe10e0316e","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def test_device_noinfo(self):"},{"line_number":112,"context_line":"        dev \u003d ethtool.EthtoolDevice(\u0027br-int\u0027)"},{"line_number":113,"context_line":"        dev.parse(self.DEVICE3)"},{"line_number":114,"context_line":"        self.assertEqual(dev.duplex, None)"},{"line_number":115,"context_line":"        self.assertEqual(dev.link, False)"},{"line_number":116,"context_line":"        self.assertEqual(dev.speed, None)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_4109f32b","line":114,"range":{"start_line":114,"start_character":8,"end_line":114,"end_character":42},"updated":"2016-12-01 15:54:16.000000000","message":"assertNone","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e98ee5e738b6207e48363fb311aabfb4b48104b","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def test_device_noinfo(self):"},{"line_number":112,"context_line":"        dev \u003d ethtool.EthtoolDevice(\u0027br-int\u0027)"},{"line_number":113,"context_line":"        dev.parse(self.DEVICE3)"},{"line_number":114,"context_line":"        self.assertEqual(dev.duplex, None)"},{"line_number":115,"context_line":"        self.assertEqual(dev.link, False)"},{"line_number":116,"context_line":"        self.assertEqual(dev.speed, None)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_3f5dcb79","line":114,"range":{"start_line":114,"start_character":8,"end_line":114,"end_character":42},"in_reply_to":"3a71b18c_4109f32b","updated":"2016-12-09 11:58:14.000000000","message":"Done","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"567b148a601c53f30585126cefdf0bfe10e0316e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        dev \u003d ethtool.EthtoolDevice(\u0027br-int\u0027)"},{"line_number":113,"context_line":"        dev.parse(self.DEVICE3)"},{"line_number":114,"context_line":"        self.assertEqual(dev.duplex, None)"},{"line_number":115,"context_line":"        self.assertEqual(dev.link, False)"},{"line_number":116,"context_line":"        self.assertEqual(dev.speed, None)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_865ec143","line":115,"range":{"start_line":115,"start_character":8,"end_line":115,"end_character":41},"updated":"2016-12-01 15:54:16.000000000","message":"assertFalse","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e98ee5e738b6207e48363fb311aabfb4b48104b","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        dev \u003d ethtool.EthtoolDevice(\u0027br-int\u0027)"},{"line_number":113,"context_line":"        dev.parse(self.DEVICE3)"},{"line_number":114,"context_line":"        self.assertEqual(dev.duplex, None)"},{"line_number":115,"context_line":"        self.assertEqual(dev.link, False)"},{"line_number":116,"context_line":"        self.assertEqual(dev.speed, None)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_5f544753","line":115,"range":{"start_line":115,"start_character":8,"end_line":115,"end_character":41},"in_reply_to":"3a71b18c_865ec143","updated":"2016-12-09 11:58:14.000000000","message":"Done","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"567b148a601c53f30585126cefdf0bfe10e0316e","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        dev.parse(self.DEVICE3)"},{"line_number":114,"context_line":"        self.assertEqual(dev.duplex, None)"},{"line_number":115,"context_line":"        self.assertEqual(dev.link, False)"},{"line_number":116,"context_line":"        self.assertEqual(dev.speed, None)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_466d8903","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":41},"updated":"2016-12-01 15:54:16.000000000","message":"assertNone","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e98ee5e738b6207e48363fb311aabfb4b48104b","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        dev.parse(self.DEVICE3)"},{"line_number":114,"context_line":"        self.assertEqual(dev.duplex, None)"},{"line_number":115,"context_line":"        self.assertEqual(dev.link, False)"},{"line_number":116,"context_line":"        self.assertEqual(dev.speed, None)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_7f4f43be","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":41},"in_reply_to":"3a71b18c_466d8903","updated":"2016-12-09 11:58:14.000000000","message":"Done","commit_id":"cb10907ca7adb969e70c0ce01e1835a7208e63e4"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"2c69697b19543b662ebce06f8e2e1f2b2c12604c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            self.assertEqual(dev.name, dev_name)"},{"line_number":136,"context_line":"            self.assertEqual(ethtool_obj._devices[dev_name].name, dev.name)"},{"line_number":137,"context_line":"            self.assertEqual(ethtool_obj._devices[dev_name].speed, dev.speed)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_get_device_existing_device(self):"},{"line_number":140,"context_line":"        dev_name \u003d \u0027dev_name\u0027"},{"line_number":141,"context_line":"        ethtool_obj \u003d ethtool.Ethtool()"}],"source_content_type":"text/x-python","patch_set":11,"id":"da36d5c6_806183ab","line":138,"updated":"2017-02-24 14:57:31.000000000","message":"Should we have a test_read_not_existing_device to cover the  exception?  \nhttps://review.openstack.org/#/c/401254/11/neutron/agent/linux/ethtool.py@87","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"923ed696d3fd9c09490c81ff957ef9c516ffb8d5","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            self.assertEqual(dev.name, dev_name)"},{"line_number":136,"context_line":"            self.assertEqual(ethtool_obj._devices[dev_name].name, dev.name)"},{"line_number":137,"context_line":"            self.assertEqual(ethtool_obj._devices[dev_name].speed, dev.speed)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_get_device_existing_device(self):"},{"line_number":140,"context_line":"        dev_name \u003d \u0027dev_name\u0027"},{"line_number":141,"context_line":"        ethtool_obj \u003d ethtool.Ethtool()"}],"source_content_type":"text/x-python","patch_set":11,"id":"da36d5c6_07903794","line":138,"in_reply_to":"da36d5c6_3ea2b899","updated":"2017-02-24 23:43:35.000000000","message":"I didn\u0027t read it correctly. Yes, I need to implement this function.","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2f15f7489de8f104d97da0d306c09381a8083686","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            self.assertEqual(dev.name, dev_name)"},{"line_number":136,"context_line":"            self.assertEqual(ethtool_obj._devices[dev_name].name, dev.name)"},{"line_number":137,"context_line":"            self.assertEqual(ethtool_obj._devices[dev_name].speed, dev.speed)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_get_device_existing_device(self):"},{"line_number":140,"context_line":"        dev_name \u003d \u0027dev_name\u0027"},{"line_number":141,"context_line":"        ethtool_obj \u003d ethtool.Ethtool()"}],"source_content_type":"text/x-python","patch_set":11,"id":"da36d5c6_3ea2b899","line":138,"in_reply_to":"da36d5c6_806183ab","updated":"2017-02-24 15:26:10.000000000","message":"L149","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"9b64d9c5bb99cd65794102dbf6d9837b1da02f94","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Intel Ltd."},{"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":13,"id":"ba2be162_c1c89377","line":1,"range":{"start_line":1,"start_character":23,"end_line":1,"end_character":26},"updated":"2017-02-28 23:15:14.000000000","message":"nit: /s/Ltd/Corporation","commit_id":"a233113a77c1aa2581cd25d5b0012533cfdc7a01"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"118c5f36069634d702979e20acab3b7add6af54b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Intel Ltd."},{"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":13,"id":"ba2be162_ff90bcee","line":1,"range":{"start_line":1,"start_character":23,"end_line":1,"end_character":26},"in_reply_to":"ba2be162_c1c89377","updated":"2017-03-01 15:09:34.000000000","message":"Done","commit_id":"a233113a77c1aa2581cd25d5b0012533cfdc7a01"}],"neutron/tests/unit/plugins/ml2/drivers/mech_sriov/agent/extension_drivers/test_qos_driver.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"949594205ec8acd77a8bec081dd279fe875a3194","unresolved":false,"context_lines":[{"line_number":35,"context_line":"class FakeEthtoolDevice(object):"},{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        self.name \u003d \u0027dev_name\u0027"},{"line_number":38,"context_line":"        self.speed \u003d random.randint(1000, 2000)"},{"line_number":39,"context_line":"        self.duplex \u003d random.choice([True, False])"},{"line_number":40,"context_line":"        self.link \u003d False"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7ffa3b31_f10eeee3","line":38,"updated":"2017-04-16 07:25:35.000000000","message":"no non-determinism in unit tests please. It makes failures really hard to debug. Add some separate test cases or have the tests themselves cover these ranges.","commit_id":"6636bd8137cf798fbcc1c8a24cffb6912f713c14"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7e94878c51768d2a539905dfb25e86214fcf03dd","unresolved":false,"context_lines":[{"line_number":35,"context_line":"class FakeEthtoolDevice(object):"},{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        self.name \u003d \u0027dev_name\u0027"},{"line_number":38,"context_line":"        self.speed \u003d random.randint(1000, 2000)"},{"line_number":39,"context_line":"        self.duplex \u003d random.choice([True, False])"},{"line_number":40,"context_line":"        self.link \u003d False"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7ffa3b31_f7e0d0ce","line":38,"in_reply_to":"7ffa3b31_f10eeee3","updated":"2017-04-19 09:12:32.000000000","message":"You are right. Because there isn\u0027t any restriction in the speed (it\u0027s stored without any check), I\u0027ll set a default value.","commit_id":"6636bd8137cf798fbcc1c8a24cffb6912f713c14"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7e94878c51768d2a539905dfb25e86214fcf03dd","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        self.name \u003d \u0027dev_name\u0027"},{"line_number":38,"context_line":"        self.speed \u003d random.randint(1000, 2000)"},{"line_number":39,"context_line":"        self.duplex \u003d random.choice([True, False])"},{"line_number":40,"context_line":"        self.link \u003d False"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7ffa3b31_97d18cfe","line":39,"updated":"2017-04-19 09:12:32.000000000","message":"The same here: there is no restriction in this parameter. I\u0027ll put a default value.","commit_id":"6636bd8137cf798fbcc1c8a24cffb6912f713c14"}],"neutron/tests/unit/plugins/ml2/drivers/mech_sriov/agent/test_sriov_agent_extension_api.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"2c69697b19543b662ebce06f8e2e1f2b2c12604c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from random import randrange"},{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.plugins.ml2.drivers.mech_sriov.agent import \\"},{"line_number":20,"context_line":"    sriov_agent_extension_api"}],"source_content_type":"text/x-python","patch_set":11,"id":"da36d5c6_e37ec968","line":17,"range":{"start_line":17,"start_character":7,"end_line":17,"end_character":11},"updated":"2017-02-24 14:57:31.000000000","message":"Should we use oslo.utils here? https://docs.openstack.org/developer/oslo.utils/api/uuidutils.html\n\nfrom oslo_utils import uuidutils","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2f15f7489de8f104d97da0d306c09381a8083686","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from random import randrange"},{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.plugins.ml2.drivers.mech_sriov.agent import \\"},{"line_number":20,"context_line":"    sriov_agent_extension_api"}],"source_content_type":"text/x-python","patch_set":11,"id":"da36d5c6_fe37404a","line":17,"range":{"start_line":17,"start_character":7,"end_line":17,"end_character":11},"in_reply_to":"da36d5c6_e37ec968","updated":"2017-02-24 15:26:10.000000000","message":"It\u0027s just a wrapper. I don\u0027t think we need this here","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"2c69697b19543b662ebce06f8e2e1f2b2c12604c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class FakeEmbSwitch(object):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self, num_vf\u003dNone):"},{"line_number":27,"context_line":"        self.phys_net \u003d \u0027net-name-\u0027 + uuid.uuid4().hex"},{"line_number":28,"context_line":"        self.dev_name \u003d \u0027dev-name-\u0027 + uuid.uuid4().hex"},{"line_number":29,"context_line":"        self.pci_slot_map \u003d self._generate_pci_slot_map(num_vf)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da36d5c6_63b9f914","line":27,"range":{"start_line":27,"start_character":38,"end_line":27,"end_character":54},"updated":"2017-02-24 14:57:31.000000000","message":"uuidutils.generate_uuid(dashed\u003dFalse)","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2f15f7489de8f104d97da0d306c09381a8083686","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class FakeEmbSwitch(object):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self, num_vf\u003dNone):"},{"line_number":27,"context_line":"        self.phys_net \u003d \u0027net-name-\u0027 + uuid.uuid4().hex"},{"line_number":28,"context_line":"        self.dev_name \u003d \u0027dev-name-\u0027 + uuid.uuid4().hex"},{"line_number":29,"context_line":"        self.pci_slot_map \u003d self._generate_pci_slot_map(num_vf)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da36d5c6_5e492ccf","line":27,"range":{"start_line":27,"start_character":38,"end_line":27,"end_character":54},"in_reply_to":"da36d5c6_63b9f914","updated":"2017-02-24 15:26:10.000000000","message":"ditto, just a wrapper for this function","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"906bf7f1fa3c71424a68d9b1a11697470867fe32","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @staticmethod"},{"line_number":61,"context_line":"    def _find_device_in_embswitch_manager(eswitch_manager, dev_name):"},{"line_number":62,"context_line":"        for emb_switch in (sw for sw in eswitch_manager.pci_slot_map.values()"},{"line_number":63,"context_line":"                           if sw.dev_name \u003d\u003d dev_name):"},{"line_number":64,"context_line":"            return emb_switch"},{"line_number":65,"context_line":"        return None"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_request_list_devices(self):"},{"line_number":68,"context_line":"        eswitch_manager \u003d FakeESwitchManager()"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_463110a2","line":65,"range":{"start_line":62,"start_character":9,"end_line":65,"end_character":19},"updated":"2017-03-07 13:53:07.000000000","message":"I think you want to use next instead see, https://docs.python.org/2/library/functions.html#next\n\nreturn next(sw for sw in switch_manager.pci_slot_map.values() \n            if sw.dev_name \u003d\u003d dev_name, None)","commit_id":"4159c50a350ad4fa1986c3d86cb1a2307c692dec"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1e8b83d7e77ea5f77871f9b68ba2b7be8a0dd408","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @staticmethod"},{"line_number":61,"context_line":"    def _find_device_in_embswitch_manager(eswitch_manager, dev_name):"},{"line_number":62,"context_line":"        for emb_switch in (sw for sw in eswitch_manager.pci_slot_map.values()"},{"line_number":63,"context_line":"                           if sw.dev_name \u003d\u003d dev_name):"},{"line_number":64,"context_line":"            return emb_switch"},{"line_number":65,"context_line":"        return None"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_request_list_devices(self):"},{"line_number":68,"context_line":"        eswitch_manager \u003d FakeESwitchManager()"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_cb5b092d","line":65,"range":{"start_line":62,"start_character":9,"end_line":65,"end_character":19},"in_reply_to":"9a30ddce_463110a2","updated":"2017-03-08 16:50:23.000000000","message":"For sure, this is the elegant version","commit_id":"4159c50a350ad4fa1986c3d86cb1a2307c692dec"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"7ab20d60351333504304a288b02f3c993afbc884","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.pci_slot_map \u003d {}"},{"line_number":49,"context_line":"        num_dev \u003d num_dev if (num_dev and 8 \u003c\u003d num_dev \u003c\u003d 0) else 3"},{"line_number":50,"context_line":"        for index in range(num_dev):"},{"line_number":51,"context_line":"            self.pci_slot_map[\u00270000:05:0%s.0\u0027 % str(index)] \u003d \\"},{"line_number":52,"context_line":"                FakeEmbSwitch(num_vf)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a30ddce_ecd99f23","line":51,"range":{"start_line":51,"start_character":48,"end_line":51,"end_character":51},"updated":"2017-03-09 14:52:17.000000000","message":"Nit: the %s should call the str operator for you.\n\n\u003e \u003e\u003e\u003e a \u003d 0\n\u003e\u003e\u003e s \u003d \u0027my num %s\u0027 % a\n\u003e\u003e\u003e s\n\u0027my num 0\u0027","commit_id":"c1fccb2e0e84699cfaa6ab7603a0517b7d7aaf3b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e0ca183b9003804f566a16728293a673ad542e6f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.pci_slot_map \u003d {}"},{"line_number":49,"context_line":"        num_dev \u003d num_dev if (num_dev and 8 \u003c\u003d num_dev \u003c\u003d 0) else 3"},{"line_number":50,"context_line":"        for index in range(num_dev):"},{"line_number":51,"context_line":"            self.pci_slot_map[\u00270000:05:0%s.0\u0027 % str(index)] \u003d \\"},{"line_number":52,"context_line":"                FakeEmbSwitch(num_vf)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a30ddce_6fdafc4d","line":51,"range":{"start_line":51,"start_character":48,"end_line":51,"end_character":51},"in_reply_to":"9a30ddce_ecd99f23","updated":"2017-03-09 16:35:30.000000000","message":"I don\u0027t know why I did this.","commit_id":"c1fccb2e0e84699cfaa6ab7603a0517b7d7aaf3b"}],"releasenotes/notes/add-qos-bw-manager-sriov-dad45ced8dd60ce2.yaml":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"2c69697b19543b662ebce06f8e2e1f2b2c12604c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added a bandwidth manager for SR-IOV QoS extension, to track the available"},{"line_number":4,"context_line":"    bandwidth of all physical devices in the host."},{"line_number":5,"context_line":"  - Added new config option `physical_interface_bandwidth`, to"},{"line_number":6,"context_line":"    set the total bandwidth available on each host physical"},{"line_number":7,"context_line":"    interface, mapping physical interface names to the total bandwidth"},{"line_number":8,"context_line":"    available on this interface."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"da36d5c6_636739b7","line":5,"range":{"start_line":5,"start_character":29,"end_line":5,"end_character":57},"updated":"2017-02-24 14:57:31.000000000","message":"This should cause a DocImpact tag to be added to the commit message right?","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2f15f7489de8f104d97da0d306c09381a8083686","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added a bandwidth manager for SR-IOV QoS extension, to track the available"},{"line_number":4,"context_line":"    bandwidth of all physical devices in the host."},{"line_number":5,"context_line":"  - Added new config option `physical_interface_bandwidth`, to"},{"line_number":6,"context_line":"    set the total bandwidth available on each host physical"},{"line_number":7,"context_line":"    interface, mapping physical interface names to the total bandwidth"},{"line_number":8,"context_line":"    available on this interface."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"da36d5c6_be1868d4","line":5,"range":{"start_line":5,"start_character":29,"end_line":5,"end_character":57},"in_reply_to":"da36d5c6_636739b7","updated":"2017-02-24 15:26:10.000000000","message":"Done","commit_id":"8a448a95b1ad6c4e6fa9ac2be8cc6c9f9e00adfa"}]}
