)]}'
{"nova/notifications/objects/request_spec.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b8421d471c697a7a0df69a374d751fab35b8607","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        \u0027cpuset_reserved\u0027: fields.SetOfIntegersField(nullable\u003dTrue),"},{"line_number":167,"context_line":"        \u0027memory\u0027: fields.IntegerField(),"},{"line_number":168,"context_line":"        \u0027pagesize\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":169,"context_line":"        # TODO(stephenfin): Remove this field in version 2.0"},{"line_number":170,"context_line":"        \u0027cpu_topology\u0027: fields.ObjectField(\u0027VirtCPUTopologyPayload\u0027,"},{"line_number":171,"context_line":"                                           nullable\u003dTrue),"},{"line_number":172,"context_line":"        \u0027cpu_pinning_raw\u0027: fields.DictOfIntegersField(nullable\u003dTrue),"},{"line_number":173,"context_line":"        # TODO(stephenfin): Remove these fields in version 2.0, in favour of"},{"line_number":174,"context_line":"        # fields on the parent NUMATopology object"},{"line_number":175,"context_line":"        \u0027cpu_policy\u0027: fields.CPUAllocationPolicyField(nullable\u003dTrue),"},{"line_number":176,"context_line":"        \u0027cpu_thread_policy\u0027: fields.CPUThreadAllocationPolicyField("},{"line_number":177,"context_line":"            nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_f93abce3","line":174,"range":{"start_line":169,"start_character":6,"end_line":174,"end_character":50},"updated":"2020-10-06 17:50:53.000000000","message":"thanks :)","commit_id":"4381c0b804f22725cc2c062b7c01f2872e51440c"}],"nova/objects/instance_numa.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b8421d471c697a7a0df69a374d751fab35b8607","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        \u0027memory\u0027: obj_fields.IntegerField(),"},{"line_number":84,"context_line":"        \u0027pagesize\u0027: obj_fields.IntegerField(nullable\u003dTrue,"},{"line_number":85,"context_line":"                                            default\u003dNone),"},{"line_number":86,"context_line":"        \u0027min_threads\u0027: obj_fields.NonNegativeIntegerField(),"},{"line_number":87,"context_line":"        # TODO(stephenfin): Remove this field in version 2.0"},{"line_number":88,"context_line":"        \u0027cpu_topology\u0027: obj_fields.ObjectField(\u0027VirtCPUTopology\u0027,"},{"line_number":89,"context_line":"                                               nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_992bc093","line":86,"updated":"2020-10-06 17:50:53.000000000","message":"yep that is nicer","commit_id":"4381c0b804f22725cc2c062b7c01f2872e51440c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b8421d471c697a7a0df69a374d751fab35b8607","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        cpu_list \u003d sorted(list(self.total_cpus))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        threads \u003d 0"},{"line_number":114,"context_line":"        if \u0027min_threads\u0027 in self and self.min_threads:"},{"line_number":115,"context_line":"            # threads \u003d\u003d 1 is actually no threads"},{"line_number":116,"context_line":"            threads \u003d self.min_threads if self.min_threads !\u003d 1 else 0"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_acfe4401","line":114,"range":{"start_line":114,"start_character":8,"end_line":114,"end_character":54},"updated":"2020-10-06 17:50:53.000000000","message":"do you need a fallback here to check cpu_topology.threads\nfor upgrades?\n\nyou could add a threads property that does this\n\ne.g. \n\n@property\ndef threads(self):\nif \u0027min_threads\u0027 in self and self.min_threads\n    return  self.min_threads\nelif (\u0027cpu_topology\u0027 in self) and self.cpu_topology:\n            return self.cpu_topology.threads\nreturn 0","commit_id":"4381c0b804f22725cc2c062b7c01f2872e51440c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"348277b8373493fd4b36952ee237606577c2ee3f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        cpu_list \u003d sorted(list(self.total_cpus))"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        threads \u003d 0"},{"line_number":114,"context_line":"        if \u0027min_threads\u0027 in self and self.min_threads:"},{"line_number":115,"context_line":"            # threads \u003d\u003d 1 is actually no threads"},{"line_number":116,"context_line":"            threads \u003d self.min_threads if self.min_threads !\u003d 1 else 0"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_ae71fd47","line":114,"range":{"start_line":114,"start_character":8,"end_line":114,"end_character":54},"in_reply_to":"9f560f44_acfe4401","updated":"2020-10-08 10:43:09.000000000","message":"I initially has this but I removed it because, as noted in the commit message:\n\n  There should not be any upgrade impact since this information is only\n  used during scheduling and spawning, where it is generated from scratch\n  based on a host\u0027s own NUMA topology.\n\nThinking on this more now though, these are generated by a compute node so a Victoria compute node would generate the older style of object, and a Wallaby controller would expect the new style. So yes, I need to add this","commit_id":"4381c0b804f22725cc2c062b7c01f2872e51440c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b8421d471c697a7a0df69a374d751fab35b8607","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        threads \u003d 0"},{"line_number":114,"context_line":"        if \u0027min_threads\u0027 in self and self.min_threads:"},{"line_number":115,"context_line":"            # threads \u003d\u003d 1 is actually no threads"},{"line_number":116,"context_line":"            threads \u003d self.min_threads if self.min_threads !\u003d 1 else 0"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        return list(map(set, zip(*[iter(cpu_list)] * threads)))"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_8c19c07b","line":116,"range":{"start_line":116,"start_character":10,"end_line":116,"end_character":70},"updated":"2020-10-06 17:50:53.000000000","message":"then this is\n\nthreads \u003d self.threads if self.threads !\u003d 1 else 0","commit_id":"4381c0b804f22725cc2c062b7c01f2872e51440c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"45b4a2612f33e0409334e2354100ac8f532a328d","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":42,"context_line":"        super(InstanceNUMACell, self).obj_make_compatible(primitive,"},{"line_number":43,"context_line":"                                                          target_version)"},{"line_number":44,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":45,"context_line":"        # Instance with a \u0027mixed\u0027 CPU policy could not provide a backward"},{"line_number":46,"context_line":"        # compatibility."}],"source_content_type":"text/x-python","patch_set":6,"id":"7f6b1bfe_d7a3974e","side":"PARENT","line":43,"updated":"2020-10-15 15:29:24.000000000","message":"This is an unrelated change because we no longer have to care about py2 compat, right? Could we put this in a different commit please?","commit_id":"82528c83acec494926214e86c7bd56d63c388d81"}],"nova/virt/hardware.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e6adc8388b900e8deac885f9cc31eb4dc58ba5b2","unresolved":false,"context_lines":[{"line_number":985,"context_line":"        # NOTE(sfinucan): If siblings weren\u0027t available and we\u0027re using PREFER"},{"line_number":986,"context_line":"        # (implicitly or explicitly), fall back to linear assignment across"},{"line_number":987,"context_line":"        # cores"},{"line_number":988,"context_line":"        if (instance_cell.cpu_thread_policy !\u003d"},{"line_number":989,"context_line":"                fields.CPUThreadAllocationPolicy.REQUIRE and"},{"line_number":990,"context_line":"                not pinning):"},{"line_number":991,"context_line":"            threads_no \u003d 1"},{"line_number":992,"context_line":"            # we create a fake sibling set by splitting all sibling sets and"},{"line_number":993,"context_line":"            # treating each core as if it has no siblings. This is necessary"},{"line_number":994,"context_line":"            # because \u0027_get_pinning\u0027 will normally only take the same amount of"},{"line_number":995,"context_line":"            # cores (\u0027threads_no\u0027 cores) from each sibling set. This is rather"},{"line_number":996,"context_line":"            # desirable when we\u0027re seeking to apply a thread policy but it is"},{"line_number":997,"context_line":"            # less desirable when we only care about resource usage as we do"},{"line_number":998,"context_line":"            # here. By treating each core as independent, as we do here, we"},{"line_number":999,"context_line":"            # maximize resource usage for almost-full nodes at the expense of a"},{"line_number":1000,"context_line":"            # possible performance impact to the guest."},{"line_number":1001,"context_line":"            sibling_set \u003d [set([x]) for x in itertools.chain(*sibling_sets[1])]"},{"line_number":1002,"context_line":"            pinning \u003d _get_pinning("},{"line_number":1003,"context_line":"                threads_no, sibling_set,"},{"line_number":1004,"context_line":"                instance_cell.pcpuset)"},{"line_number":1005,"context_line":"            cpuset_reserved \u003d _get_reserved("},{"line_number":1006,"context_line":"                sibling_set, pinning, num_cpu_reserved\u003dnum_cpu_reserved)"},{"line_number":1007,"context_line":""},{"line_number":1008,"context_line":"        threads_no \u003d _threads(instance_cell, threads_no)"},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"    if not pinning or (num_cpu_reserved and not cpuset_reserved):"},{"line_number":1011,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f6b1bfe_d089dd26","line":1008,"range":{"start_line":988,"start_character":5,"end_line":1008,"end_character":56},"updated":"2020-10-15 15:52:08.000000000","message":"this is where threads_number comes form","commit_id":"cde69d380931b06c65f15e0d757f7333f230ee13"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bb67ff81d3df1c2e6e164e41e07b46e0a020dbb6","unresolved":false,"context_lines":[{"line_number":985,"context_line":"        # NOTE(sfinucan): If siblings weren\u0027t available and we\u0027re using PREFER"},{"line_number":986,"context_line":"        # (implicitly or explicitly), fall back to linear assignment across"},{"line_number":987,"context_line":"        # cores"},{"line_number":988,"context_line":"        if (instance_cell.cpu_thread_policy !\u003d"},{"line_number":989,"context_line":"                fields.CPUThreadAllocationPolicy.REQUIRE and"},{"line_number":990,"context_line":"                not pinning):"},{"line_number":991,"context_line":"            threads_no \u003d 1"},{"line_number":992,"context_line":"            # we create a fake sibling set by splitting all sibling sets and"},{"line_number":993,"context_line":"            # treating each core as if it has no siblings. This is necessary"},{"line_number":994,"context_line":"            # because \u0027_get_pinning\u0027 will normally only take the same amount of"},{"line_number":995,"context_line":"            # cores (\u0027threads_no\u0027 cores) from each sibling set. This is rather"},{"line_number":996,"context_line":"            # desirable when we\u0027re seeking to apply a thread policy but it is"},{"line_number":997,"context_line":"            # less desirable when we only care about resource usage as we do"},{"line_number":998,"context_line":"            # here. By treating each core as independent, as we do here, we"},{"line_number":999,"context_line":"            # maximize resource usage for almost-full nodes at the expense of a"},{"line_number":1000,"context_line":"            # possible performance impact to the guest."},{"line_number":1001,"context_line":"            sibling_set \u003d [set([x]) for x in itertools.chain(*sibling_sets[1])]"},{"line_number":1002,"context_line":"            pinning \u003d _get_pinning("},{"line_number":1003,"context_line":"                threads_no, sibling_set,"},{"line_number":1004,"context_line":"                instance_cell.pcpuset)"},{"line_number":1005,"context_line":"            cpuset_reserved \u003d _get_reserved("},{"line_number":1006,"context_line":"                sibling_set, pinning, num_cpu_reserved\u003dnum_cpu_reserved)"},{"line_number":1007,"context_line":""},{"line_number":1008,"context_line":"        threads_no \u003d _threads(instance_cell, threads_no)"},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"    if not pinning or (num_cpu_reserved and not cpuset_reserved):"},{"line_number":1011,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f6b1bfe_f0397941","line":1008,"range":{"start_line":988,"start_character":5,"end_line":1008,"end_character":56},"in_reply_to":"7f6b1bfe_d089dd26","updated":"2020-10-15 16:04:38.000000000","message":"I know *that* :) But then you go back one more step, and look at the definition of _threads on L771, and I don\u0027t actually understand what it\u0027s doing.","commit_id":"cde69d380931b06c65f15e0d757f7333f230ee13"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"45b4a2612f33e0409334e2354100ac8f532a328d","unresolved":false,"context_lines":[{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":"    instance_cell.id \u003d host_cell.id"},{"line_number":1016,"context_line":"    instance_cell.pin_vcpus(*pinning)"},{"line_number":1017,"context_line":"    instance_cell.min_threads \u003d threads_no"},{"line_number":1018,"context_line":"    instance_cell.cpuset_reserved \u003d cpuset_reserved"},{"line_number":1019,"context_line":"    return instance_cell"},{"line_number":1020,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7f6b1bfe_50402d36","line":1017,"updated":"2020-10-15 15:29:24.000000000","message":"So this is the heart of the change, and I\u0027m trying to work backwards to where threads_no is coming from, and not having much success. Mind doing a video call sometime next week to explain?","commit_id":"cde69d380931b06c65f15e0d757f7333f230ee13"}]}
