)]}'
{"nova/tests/functional/libvirt/test_reshape.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"96a913add68e66fc81fccda6a5215e4f7112fea8","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # Determine which device is associated with which instance"},{"line_number":106,"context_line":"        # { inst.uuid: pgpu_name }"},{"line_number":107,"context_line":"        inst_to_pgpu \u003d {}"},{"line_number":108,"context_line":"        # TODO(efried): How do I get Instance from serverN?"},{"line_number":109,"context_line":"        for server in (server1, server2):"},{"line_number":110,"context_line":"            mock_inst \u003d mock.Mock()"},{"line_number":111,"context_line":"            mock_inst.configure_mock(uuid\u003dserver[\u0027id\u0027], name\u003dserver[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_a3472da3","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":59},"updated":"2019-02-27 22:19:39.000000000","message":"You get them out of the database:\n\nctxt \u003d nova_context.get_admin_context()\ninstance \u003d objects.Instance.get_by_uuid(ctxt, server[\u0027id\u0027])","commit_id":"84feb23cfd88ad15b8a2313aba6e2f569b3400bc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a1171491fef1dea7c3644958d2ed1dbac1331851","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # Determine which device is associated with which instance"},{"line_number":106,"context_line":"        # { inst.uuid: pgpu_name }"},{"line_number":107,"context_line":"        inst_to_pgpu \u003d {}"},{"line_number":108,"context_line":"        # TODO(efried): How do I get Instance from serverN?"},{"line_number":109,"context_line":"        for server in (server1, server2):"},{"line_number":110,"context_line":"            mock_inst \u003d mock.Mock()"},{"line_number":111,"context_line":"            mock_inst.configure_mock(uuid\u003dserver[\u0027id\u0027], name\u003dserver[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_f69bb113","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":59},"in_reply_to":"9fdfeff1_a3472da3","updated":"2019-02-27 23:10:02.000000000","message":"Thanks Matt, done.","commit_id":"84feb23cfd88ad15b8a2313aba6e2f569b3400bc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d558e9c66139d68147b540783f136fb641e4ca2f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        # NOTE(gibi): during instance_claim() there is a"},{"line_number":96,"context_line":"        # driver.update_provider_tree() call that would detect the old tree and"},{"line_number":97,"context_line":"        # would fail as this is not a good time to reshape. To avoid that we"},{"line_number":98,"context_line":"        # temporally mock update_provider_tree here."},{"line_number":99,"context_line":"        with mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver.\u0027"},{"line_number":100,"context_line":"                        \u0027update_provider_tree\u0027):"},{"line_number":101,"context_line":"            created_server1 \u003d self.api.post_server({\u0027server\u0027: server_req})"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_5e95e73e","line":98,"range":{"start_line":98,"start_character":10,"end_line":98,"end_character":20},"updated":"2019-02-28 11:24:35.000000000","message":"temporarily :)","commit_id":"2f21b1ba50e92311bc38426363ff09c495c81a05"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4c1e7f30949da4345f9dd27283d181218f56353f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        # NOTE(gibi): during instance_claim() there is a"},{"line_number":96,"context_line":"        # driver.update_provider_tree() call that would detect the old tree and"},{"line_number":97,"context_line":"        # would fail as this is not a good time to reshape. To avoid that we"},{"line_number":98,"context_line":"        # temporally mock update_provider_tree here."},{"line_number":99,"context_line":"        with mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver.\u0027"},{"line_number":100,"context_line":"                        \u0027update_provider_tree\u0027):"},{"line_number":101,"context_line":"            created_server1 \u003d self.api.post_server({\u0027server\u0027: server_req})"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_2068b0f3","line":98,"range":{"start_line":98,"start_character":10,"end_line":98,"end_character":20},"in_reply_to":"9fdfeff1_5e95e73e","updated":"2019-03-06 23:56:52.000000000","message":"done in https://review.openstack.org/641482","commit_id":"2f21b1ba50e92311bc38426363ff09c495c81a05"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8e46a2597f0a9f0c8d812cf9f0b5782230c01d77","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            mdevs \u003d self.compute.driver._get_all_assigned_mediated_devices("},{"line_number":113,"context_line":"                inst)"},{"line_number":114,"context_line":"            # Fail unless exactly one mdev"},{"line_number":115,"context_line":"            mdev_uuid, \u003d list(mdevs)"},{"line_number":116,"context_line":"            mdev_info \u003d self.compute.driver._get_mediated_device_information("},{"line_number":117,"context_line":"                \"mdev_\" + mdev_uuid.replace(\u0027-\u0027, \u0027_\u0027))"},{"line_number":118,"context_line":"            inst_to_pgpu[inst.uuid] \u003d mdev_info[\u0027parent\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_9c3bf637","line":115,"range":{"start_line":115,"start_character":21,"end_line":115,"end_character":22},"updated":"2019-03-05 16:29:17.000000000","message":"? I guess this is your way to fail if there is more than one key in mdevs? That\u0027s kind of gross IMO - why not just:\n\nself.assertEqual(1, len(mdevs))?","commit_id":"2f21b1ba50e92311bc38426363ff09c495c81a05"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4c1e7f30949da4345f9dd27283d181218f56353f","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            mdevs \u003d self.compute.driver._get_all_assigned_mediated_devices("},{"line_number":113,"context_line":"                inst)"},{"line_number":114,"context_line":"            # Fail unless exactly one mdev"},{"line_number":115,"context_line":"            mdev_uuid, \u003d list(mdevs)"},{"line_number":116,"context_line":"            mdev_info \u003d self.compute.driver._get_mediated_device_information("},{"line_number":117,"context_line":"                \"mdev_\" + mdev_uuid.replace(\u0027-\u0027, \u0027_\u0027))"},{"line_number":118,"context_line":"            inst_to_pgpu[inst.uuid] \u003d mdev_info[\u0027parent\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_77dc4474","line":115,"range":{"start_line":115,"start_character":21,"end_line":115,"end_character":22},"in_reply_to":"9fdfeff1_3c1c4a76","updated":"2019-03-06 23:56:52.000000000","message":"Done","commit_id":"2f21b1ba50e92311bc38426363ff09c495c81a05"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c895ef58c786bfe9acf16dbf43d658aa9ccd87e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            mdevs \u003d self.compute.driver._get_all_assigned_mediated_devices("},{"line_number":113,"context_line":"                inst)"},{"line_number":114,"context_line":"            # Fail unless exactly one mdev"},{"line_number":115,"context_line":"            mdev_uuid, \u003d list(mdevs)"},{"line_number":116,"context_line":"            mdev_info \u003d self.compute.driver._get_mediated_device_information("},{"line_number":117,"context_line":"                \"mdev_\" + mdev_uuid.replace(\u0027-\u0027, \u0027_\u0027))"},{"line_number":118,"context_line":"            inst_to_pgpu[inst.uuid] \u003d mdev_info[\u0027parent\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_3c1c4a76","line":115,"range":{"start_line":115,"start_character":21,"end_line":115,"end_character":22},"in_reply_to":"9fdfeff1_9c3bf637","updated":"2019-03-05 16:33:41.000000000","message":"Perl Eric strikes again.\n\nSure, I can blow this out into two or three lines of more explicit code.","commit_id":"2f21b1ba50e92311bc38426363ff09c495c81a05"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8e46a2597f0a9f0c8d812cf9f0b5782230c01d77","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            # Fail unless exactly one mdev"},{"line_number":115,"context_line":"            mdev_uuid, \u003d list(mdevs)"},{"line_number":116,"context_line":"            mdev_info \u003d self.compute.driver._get_mediated_device_information("},{"line_number":117,"context_line":"                \"mdev_\" + mdev_uuid.replace(\u0027-\u0027, \u0027_\u0027))"},{"line_number":118,"context_line":"            inst_to_pgpu[inst.uuid] \u003d mdev_info[\u0027parent\u0027]"},{"line_number":119,"context_line":"        # The VGPUs should have come from different pGPUs"},{"line_number":120,"context_line":"        self.assertNotEqual(*list(inst_to_pgpu.values()))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_fcd242d1","line":117,"range":{"start_line":117,"start_character":16,"end_line":117,"end_character":54},"updated":"2019-03-05 16:29:17.000000000","message":"Ew, would be nice if we did this in a helper method:\n\nhttps://review.openstack.org/#/c/599208/18/nova/virt/libvirt/driver.py@6835","commit_id":"2f21b1ba50e92311bc38426363ff09c495c81a05"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b3ff15c8f2592dedd503be75b212ad081bada89c","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            # Fail unless exactly one mdev"},{"line_number":115,"context_line":"            mdev_uuid, \u003d list(mdevs)"},{"line_number":116,"context_line":"            mdev_info \u003d self.compute.driver._get_mediated_device_information("},{"line_number":117,"context_line":"                \"mdev_\" + mdev_uuid.replace(\u0027-\u0027, \u0027_\u0027))"},{"line_number":118,"context_line":"            inst_to_pgpu[inst.uuid] \u003d mdev_info[\u0027parent\u0027]"},{"line_number":119,"context_line":"        # The VGPUs should have come from different pGPUs"},{"line_number":120,"context_line":"        self.assertNotEqual(*list(inst_to_pgpu.values()))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_5f8ee079","line":117,"range":{"start_line":117,"start_character":16,"end_line":117,"end_character":54},"in_reply_to":"9fdfeff1_3f019c05","updated":"2019-03-05 16:37:15.000000000","message":"I commented in a change earlier in the series but I think we should just have _get_mediated_device_information handle the conversion you\u0027re doing here so callers don\u0027t need to know about this detail. So don\u0027t worry about changing this, I\u0027ll just do it in a follow up.","commit_id":"2f21b1ba50e92311bc38426363ff09c495c81a05"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4c1e7f30949da4345f9dd27283d181218f56353f","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            # Fail unless exactly one mdev"},{"line_number":115,"context_line":"            mdev_uuid, \u003d list(mdevs)"},{"line_number":116,"context_line":"            mdev_info \u003d self.compute.driver._get_mediated_device_information("},{"line_number":117,"context_line":"                \"mdev_\" + mdev_uuid.replace(\u0027-\u0027, \u0027_\u0027))"},{"line_number":118,"context_line":"            inst_to_pgpu[inst.uuid] \u003d mdev_info[\u0027parent\u0027]"},{"line_number":119,"context_line":"        # The VGPUs should have come from different pGPUs"},{"line_number":120,"context_line":"        self.assertNotEqual(*list(inst_to_pgpu.values()))"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_c06c4c0a","line":117,"range":{"start_line":117,"start_character":16,"end_line":117,"end_character":54},"in_reply_to":"9fdfeff1_5f8ee079","updated":"2019-03-06 23:56:52.000000000","message":"done in https://review.openstack.org/641482","commit_id":"2f21b1ba50e92311bc38426363ff09c495c81a05"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9c895ef58c786bfe9acf16dbf43d658aa9ccd87e","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            # Fail unless exactly one mdev"},{"line_number":115,"context_line":"            mdev_uuid, \u003d list(mdevs)"},{"line_number":116,"context_line":"            mdev_info \u003d self.compute.driver._get_mediated_device_information("},{"line_number":117,"context_line":"                \"mdev_\" + mdev_uuid.replace(\u0027-\u0027, \u0027_\u0027))"},{"line_number":118,"context_line":"            inst_to_pgpu[inst.uuid] \u003d mdev_info[\u0027parent\u0027]"},{"line_number":119,"context_line":"        # The VGPUs should have come from different pGPUs"},{"line_number":120,"context_line":"        self.assertNotEqual(*list(inst_to_pgpu.values()))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_3f019c05","line":117,"range":{"start_line":117,"start_character":16,"end_line":117,"end_character":54},"in_reply_to":"9fdfeff1_fcd242d1","updated":"2019-03-05 16:33:41.000000000","message":"Yup. If we do, we\u0027re not testing the guts of that helper (unless we write a separate unit test for it). But that\u0027s probably okay.","commit_id":"2f21b1ba50e92311bc38426363ff09c495c81a05"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d558e9c66139d68147b540783f136fb641e4ca2f","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                {\u0027DISK_GB\u0027: 20, \u0027MEMORY_MB\u0027: 2048, \u0027VCPU\u0027: 2},"},{"line_number":187,"context_line":"                allocations[compute_rp_uuid][\u0027resources\u0027])"},{"line_number":188,"context_line":"            rp_uuids \u003d list(allocations.keys())"},{"line_number":189,"context_line":"            # We only have two RPs, the compute PR (the root) and the child"},{"line_number":190,"context_line":"            # pGPU RP"},{"line_number":191,"context_line":"            gpu_rp_uuid \u003d (rp_uuids[1] if rp_uuids[0] \u003d\u003d compute_rp_uuid"},{"line_number":192,"context_line":"                           else rp_uuids[0])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_3ec1034f","line":189,"range":{"start_line":189,"start_character":48,"end_line":189,"end_character":50},"updated":"2019-02-28 11:24:35.000000000","message":"RP","commit_id":"2f21b1ba50e92311bc38426363ff09c495c81a05"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d7004e9de8b683cdcf979356864f3bda5547efa9","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        # NOTE(gibi): during instance_claim() there is a"},{"line_number":96,"context_line":"        # driver.update_provider_tree() call that would detect the old tree and"},{"line_number":97,"context_line":"        # would fail as this is not a good time to reshape. To avoid that we"},{"line_number":98,"context_line":"        # temporally mock update_provider_tree here."},{"line_number":99,"context_line":"        with mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver.\u0027"},{"line_number":100,"context_line":"                        \u0027update_provider_tree\u0027):"},{"line_number":101,"context_line":"            created_server1 \u003d self.api.post_server({\u0027server\u0027: server_req})"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_9770d074","line":98,"range":{"start_line":98,"start_character":10,"end_line":98,"end_character":20},"updated":"2019-03-06 20:46:33.000000000","message":"temporarily","commit_id":"a5d174c29f160ff01063be2583a2afe22088be2d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d7004e9de8b683cdcf979356864f3bda5547efa9","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                {\u0027DISK_GB\u0027: 20, \u0027MEMORY_MB\u0027: 2048, \u0027VCPU\u0027: 2},"},{"line_number":187,"context_line":"                allocations[compute_rp_uuid][\u0027resources\u0027])"},{"line_number":188,"context_line":"            rp_uuids \u003d list(allocations.keys())"},{"line_number":189,"context_line":"            # We only have two RPs, the compute PR (the root) and the child"},{"line_number":190,"context_line":"            # pGPU RP"},{"line_number":191,"context_line":"            gpu_rp_uuid \u003d (rp_uuids[1] if rp_uuids[0] \u003d\u003d compute_rp_uuid"},{"line_number":192,"context_line":"                           else rp_uuids[0])"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_7773e481","line":189,"range":{"start_line":189,"start_character":48,"end_line":189,"end_character":50},"updated":"2019-03-06 20:46:33.000000000","message":"RP","commit_id":"a5d174c29f160ff01063be2583a2afe22088be2d"}]}
