)]}'
{"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b3819988781f0730191668a9ce412b5bf433dd45","unresolved":false,"context_lines":[{"line_number":12290,"context_line":""},{"line_number":12291,"context_line":"        self.assertFalse(drvr._image_api.get.called)"},{"line_number":12292,"context_line":"        mock_ensure_tree.assert_called_once_with(\u0027/foo\u0027)"},{"line_number":12293,"context_line":""},{"line_number":12294,"context_line":""},{"line_number":12295,"context_line":"    def test_suspend(self):"},{"line_number":12296,"context_line":"        guest \u003d libvirt_guest.Guest(FakeVirtDomain(id\u003d1))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_5fba040a","line":12293,"updated":"2018-01-16 10:34:39.000000000","message":"shit, unrelated","commit_id":"505504679ec38f87121b0e951509e9ccc07b6b30"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"bf0441e4121a6c8bfadb0553c8e5b100116fa1f1","unresolved":false,"context_lines":[{"line_number":2568,"context_line":"        xml \u003d self._get_guest_xml(context, instance, network_info, disk_info,"},{"line_number":2569,"context_line":"                                  instance.image_meta,"},{"line_number":2570,"context_line":"                                  block_device_info\u003dblock_device_info,"},{"line_number":2571,"context_line":"                                  mdevs\u003dmdevs)"},{"line_number":2572,"context_line":""},{"line_number":2573,"context_line":"        # NOTE(mdbooth): context.auth_token will not be set when we call"},{"line_number":2574,"context_line":"        #                _hard_reboot from resume_state_on_host_boot()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_e9855ed0","line":2571,"updated":"2018-01-16 09:44:20.000000000","message":"yay, it works!","commit_id":"f28944dd54aedf942f4093ebbbe9df8010531b0e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"088dcdce6ad15c3aa0c68f1146b36d60c12b8848","unresolved":false,"context_lines":[{"line_number":2567,"context_line":"        # NOTE(sbauza): Since we undefine the guest XML when destroying, we"},{"line_number":2568,"context_line":"        # need to remember the existing mdevs for reusing them."},{"line_number":2569,"context_line":"        mdevs \u003d self._get_all_assigned_mediated_devices(instance)"},{"line_number":2570,"context_line":"        mdevs \u003d list(mdevs.keys())"},{"line_number":2571,"context_line":"        # NOTE(mdbooth): In addition to performing a hard reboot of the domain,"},{"line_number":2572,"context_line":"        # the hard reboot operation is relied upon by operators to be an"},{"line_number":2573,"context_line":"        # automated attempt to fix as many things as possible about a"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_6dbe8c00","line":2570,"updated":"2018-01-22 14:42:33.000000000","message":"again, just out of curiosity, why is list required here, will a dict_keys object not work where mdevs is used below?","commit_id":"b9f542d6eac428508f17f6634612b077cc85973f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"25c38e2c79a51e867434af08052bb013d12ac53f","unresolved":false,"context_lines":[{"line_number":2567,"context_line":"        # NOTE(sbauza): Since we undefine the guest XML when destroying, we"},{"line_number":2568,"context_line":"        # need to remember the existing mdevs for reusing them."},{"line_number":2569,"context_line":"        mdevs \u003d self._get_all_assigned_mediated_devices(instance)"},{"line_number":2570,"context_line":"        mdevs \u003d list(mdevs.keys())"},{"line_number":2571,"context_line":"        # NOTE(mdbooth): In addition to performing a hard reboot of the domain,"},{"line_number":2572,"context_line":"        # the hard reboot operation is relied upon by operators to be an"},{"line_number":2573,"context_line":"        # automated attempt to fix as many things as possible about a"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_fc380c3e","line":2570,"in_reply_to":"7f96bb07_6dbe8c00","updated":"2018-01-22 17:19:34.000000000","message":"it\u0027ll work, but just because we\u0027re fortunate enough that iterating a dict means iterating its keys so I prefer to make it clear that we only care of the keys.","commit_id":"b9f542d6eac428508f17f6634612b077cc85973f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"05325e69bbf33ba9e971b1a217f28480434b5e08","unresolved":false,"context_lines":[{"line_number":2757,"context_line":"    def resume(self, context, instance, network_info, block_device_info\u003dNone):"},{"line_number":2758,"context_line":"        \"\"\"resume the specified instance.\"\"\""},{"line_number":2759,"context_line":"        xml \u003d self._get_existing_domain_xml(instance, network_info,"},{"line_number":2760,"context_line":"                                            block_device_info)"},{"line_number":2761,"context_line":"        guest \u003d self._create_domain_and_network(context, xml, instance,"},{"line_number":2762,"context_line":"                           network_info, block_device_info\u003dblock_device_info,"},{"line_number":2763,"context_line":"                           vifs_already_plugged\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_93d3ebd5","line":2760,"updated":"2018-01-23 00:07:40.000000000","message":"We don\u0027t pass mdevs here and the limitation is documented in the relnote.","commit_id":"eb9bac2e8ce743f9352d65709f0c2da73b055b1e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fc030789da4fd8a9c7c9870d60fe518180770cf9","unresolved":false,"context_lines":[{"line_number":2757,"context_line":"    def resume(self, context, instance, network_info, block_device_info\u003dNone):"},{"line_number":2758,"context_line":"        \"\"\"resume the specified instance.\"\"\""},{"line_number":2759,"context_line":"        xml \u003d self._get_existing_domain_xml(instance, network_info,"},{"line_number":2760,"context_line":"                                            block_device_info)"},{"line_number":2761,"context_line":"        guest \u003d self._create_domain_and_network(context, xml, instance,"},{"line_number":2762,"context_line":"                           network_info, block_device_info\u003dblock_device_info,"},{"line_number":2763,"context_line":"                           vifs_already_plugged\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_39e98db6","line":2760,"in_reply_to":"7f96bb07_93d3ebd5","updated":"2018-01-23 09:30:18.000000000","message":"Right, but given suspend doesn\u0027t work yet, that\u0027s why I haven\u0027t provided a modification here.\n\nSee https://review.openstack.org/#/c/535693/2/nova/virt/libvirt/driver.py@5911","commit_id":"eb9bac2e8ce743f9352d65709f0c2da73b055b1e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"05325e69bbf33ba9e971b1a217f28480434b5e08","unresolved":false,"context_lines":[{"line_number":2835,"context_line":"                           injection_info\u003dinjection_info, suffix\u003d\u0027.rescue\u0027,"},{"line_number":2836,"context_line":"                           disk_images\u003drescue_images)"},{"line_number":2837,"context_line":"        xml \u003d self._get_guest_xml(context, instance, network_info, disk_info,"},{"line_number":2838,"context_line":"                                  image_meta, rescue\u003drescue_images)"},{"line_number":2839,"context_line":"        self._destroy(instance)"},{"line_number":2840,"context_line":"        self._create_domain(xml, post_xml_callback\u003dgen_confdrive)"},{"line_number":2841,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_d37bb3f1","line":2838,"updated":"2018-01-23 00:07:40.000000000","message":"Do we need to get and pass mdevs during rescue? And if not, is it something we need to documentation as a limitation in the relnote?","commit_id":"eb9bac2e8ce743f9352d65709f0c2da73b055b1e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fc030789da4fd8a9c7c9870d60fe518180770cf9","unresolved":false,"context_lines":[{"line_number":2835,"context_line":"                           injection_info\u003dinjection_info, suffix\u003d\u0027.rescue\u0027,"},{"line_number":2836,"context_line":"                           disk_images\u003drescue_images)"},{"line_number":2837,"context_line":"        xml \u003d self._get_guest_xml(context, instance, network_info, disk_info,"},{"line_number":2838,"context_line":"                                  image_meta, rescue\u003drescue_images)"},{"line_number":2839,"context_line":"        self._destroy(instance)"},{"line_number":2840,"context_line":"        self._create_domain(xml, post_xml_callback\u003dgen_confdrive)"},{"line_number":2841,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_1934d149","line":2838,"in_reply_to":"7f96bb07_d37bb3f1","updated":"2018-01-23 09:30:18.000000000","message":"No, because when rescuing the instance, it uses a separate image and I don\u0027t see why we would need to provide vGPUs then.\n\nThat said, when unrescuing the instance, it works because we persisted the XML previously before rescuing so we are reusing the existed mdevs.","commit_id":"eb9bac2e8ce743f9352d65709f0c2da73b055b1e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fc030789da4fd8a9c7c9870d60fe518180770cf9","unresolved":false,"context_lines":[{"line_number":2844,"context_line":"        \"\"\""},{"line_number":2845,"context_line":"        instance_dir \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":2846,"context_line":"        unrescue_xml_path \u003d os.path.join(instance_dir, \u0027unrescue.xml\u0027)"},{"line_number":2847,"context_line":"        xml \u003d libvirt_utils.load_file(unrescue_xml_path)"},{"line_number":2848,"context_line":"        guest \u003d self._host.get_guest(instance)"},{"line_number":2849,"context_line":""},{"line_number":2850,"context_line":"        # TODO(sahid): We are converting all calls from a"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_591339b9","line":2847,"updated":"2018-01-23 09:30:18.000000000","message":"see, we use the existing XML.","commit_id":"eb9bac2e8ce743f9352d65709f0c2da73b055b1e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"05325e69bbf33ba9e971b1a217f28480434b5e08","unresolved":false,"context_lines":[{"line_number":7953,"context_line":""},{"line_number":7954,"context_line":"        xml \u003d self._get_guest_xml(context, instance, network_info,"},{"line_number":7955,"context_line":"                                  block_disk_info, image_meta,"},{"line_number":7956,"context_line":"                                  block_device_info\u003dblock_device_info)"},{"line_number":7957,"context_line":"        # NOTE(mriedem): vifs_already_plugged\u003dTrue here, regardless of whether"},{"line_number":7958,"context_line":"        # or not we\u0027ve migrated to another host, because we unplug VIFs locally"},{"line_number":7959,"context_line":"        # and the status change in the port might go undetected by the neutron"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_336c5735","line":7956,"updated":"2018-01-23 00:07:40.000000000","message":"We don\u0027t pass mdevs here and the limitation is documented in the relnote.","commit_id":"eb9bac2e8ce743f9352d65709f0c2da73b055b1e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fc030789da4fd8a9c7c9870d60fe518180770cf9","unresolved":false,"context_lines":[{"line_number":7953,"context_line":""},{"line_number":7954,"context_line":"        xml \u003d self._get_guest_xml(context, instance, network_info,"},{"line_number":7955,"context_line":"                                  block_disk_info, image_meta,"},{"line_number":7956,"context_line":"                                  block_device_info\u003dblock_device_info)"},{"line_number":7957,"context_line":"        # NOTE(mriedem): vifs_already_plugged\u003dTrue here, regardless of whether"},{"line_number":7958,"context_line":"        # or not we\u0027ve migrated to another host, because we unplug VIFs locally"},{"line_number":7959,"context_line":"        # and the status change in the port might go undetected by the neutron"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_797b95f3","line":7956,"in_reply_to":"7f96bb07_336c5735","updated":"2018-01-23 09:30:18.000000000","message":"Right, but I think we should rather provide the allocations when migrating the instance, not the existing mdevs given the migration could be on a different host.","commit_id":"eb9bac2e8ce743f9352d65709f0c2da73b055b1e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"05325e69bbf33ba9e971b1a217f28480434b5e08","unresolved":false,"context_lines":[{"line_number":8028,"context_line":"                                            block_device_info)"},{"line_number":8029,"context_line":"        xml \u003d self._get_guest_xml(context, instance, network_info, disk_info,"},{"line_number":8030,"context_line":"                                  instance.image_meta,"},{"line_number":8031,"context_line":"                                  block_device_info\u003dblock_device_info)"},{"line_number":8032,"context_line":"        self._create_domain_and_network(context, xml, instance, network_info,"},{"line_number":8033,"context_line":"                                        block_device_info\u003dblock_device_info,"},{"line_number":8034,"context_line":"                                        power_on\u003dpower_on,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_935e8b74","line":8031,"updated":"2018-01-23 00:07:40.000000000","message":"We don\u0027t pass mdevs for resize and the limitation is documented in the relnote.","commit_id":"eb9bac2e8ce743f9352d65709f0c2da73b055b1e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fc030789da4fd8a9c7c9870d60fe518180770cf9","unresolved":false,"context_lines":[{"line_number":8028,"context_line":"                                            block_device_info)"},{"line_number":8029,"context_line":"        xml \u003d self._get_guest_xml(context, instance, network_info, disk_info,"},{"line_number":8030,"context_line":"                                  instance.image_meta,"},{"line_number":8031,"context_line":"                                  block_device_info\u003dblock_device_info)"},{"line_number":8032,"context_line":"        self._create_domain_and_network(context, xml, instance, network_info,"},{"line_number":8033,"context_line":"                                        block_device_info\u003dblock_device_info,"},{"line_number":8034,"context_line":"                                        power_on\u003dpower_on,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_d96bc91c","line":8031,"in_reply_to":"7f96bb07_935e8b74","updated":"2018-01-23 09:30:18.000000000","message":"As I said above for migration, if we revert, we should probably look at the allocations.","commit_id":"eb9bac2e8ce743f9352d65709f0c2da73b055b1e"}],"releasenotes/notes/add-support-for-vgpu-libvirt-91d2983e643f5ff1.yaml":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4df79182b7592ff43b2cba42646a02af8becc020","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    * Rescuing an instance having vGPUs will mean that the rescue image won\u0027t"},{"line_number":48,"context_line":"      use the existing vGPUs. When unrescuing, it will use again the existing"},{"line_number":49,"context_line":"      vGPUs that were allocated to the instance. That said, given Nova lookups"},{"line_number":50,"context_line":"      at all the allocated vGPUs when trying to find unallocated ones, there"},{"line_number":51,"context_line":"      could be a race condition if an instance is rescued at the moment a new"},{"line_number":52,"context_line":"      instance asking for vGPUs is created, because both instances could use"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7f96bb07_8472a348","line":49,"range":{"start_line":49,"start_character":71,"end_line":49,"end_character":78},"updated":"2018-01-23 17:54:20.000000000","message":"looks?","commit_id":"7ffe74cbab38d133f8140e3ecb5298bd7036713c"}]}
