)]}'
{"nova/objects/request_spec.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"153aa5bd27aa0ac4db522e80a29256b0ba02775e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        for field in instance_fields:"},{"line_number":113,"context_line":"            if field \u003d\u003d \u0027uuid\u0027:"},{"line_number":114,"context_line":"                setattr(self, \u0027instance_uuid\u0027, getter(instance, field))"},{"line_number":115,"context_line":"                continue"},{"line_number":116,"context_line":"            if field \u003d\u003d \u0027pci_requests\u0027 and isinstance(getter(instance, field),"},{"line_number":117,"context_line":"                                                      dict):"},{"line_number":118,"context_line":"                pci_requests \u003d getter(instance, field)"}],"source_content_type":"text/x-python","patch_set":30,"id":"da20952f_8cbc61dd","line":115,"updated":"2015-08-29 09:10:23.000000000","message":"nit, looks like if we use \u0027elif\u0027, then we needn\u0027t continue","commit_id":"c03ed9c36b2371f9a05ecf6da895aced0dd3ddae"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5aa81be29581bf1b0a4f52b2ea3a21bacb36143c","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                if dict_cells:"},{"line_number":142,"context_line":"                    cells \u003d [objects.InstanceNUMACell("},{"line_number":143,"context_line":"                             id\u003dcell[\u0027id\u0027],"},{"line_number":144,"context_line":"                             cpuset\u003dset(cell[\u0027cpuset\u0027]),"},{"line_number":145,"context_line":"                             memory\u003dcell[\u0027memory\u0027],"},{"line_number":146,"context_line":"                             pagesize\u003dcell.get(\u0027pagesize\u0027),"},{"line_number":147,"context_line":"                             cpu_pinning\u003dcell.get(\u0027cpu_pinning_raw\u0027))"}],"source_content_type":"text/x-python","patch_set":33,"id":"da20952f_666d9b03","line":144,"updated":"2015-09-03 10:07:17.000000000","message":"oh, its this bit I guess.","commit_id":"cd251f5003cf6a4a515ce6081dbe6f554c50602a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"49db8dd4fbf6af63c5d0ea1c312ea0428e4abf99","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                             cpuset\u003dset(cell[\u0027cpuset\u0027]),"},{"line_number":145,"context_line":"                             memory\u003dcell[\u0027memory\u0027],"},{"line_number":146,"context_line":"                             pagesize\u003dcell.get(\u0027pagesize\u0027),"},{"line_number":147,"context_line":"                             cpu_pinning\u003dcell.get(\u0027cpu_pinning_raw\u0027))"},{"line_number":148,"context_line":"                             for cell in dict_cells]"},{"line_number":149,"context_line":"                    self.numa_topology \u003d objects.InstanceNUMATopology("},{"line_number":150,"context_line":"                        cells\u003dcells)"}],"source_content_type":"text/x-python","patch_set":33,"id":"da20952f_86b30fe9","line":147,"updated":"2015-09-03 09:57:01.000000000","message":"doesn\u0027t this duplicate the logic here:\nhttps://github.com/openstack/nova/blob/938a20f5e29ec73ea01089406a8624f6d4e9e093/nova/objects/instance_numa_topology.py#L74","commit_id":"cd251f5003cf6a4a515ce6081dbe6f554c50602a"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"08c2045ed62c8f9cd1e9ba5012a2328da2d7ad47","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                    self.pci_requests \u003d objects.InstancePCIRequests \\"},{"line_number":125,"context_line":"                        .from_request_spec_instance_props(pci_requests)"},{"line_number":126,"context_line":"                    continue"},{"line_number":127,"context_line":"            if field \u003d\u003d \u0027numa_topology\u0027 and isinstance(getter(instance, field),"},{"line_number":128,"context_line":"                                                       dict):"},{"line_number":129,"context_line":"                # NOTE (ndipanov): A horrible hack so that we can use"},{"line_number":130,"context_line":"                # this in the scheduler, since the"}],"source_content_type":"text/x-python","patch_set":35,"id":"7a2fa921_1f084127","line":127,"updated":"2015-10-09 11:41:09.000000000","message":"I have a feeling I complained about this before - you just copied the code out of a method in hardware.py - that\u0027s really bad - just call the method.","commit_id":"a4d2277ac77224be243e33c704309a8d11f7dde4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c935d017ef941342d9b63453f3eb33e53c873c58","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                if pci_requests:"},{"line_number":126,"context_line":"                    self.pci_requests \u003d objects.InstancePCIRequests \\"},{"line_number":127,"context_line":"                        .from_request_spec_instance_props(pci_requests)"},{"line_number":128,"context_line":"                    continue"},{"line_number":129,"context_line":"            if field \u003d\u003d \u0027numa_topology\u0027 and isinstance(getter(instance, field),"},{"line_number":130,"context_line":"                                                       dict):"},{"line_number":131,"context_line":"                numa_topology \u003d getter(instance, field)"}],"source_content_type":"text/x-python","patch_set":36,"id":"1a26ad4f_a18f4722","line":128,"updated":"2015-10-28 23:39:56.000000000","message":"This is getting really deeply nested and is a little hard to follow. Can we break out these exceptional things into some _from_instance_pci_requests() helper or something?","commit_id":"00e5959c7c9073fdcd06fdc932342362f5ba12a0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0249d665ddc5947423dcea4b7047248c5e1ba4f7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        for field in instance_fields:"},{"line_number":119,"context_line":"            if field \u003d\u003d \u0027uuid\u0027:"},{"line_number":120,"context_line":"                setattr(self, \u0027instance_uuid\u0027, getter(instance, field))"},{"line_number":121,"context_line":"                continue"},{"line_number":122,"context_line":"            if field \u003d\u003d \u0027pci_requests\u0027 and isinstance(getter(instance, field),"},{"line_number":123,"context_line":"                                                      dict):"},{"line_number":124,"context_line":"                self._from_instance_pci_requests(getter(instance, field))"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a26ad4f_426ad0b4","line":121,"updated":"2015-10-30 00:57:54.000000000","message":"instead of adding all the continue statements, can you just use elif statement blocks?","commit_id":"19dec06a7087d5a37ae1367f15017a68e0ef8e8a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0888517eef6f49161c840ca58aa24966da42b426","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            if field \u003d\u003d \u0027uuid\u0027:"},{"line_number":120,"context_line":"                setattr(self, \u0027instance_uuid\u0027, getter(instance, field))"},{"line_number":121,"context_line":"                continue"},{"line_number":122,"context_line":"            if field \u003d\u003d \u0027pci_requests\u0027 and isinstance(getter(instance, field),"},{"line_number":123,"context_line":"                                                      dict):"},{"line_number":124,"context_line":"                self._from_instance_pci_requests(getter(instance, field))"},{"line_number":125,"context_line":"                continue"},{"line_number":126,"context_line":"            if field \u003d\u003d \u0027numa_topology\u0027 and isinstance(getter(instance, field),"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a26ad4f_9fe11f01","line":123,"range":{"start_line":122,"start_character":43,"end_line":123,"end_character":60},"updated":"2015-10-30 00:29:43.000000000","message":"I would have moved this into the helper as well, but it\u0027s fine.","commit_id":"19dec06a7087d5a37ae1367f15017a68e0ef8e8a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4bd551fdfe12719d7265ea40b49fd2ad737c6db6","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            if field \u003d\u003d \u0027uuid\u0027:"},{"line_number":120,"context_line":"                setattr(self, \u0027instance_uuid\u0027, getter(instance, field))"},{"line_number":121,"context_line":"                continue"},{"line_number":122,"context_line":"            if field \u003d\u003d \u0027pci_requests\u0027 and isinstance(getter(instance, field),"},{"line_number":123,"context_line":"                                                      dict):"},{"line_number":124,"context_line":"                self._from_instance_pci_requests(getter(instance, field))"},{"line_number":125,"context_line":"                continue"},{"line_number":126,"context_line":"            if field \u003d\u003d \u0027numa_topology\u0027 and isinstance(getter(instance, field),"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a26ad4f_88800248","line":123,"range":{"start_line":122,"start_character":43,"end_line":123,"end_character":60},"in_reply_to":"1a26ad4f_9fe11f01","updated":"2015-10-30 05:26:48.000000000","message":"If you\u0027re going to respin for Jay\u0027s nits, could you move the isinstance check into the handler?\n\nJust something like this:\n\n if field \u003d\u003d \u0027pci_requests\u0027:\n    self._from_instance_pci_requests(..)\n\n def _from_instance_pci_requests(..):\n     if isinstance(getter(... )):\n       ...","commit_id":"19dec06a7087d5a37ae1367f15017a68e0ef8e8a"}],"nova/scheduler/filter_scheduler.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"153aa5bd27aa0ac4db522e80a29256b0ba02775e","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                # deserialize them"},{"line_number":177,"context_line":"                if isinstance(filter_properties[\u0027group_hosts\u0027], list):"},{"line_number":178,"context_line":"                    filter_properties[\u0027group_hosts\u0027] \u003d set("},{"line_number":179,"context_line":"                        filter_properties[\u0027group_hosts\u0027])"},{"line_number":180,"context_line":"                filter_properties[\u0027group_hosts\u0027].add(chosen_host.obj.host)"},{"line_number":181,"context_line":"        return selected_hosts"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da20952f_6c38ed3d","side":"PARENT","line":179,"updated":"2015-08-29 09:10:23.000000000","message":"Emm....I didn\u0027t get why we can remove this? group_hosts is still list that sent from conduct, why needn\u0027t turn it back to set?","commit_id":"ab3a75f9212b3cd8a2bb976c570a68698fd0238d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c30744fbd08910ee3c855abf45cb3223e2f59052","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                # deserialize them"},{"line_number":177,"context_line":"                if isinstance(filter_properties[\u0027group_hosts\u0027], list):"},{"line_number":178,"context_line":"                    filter_properties[\u0027group_hosts\u0027] \u003d set("},{"line_number":179,"context_line":"                        filter_properties[\u0027group_hosts\u0027])"},{"line_number":180,"context_line":"                filter_properties[\u0027group_hosts\u0027].add(chosen_host.obj.host)"},{"line_number":181,"context_line":"        return selected_hosts"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"da20952f_9000c567","side":"PARENT","line":179,"in_reply_to":"da20952f_6c38ed3d","updated":"2015-08-31 15:25:50.000000000","message":"because that was just an hack but now that we\u0027re passing an Object, we no longer need that hack","commit_id":"ab3a75f9212b3cd8a2bb976c570a68698fd0238d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"020ab3d431d93e2d3e393b34d174059328452bc1","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        # TODO(sbauza): Modify the interfaces for HostManager and filters to"},{"line_number":131,"context_line":"        # accept the RequestSpec object directly (in a later patch hopefully)"},{"line_number":132,"context_line":"        filter_properties \u003d spec_obj.to_legacy_filter_properties_dict()"},{"line_number":133,"context_line":"        # NOTE(sbauza): Adding temporarly some keys since filters are"},{"line_number":134,"context_line":"        # directly using it - until we provide directly RequestSpec"},{"line_number":135,"context_line":"        filter_properties.update("},{"line_number":136,"context_line":"            {\u0027request_spec\u0027: spec_obj.to_legacy_request_spec_dict(),"}],"source_content_type":"text/x-python","patch_set":30,"id":"da20952f_eb7e3018","line":133,"updated":"2015-08-28 21:17:42.000000000","message":"s/temporarly/temporarily/","commit_id":"c03ed9c36b2371f9a05ecf6da895aced0dd3ddae"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"816b8889698fe88fbe7e028938669cee19eafc3d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        # TODO(sbauza): Modify the interfaces for HostManager and filters to"},{"line_number":131,"context_line":"        # accept the RequestSpec object directly (in a later patch hopefully)"},{"line_number":132,"context_line":"        filter_properties \u003d spec_obj.to_legacy_filter_properties_dict()"},{"line_number":133,"context_line":"        # NOTE(sbauza): Adding temporarly some keys since filters are"},{"line_number":134,"context_line":"        # directly using it - until we provide directly RequestSpec"},{"line_number":135,"context_line":"        filter_properties.update("},{"line_number":136,"context_line":"            {\u0027request_spec\u0027: spec_obj.to_legacy_request_spec_dict(),"}],"source_content_type":"text/x-python","patch_set":32,"id":"da20952f_36c7ff46","line":133,"updated":"2015-09-02 14:47:59.000000000","message":"micro-nit: s/temporarly/temporarily","commit_id":"549a7041d2898a6769694f65e13ada957b2c41f2"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"816b8889698fe88fbe7e028938669cee19eafc3d","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            instance_properties \u003d spec_obj.to_legacy_request_spec_dict()["},{"line_number":174,"context_line":"                \u0027instance_properties\u0027]"},{"line_number":175,"context_line":"            chosen_host.obj.consume_from_instance(instance_properties)"},{"line_number":176,"context_line":"            if filter_properties.get(\u0027group_updated\u0027) is True:"},{"line_number":177,"context_line":"                filter_properties[\u0027group_hosts\u0027].add(chosen_host.obj.host)"},{"line_number":178,"context_line":"        return selected_hosts"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"da20952f_b608ef92","line":176,"updated":"2015-09-02 14:47:59.000000000","message":"nit: the \u0027is True\u0027 isn\u0027t needed.","commit_id":"549a7041d2898a6769694f65e13ada957b2c41f2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c935d017ef941342d9b63453f3eb33e53c873c58","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            # TODO(sbauza): Temporary backport until we modify HostManager to"},{"line_number":172,"context_line":"            # use RequestSpec object"},{"line_number":173,"context_line":"            instance_properties \u003d spec_obj.to_legacy_request_spec_dict()["},{"line_number":174,"context_line":"                \u0027instance_properties\u0027]"},{"line_number":175,"context_line":"            chosen_host.obj.consume_from_instance(instance_properties)"},{"line_number":176,"context_line":"            if filter_properties.get(\u0027group_updated\u0027) is True:"},{"line_number":177,"context_line":"                filter_properties[\u0027group_hosts\u0027].add(chosen_host.obj.host)"}],"source_content_type":"text/x-python","patch_set":36,"id":"1a26ad4f_61b04fde","line":174,"updated":"2015-10-28 23:39:56.000000000","message":"Can you break these two operations apart? Just for clarity. Also, I\u0027m not sure \"backport\" is the best thing to use here, since it normally means something else. Can you say something like \"Temporary use of old dict format ...\" ?","commit_id":"00e5959c7c9073fdcd06fdc932342362f5ba12a0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0888517eef6f49161c840ca58aa24966da42b426","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            # TODO(sbauza): Temporary use of the old legacy dict until we"},{"line_number":173,"context_line":"            # modify HostManager to use the RequestSpec object"},{"line_number":174,"context_line":"            instance_properties \u003d spec_obj.to_legacy_request_spec_dict()["},{"line_number":175,"context_line":"                \u0027instance_properties\u0027]"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"            chosen_host.obj.consume_from_instance(instance_properties)"},{"line_number":178,"context_line":"            if filter_properties.get(\u0027group_updated\u0027) is True:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a26ad4f_5fcb8772","line":175,"updated":"2015-10-30 00:29:43.000000000","message":"I didn\u0027t mean splitting the comment I meant this:\n\n spec \u003d spec_obj.to_legacy_request_spec_dict()\n instance_properties \u003d spec[\u0027instance_properties\u0027]","commit_id":"19dec06a7087d5a37ae1367f15017a68e0ef8e8a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0249d665ddc5947423dcea4b7047248c5e1ba4f7","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            # TODO(sbauza): Temporary use of the old legacy dict until we"},{"line_number":173,"context_line":"            # modify HostManager to use the RequestSpec object"},{"line_number":174,"context_line":"            instance_properties \u003d spec_obj.to_legacy_request_spec_dict()["},{"line_number":175,"context_line":"                \u0027instance_properties\u0027]"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"            chosen_host.obj.consume_from_instance(instance_properties)"},{"line_number":178,"context_line":"            if filter_properties.get(\u0027group_updated\u0027) is True:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a26ad4f_0257f8ce","line":175,"in_reply_to":"1a26ad4f_5fcb8772","updated":"2015-10-30 00:57:54.000000000","message":"++","commit_id":"19dec06a7087d5a37ae1367f15017a68e0ef8e8a"}],"nova/tests/unit/scheduler/test_filter_scheduler.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"816b8889698fe88fbe7e028938669cee19eafc3d","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.stubs.Set(weights.HostWeightHandler,"},{"line_number":269,"context_line":"            \u0027get_weighed_objects\u0027, _fake_weigh_objects)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        request_spec \u003d {\u0027instance_type\u0027: objects.Flavor(memory_mb\u003d52,"},{"line_number":272,"context_line":"                                                        root_gb\u003d52,"},{"line_number":273,"context_line":"                                                        ephemeral_gb\u003d0,"},{"line_number":274,"context_line":"                                                        vcpus\u003d1),"}],"source_content_type":"text/x-python","patch_set":32,"id":"da20952f_566cf307","line":271,"updated":"2015-09-02 14:47:59.000000000","message":"Don\u0027t know if this was intentional, but the values for memory_mb and root_gb changed from 512 to 52. Doesn\u0027t affect the test; just looks odd.","commit_id":"549a7041d2898a6769694f65e13ada957b2c41f2"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"ae9ba4d1a650af9c26a28bd5f3d59a04e8ac70ca","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.stubs.Set(weights.HostWeightHandler,"},{"line_number":269,"context_line":"            \u0027get_weighed_objects\u0027, _fake_weigh_objects)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        request_spec \u003d {\u0027instance_type\u0027: objects.Flavor(memory_mb\u003d52,"},{"line_number":272,"context_line":"                                                        root_gb\u003d52,"},{"line_number":273,"context_line":"                                                        ephemeral_gb\u003d0,"},{"line_number":274,"context_line":"                                                        vcpus\u003d1),"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a26ad4f_8fb58d32","line":271,"updated":"2015-10-29 06:08:27.000000000","message":"Harmless typo 512\u003d\u003e52?","commit_id":"19dec06a7087d5a37ae1367f15017a68e0ef8e8a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0249d665ddc5947423dcea4b7047248c5e1ba4f7","unresolved":false,"context_lines":[{"line_number":269,"context_line":"            \u0027get_weighed_objects\u0027, _fake_weigh_objects)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        request_spec \u003d {\u0027instance_type\u0027: objects.Flavor(memory_mb\u003d52,"},{"line_number":272,"context_line":"                                                        root_gb\u003d52,"},{"line_number":273,"context_line":"                                                        ephemeral_gb\u003d0,"},{"line_number":274,"context_line":"                                                        vcpus\u003d1),"},{"line_number":275,"context_line":"                        \u0027instance_properties\u0027: {\u0027project_id\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a26ad4f_c2d4a021","line":272,"updated":"2015-10-30 00:57:54.000000000","message":"and here.","commit_id":"19dec06a7087d5a37ae1367f15017a68e0ef8e8a"}]}
