)]}'
{"nova/tests/unit/virt/test_hardware.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3be04ff75ee709b0e3d87e1a5bd4f20f15a4089","unresolved":false,"context_lines":[{"line_number":2867,"context_line":""},{"line_number":2868,"context_line":"class EmulatorThreadsTestCase(test.NoDBTestCase):"},{"line_number":2869,"context_line":""},{"line_number":2870,"context_line":"    def _host_topology(self):"},{"line_number":2871,"context_line":"        return objects.NUMATopology("},{"line_number":2872,"context_line":"            cells\u003d[objects.NUMACell(id\u003d0, cpuset\u003dset([0, 1]), memory\u003d2048,"},{"line_number":2873,"context_line":"                                    cpu_usage\u003d0,"},{"line_number":2874,"context_line":"                                    memory_usage\u003d0, siblings\u003d[],"},{"line_number":2875,"context_line":"                                    mempages\u003d[], pinned_cpus\u003dset([])),"},{"line_number":2876,"context_line":"                   objects.NUMACell(id\u003d1, cpuset\u003dset([2, 3]), memory\u003d2048,"},{"line_number":2877,"context_line":"                                    cpu_usage\u003d0,"},{"line_number":2878,"context_line":"                                    memory_usage\u003d0, siblings\u003d[],"},{"line_number":2879,"context_line":"                                    mempages\u003d[], pinned_cpus\u003dset([]))])"},{"line_number":2880,"context_line":""},{"line_number":2881,"context_line":"    def test_single_node_not_defined(self):"},{"line_number":2882,"context_line":"        host_topo \u003d self._host_topology()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_7f83e3cc","line":2879,"range":{"start_line":2870,"start_character":0,"end_line":2879,"end_character":71},"updated":"2016-11-23 14:49:30.000000000","message":"This could be variable, no? If not, it should definitely be a staticmethod","commit_id":"cc6f13e032d25257e73a284693fe54323e6401a9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a6ecf7b72da0f4ec0ec39e4e5a85f57f98a56b28","unresolved":false,"context_lines":[{"line_number":2876,"context_line":"                   objects.NUMACell(id\u003d1, cpuset\u003dset([2, 3]), memory\u003d2048,"},{"line_number":2877,"context_line":"                                    cpu_usage\u003d0,"},{"line_number":2878,"context_line":"                                    memory_usage\u003d0, siblings\u003d[],"},{"line_number":2879,"context_line":"                                    mempages\u003d[], pinned_cpus\u003dset([]))])"},{"line_number":2880,"context_line":""},{"line_number":2881,"context_line":"    def test_single_node_not_defined(self):"},{"line_number":2882,"context_line":"        host_topo \u003d self._host_topology()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_83566fd0","line":2879,"in_reply_to":"5a74a57a_7f83e3cc","updated":"2016-12-01 16:12:41.000000000","message":"Not sure why this should *definitely* be a staticmethod, but ok.","commit_id":"cc6f13e032d25257e73a284693fe54323e6401a9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3be04ff75ee709b0e3d87e1a5bd4f20f15a4089","unresolved":false,"context_lines":[{"line_number":2878,"context_line":"                                    memory_usage\u003d0, siblings\u003d[],"},{"line_number":2879,"context_line":"                                    mempages\u003d[], pinned_cpus\u003dset([]))])"},{"line_number":2880,"context_line":""},{"line_number":2881,"context_line":"    def test_single_node_not_defined(self):"},{"line_number":2882,"context_line":"        host_topo \u003d self._host_topology()"},{"line_number":2883,"context_line":"        inst_topo \u003d objects.InstanceNUMATopology("},{"line_number":2884,"context_line":"            cells\u003d[objects.InstanceNUMACell("}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_bf89fbcc","line":2881,"range":{"start_line":2881,"start_character":0,"end_line":2881,"end_character":43},"updated":"2016-11-23 14:49:30.000000000","message":"(optional) We don\u0027t do this enough in nova, but I\u0027d really appreciate some docstrings stating what this test attempts to validate. I imagine this would look something like the following:\n\n    Validate single node provisioning with no emulator cpus.\n\n    Ensure emulator CPUs are not used when not requested.","commit_id":"cc6f13e032d25257e73a284693fe54323e6401a9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a6ecf7b72da0f4ec0ec39e4e5a85f57f98a56b28","unresolved":false,"context_lines":[{"line_number":2878,"context_line":"                                    memory_usage\u003d0, siblings\u003d[],"},{"line_number":2879,"context_line":"                                    mempages\u003d[], pinned_cpus\u003dset([]))])"},{"line_number":2880,"context_line":""},{"line_number":2881,"context_line":"    def test_single_node_not_defined(self):"},{"line_number":2882,"context_line":"        host_topo \u003d self._host_topology()"},{"line_number":2883,"context_line":"        inst_topo \u003d objects.InstanceNUMATopology("},{"line_number":2884,"context_line":"            cells\u003d[objects.InstanceNUMACell("}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_a368cb88","line":2881,"in_reply_to":"5a74a57a_bf89fbcc","updated":"2016-12-01 16:12:41.000000000","message":"When it\u0027s obvious by the test name I do not think it\u0027s necessary.","commit_id":"cc6f13e032d25257e73a284693fe54323e6401a9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3be04ff75ee709b0e3d87e1a5bd4f20f15a4089","unresolved":false,"context_lines":[{"line_number":2879,"context_line":"                                    mempages\u003d[], pinned_cpus\u003dset([]))])"},{"line_number":2880,"context_line":""},{"line_number":2881,"context_line":"    def test_single_node_not_defined(self):"},{"line_number":2882,"context_line":"        host_topo \u003d self._host_topology()"},{"line_number":2883,"context_line":"        inst_topo \u003d objects.InstanceNUMATopology("},{"line_number":2884,"context_line":"            cells\u003d[objects.InstanceNUMACell("},{"line_number":2885,"context_line":"                id\u003d0,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_7f6da303","line":2882,"range":{"start_line":2882,"start_character":8,"end_line":2882,"end_character":41},"updated":"2016-11-23 14:49:30.000000000","message":"If you make the above a variable, you can kill this in all functions","commit_id":"cc6f13e032d25257e73a284693fe54323e6401a9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3be04ff75ee709b0e3d87e1a5bd4f20f15a4089","unresolved":false,"context_lines":[{"line_number":2901,"context_line":"                cpuset\u003dset([0]), memory\u003d2048,"},{"line_number":2902,"context_line":"                cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED)])"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"        inst_topo \u003d hw.numa_fit_instance_to_host("},{"line_number":2905,"context_line":"            host_topo, inst_topo)"},{"line_number":2906,"context_line":"        self.assertEqual({0: 0}, inst_topo.cells[0].cpu_pinning)"},{"line_number":2907,"context_line":"        self.assertEqual(set([]), inst_topo.cells[0].cpus_overhead)"},{"line_number":2908,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_9f5fdf71","line":2905,"range":{"start_line":2904,"start_character":0,"end_line":2905,"end_character":33},"updated":"2016-11-23 14:49:30.000000000","message":"nit: This wrapping appears to be superfluous","commit_id":"cc6f13e032d25257e73a284693fe54323e6401a9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a6ecf7b72da0f4ec0ec39e4e5a85f57f98a56b28","unresolved":false,"context_lines":[{"line_number":2902,"context_line":"                cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED)])"},{"line_number":2903,"context_line":""},{"line_number":2904,"context_line":"        inst_topo \u003d hw.numa_fit_instance_to_host("},{"line_number":2905,"context_line":"            host_topo, inst_topo)"},{"line_number":2906,"context_line":"        self.assertEqual({0: 0}, inst_topo.cells[0].cpu_pinning)"},{"line_number":2907,"context_line":"        self.assertEqual(set([]), inst_topo.cells[0].cpus_overhead)"},{"line_number":2908,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_a3160bef","line":2905,"in_reply_to":"5a74a57a_9f5fdf71","updated":"2016-12-01 16:12:41.000000000","message":"Done","commit_id":"cc6f13e032d25257e73a284693fe54323e6401a9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"23bd889f771d3ae534291a4dfbb37688254817e6","unresolved":false,"context_lines":[{"line_number":2931,"context_line":""},{"line_number":2932,"context_line":"class EmulatorThreadsTestCase(test.NoDBTestCase):"},{"line_number":2933,"context_line":""},{"line_number":2934,"context_line":"    @staticmethod"},{"line_number":2935,"context_line":"    def _host_topology():"},{"line_number":2936,"context_line":"        return objects.NUMATopology("},{"line_number":2937,"context_line":"            cells\u003d[objects.NUMACell(id\u003d0, cpuset\u003dset([0, 1]), memory\u003d2048,"}],"source_content_type":"text/x-python","patch_set":31,"id":"1a1ced50_67a58545","line":2934,"range":{"start_line":2934,"start_character":5,"end_line":2934,"end_character":17},"updated":"2017-03-22 15:09:14.000000000","message":"nit: Actually, a property would have made more sense. Also, to be clear we\u0027re not storing this as a variable because the \u0027numa_fit_instance_to_host\u0027 function would modify it, right?","commit_id":"3db3dbc1cf165b9f1504910612c9df21e73d061a"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"187b9211cfb368d6c815a3d5150a89a60dd6d228","unresolved":false,"context_lines":[{"line_number":2931,"context_line":""},{"line_number":2932,"context_line":"class EmulatorThreadsTestCase(test.NoDBTestCase):"},{"line_number":2933,"context_line":""},{"line_number":2934,"context_line":"    @staticmethod"},{"line_number":2935,"context_line":"    def _host_topology():"},{"line_number":2936,"context_line":"        return objects.NUMATopology("},{"line_number":2937,"context_line":"            cells\u003d[objects.NUMACell(id\u003d0, cpuset\u003dset([0, 1]), memory\u003d2048,"}],"source_content_type":"text/x-python","patch_set":31,"id":"1a1ced50_3c345c48","line":2934,"in_reply_to":"1a1ced50_67a58545","updated":"2017-03-23 08:27:46.000000000","message":"Yes we want create a new one for each tests since the UT are running in parallel.","commit_id":"3db3dbc1cf165b9f1504910612c9df21e73d061a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c0214c97aa5242bfa681274c6566e97cd9d56455","unresolved":false,"context_lines":[{"line_number":2990,"context_line":"                fields.CPUEmulatorThreadsPolicy.ISOLATE),"},{"line_number":2991,"context_line":"            cells\u003d[objects.InstanceNUMACell("},{"line_number":2992,"context_line":"                id\u003d0,"},{"line_number":2993,"context_line":"                cpuset\u003dset([0, 1, 2, 4]), memory\u003d2048,"},{"line_number":2994,"context_line":"                cpu_policy\u003dfields.CPUAllocationPolicy.DEDICATED)])"},{"line_number":2995,"context_line":""},{"line_number":2996,"context_line":"        inst_topo \u003d hw.numa_fit_instance_to_host(host_topo, inst_topo)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ffe62b97_9cb3b30a","line":2993,"updated":"2017-03-28 17:04:04.000000000","message":"shouldn\u0027t this be set([0, 1, 2, 3])? I guess it doesn\u0027t really matter since the numbers represent the virtual CPU set for the instance NUMA cell request? Still, seems odd.","commit_id":"d58515c905d7f5df111cc210c75443fc1b6dd227"}],"nova/virt/hardware.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3be04ff75ee709b0e3d87e1a5bd4f20f15a4089","unresolved":false,"context_lines":[{"line_number":883,"context_line":""},{"line_number":884,"context_line":""},{"line_number":885,"context_line":"def _numa_fit_instance_cell(host_cell, instance_cell, limit_cell\u003dNone,"},{"line_number":886,"context_line":"                            cpus_overhead\u003d0):"},{"line_number":887,"context_line":"    \"\"\"Ensure an instance cell can fit onto a host cell"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"    Ensure an instance cell can fit onto a host cell and, if so, return"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_42264cbb","line":886,"range":{"start_line":886,"start_character":28,"end_line":886,"end_character":41},"updated":"2016-11-23 14:49:30.000000000","message":"overhead_cpus","commit_id":"cc6f13e032d25257e73a284693fe54323e6401a9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3be04ff75ee709b0e3d87e1a5bd4f20f15a4089","unresolved":false,"context_lines":[{"line_number":893,"context_line":"    :param host_cell: host cell to fit the instance cell onto"},{"line_number":894,"context_line":"    :param instance_cell: instance cell we want to fit"},{"line_number":895,"context_line":"    :param limit_cell: an objects.NUMATopologyLimit or None"},{"line_number":896,"context_line":"    :param cpus_overhead: An int to indicate the number of CPUs overhead"},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"    :returns: objects.InstanceNUMACell with the id set to that of the"},{"line_number":899,"context_line":"              host, or None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_df095733","line":896,"range":{"start_line":896,"start_character":26,"end_line":896,"end_character":72},"updated":"2016-11-23 14:49:30.000000000","message":"Maybe\n\n    number of CPUs to reserve for emulator overhead\n\n?","commit_id":"cc6f13e032d25257e73a284693fe54323e6401a9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a6ecf7b72da0f4ec0ec39e4e5a85f57f98a56b28","unresolved":false,"context_lines":[{"line_number":893,"context_line":"    :param host_cell: host cell to fit the instance cell onto"},{"line_number":894,"context_line":"    :param instance_cell: instance cell we want to fit"},{"line_number":895,"context_line":"    :param limit_cell: an objects.NUMATopologyLimit or None"},{"line_number":896,"context_line":"    :param cpus_overhead: An int to indicate the number of CPUs overhead"},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"    :returns: objects.InstanceNUMACell with the id set to that of the"},{"line_number":899,"context_line":"              host, or None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_4397f78f","line":896,"in_reply_to":"5a74a57a_df095733","updated":"2016-12-01 16:12:41.000000000","message":"No, it\u0027s not intended to be used only for emulator threads","commit_id":"cc6f13e032d25257e73a284693fe54323e6401a9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3be04ff75ee709b0e3d87e1a5bd4f20f15a4089","unresolved":false,"context_lines":[{"line_number":909,"context_line":""},{"line_number":910,"context_line":"    if len(instance_cell.cpuset) + cpus_overhead \u003e len(host_cell.cpuset):"},{"line_number":911,"context_line":"        LOG.debug(\u0027Not enough host cell CPUs to fit instance cell. Required: \u0027"},{"line_number":912,"context_line":"                  \u0027%(required)d + %(cpus_overhead)d as overhead, \u0027"},{"line_number":913,"context_line":"                  \u0027actual: %(actual)d\u0027,"},{"line_number":914,"context_line":"                  {\u0027required\u0027: len(instance_cell.cpuset),"},{"line_number":915,"context_line":"                   \u0027actual\u0027: len(host_cell.cpuset),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_e2103851","line":912,"range":{"start_line":912,"start_character":18,"end_line":912,"end_character":66},"updated":"2016-11-23 14:49:30.000000000","message":"same comment as previous patch regarding showing total followed by breakdown","commit_id":"cc6f13e032d25257e73a284693fe54323e6401a9"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"47f6e41fb9a09ef6d4afb6f03c828efa35badcf4","unresolved":false,"context_lines":[{"line_number":1414,"context_line":"                  {\u0027required\u0027: len(instance_topology),"},{"line_number":1415,"context_line":"                   \u0027actual\u0027: len(host_topology)})"},{"line_number":1416,"context_line":"        return"},{"line_number":1417,"context_line":"    else:"},{"line_number":1418,"context_line":"        emulator_threads_policy \u003d None"},{"line_number":1419,"context_line":"        if \u0027emulator_threads_policy\u0027 in instance_topology:"},{"line_number":1420,"context_line":"            emulator_threads_policy \u003d instance_topology.emulator_threads_policy"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a3905b3_e7aa1e85","line":1417,"range":{"start_line":1417,"start_character":4,"end_line":1417,"end_character":8},"updated":"2017-01-19 04:57:43.000000000","message":"All previous statements return in the end, maybe you don\u0027t need this else after all.","commit_id":"b5d4bb3c8a091215b9ac74182183dee6cd90fb93"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"47f6e41fb9a09ef6d4afb6f03c828efa35badcf4","unresolved":false,"context_lines":[{"line_number":1448,"context_line":"                cells.append(got_cell)"},{"line_number":1449,"context_line":"            if len(cells) \u003d\u003d len(host_cell_perm):"},{"line_number":1450,"context_line":"                if not pci_requests:"},{"line_number":1451,"context_line":"                    return objects.InstanceNUMATopology("},{"line_number":1452,"context_line":"                        cells\u003dcells,"},{"line_number":1453,"context_line":"                        emulator_threads_policy\u003demulator_threads_policy)"},{"line_number":1454,"context_line":"                elif ((pci_stats is not None) and"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a3905b3_e7821ec8","line":1451,"range":{"start_line":1451,"start_character":27,"end_line":1451,"end_character":55},"updated":"2017-01-19 04:57:43.000000000","message":"Not very important but I don\u0027t see why did you have to separate this into if..else and return exactly the same thing in both...\nCan\u0027t it be under the same general condition, as it was?","commit_id":"b5d4bb3c8a091215b9ac74182183dee6cd90fb93"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a9ae3d639c7c7029a589003630121143f44bb5d8","unresolved":false,"context_lines":[{"line_number":1448,"context_line":"                cells.append(got_cell)"},{"line_number":1449,"context_line":"            if len(cells) \u003d\u003d len(host_cell_perm):"},{"line_number":1450,"context_line":"                if not pci_requests:"},{"line_number":1451,"context_line":"                    return objects.InstanceNUMATopology("},{"line_number":1452,"context_line":"                        cells\u003dcells,"},{"line_number":1453,"context_line":"                        emulator_threads_policy\u003demulator_threads_policy)"},{"line_number":1454,"context_line":"                elif ((pci_stats is not None) and"}],"source_content_type":"text/x-python","patch_set":19,"id":"5a3905b3_bb9ca96a","line":1451,"in_reply_to":"5a3905b3_e7821ec8","updated":"2017-01-19 09:30:32.000000000","message":"Yes I think I made some mistakes to a rebase... let me try to rework that part","commit_id":"b5d4bb3c8a091215b9ac74182183dee6cd90fb93"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"23bd889f771d3ae534291a4dfbb37688254817e6","unresolved":false,"context_lines":[{"line_number":1487,"context_line":"                host_cell_perm, instance_topology.cells):"},{"line_number":1488,"context_line":"            try:"},{"line_number":1489,"context_line":"                cpuset_reserved \u003d 0"},{"line_number":1490,"context_line":"                if (instance_topology.emulator_threads_isolated"},{"line_number":1491,"context_line":"                    and len(cells) \u003d\u003d 0):"},{"line_number":1492,"context_line":"                    # For the case of isolate emulator threads, to"},{"line_number":1493,"context_line":"                    # make predictable where that CPU overhead is"},{"line_number":1494,"context_line":"                    # located we always configure it to be on host"}],"source_content_type":"text/x-python","patch_set":31,"id":"1a1ced50_87ca8119","line":1491,"range":{"start_line":1490,"start_character":0,"end_line":1491,"end_character":41},"updated":"2017-03-22 15:09:14.000000000","message":"I know now that it\u0027s necessary, but still: eew :)","commit_id":"3db3dbc1cf165b9f1504910612c9df21e73d061a"}]}
