)]}'
{"nova/virt/libvirt/device.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"791e424f8178dc8ff06069ddb3d5f244342aa2b1","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                        self._cleanup_pmem(pmem)"},{"line_number":120,"context_line":"                return"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def _cleanup_pmem(self, pmem):"},{"line_number":123,"context_line":"        try:"},{"line_number":124,"context_line":"            nova.privsep.libvirt.cleanup_pmem(pmem.dev)"},{"line_number":125,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_0f79e6fa","line":122,"range":{"start_line":122,"start_character":4,"end_line":122,"end_character":34},"updated":"2019-07-29 02:53:02.000000000","message":"We can add `purge` method to Device object. Then we implement the cleanup for the PMEMDevice object.\n\nAnd then we add a purge method to purge all the vpmem which need to be cleanup. Then we just call the `DeviceManager.purge()` in the virt driver.","commit_id":"f1839a4386f214463206544624b082e5e6b37f67"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6b8df4f49499763125926bdf603190238b595a3f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            nova.privsep.libvirt.cleanup_pmem(self.dev)"},{"line_number":53,"context_line":"        except Exception as e:"},{"line_number":54,"context_line":"            raise exception.PMEMCleanupFailed(dev\u003dself.dev,"},{"line_number":55,"context_line":"                                              error\u003de)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_7557a459","line":54,"range":{"start_line":54,"start_character":50,"end_line":54,"end_character":58},"updated":"2019-08-05 04:16:33.000000000","message":"can we log the namespace also? since the operator fill the namespace in the conf. But we log the device name at here.","commit_id":"5eace2f5d009af0666123a98b85125519f2ee82d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6b8df4f49499763125926bdf603190238b595a3f","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    {\u0027devs\u0027: devs})"},{"line_number":117,"context_line":"        raise exception.PMEMNamespaceConfigInvalid(reason\u003dreason)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _cleanup_pmems_for_incomplete_migrations(self):"},{"line_number":120,"context_line":"        context \u003d nova_context.get_admin_context()"},{"line_number":121,"context_line":"        migration_filters \u003d {\u0027host\u0027: CONF.host,"},{"line_number":122,"context_line":"                             \u0027status\u0027: \u0027error\u0027}"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_b580bcc0","line":119,"updated":"2019-08-05 04:16:33.000000000","message":"it would be good to add comment about which case you are trying to cleanup. I remember this is for live migraiton, not for the resize?","commit_id":"5eace2f5d009af0666123a98b85125519f2ee82d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6b8df4f49499763125926bdf603190238b595a3f","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":124,"context_line":"                        context, migration_filters)"},{"line_number":125,"context_line":"        for migration in migrations:"},{"line_number":126,"context_line":"            if migration.dest_host \u003d\u003d CONF.host:"},{"line_number":127,"context_line":"                for pmem in self._pmem_list:"},{"line_number":128,"context_line":"                    if not pmem.is_assigned:"},{"line_number":129,"context_line":"                        pmem.purge()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_756ec42f","line":126,"range":{"start_line":126,"start_character":12,"end_line":126,"end_character":47},"updated":"2019-08-05 04:16:33.000000000","message":"we only cleanup for the live-migration case, not for the resize, evacuate, and rebuild, right?","commit_id":"5eace2f5d009af0666123a98b85125519f2ee82d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6b8df4f49499763125926bdf603190238b595a3f","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                        context, migration_filters)"},{"line_number":125,"context_line":"        for migration in migrations:"},{"line_number":126,"context_line":"            if migration.dest_host \u003d\u003d CONF.host:"},{"line_number":127,"context_line":"                for pmem in self._pmem_list:"},{"line_number":128,"context_line":"                    if not pmem.is_assigned:"},{"line_number":129,"context_line":"                        pmem.purge()"},{"line_number":130,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_1567504f","line":127,"updated":"2019-08-05 04:16:33.000000000","message":"we\u0027d better to have a log to info the operator, we begin to cleanup instead of the nova-compute just hanging there, with no any hint.","commit_id":"5eace2f5d009af0666123a98b85125519f2ee82d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6b8df4f49499763125926bdf603190238b595a3f","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        for guest in self._driver._host.list_guests(only_running\u003dFalse):"},{"line_number":176,"context_line":"            cfg \u003d guest.get_config()"},{"line_number":177,"context_line":"            context \u003d nova_context.get_admin_context()"},{"line_number":178,"context_line":"            instance \u003d objects.Instance.get_by_uuid(context, guest.uuid)"},{"line_number":179,"context_line":"            try:"},{"line_number":180,"context_line":"                migration \u003d objects.Migration.get_by_instance_and_status("},{"line_number":181,"context_line":"                    context, guest.uuid, \u0027finished\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_953b4036","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":72},"updated":"2019-08-05 04:16:33.000000000","message":"we should catch the InstanceNotFound exception at here.\n\nOr we can use one DB call instead of mulitple DB calls like this https://review.opendev.org/#/c/670787/12/nova/virt/libvirt/device.py@73","commit_id":"5eace2f5d009af0666123a98b85125519f2ee82d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6b8df4f49499763125926bdf603190238b595a3f","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            cfg \u003d guest.get_config()"},{"line_number":177,"context_line":"            context \u003d nova_context.get_admin_context()"},{"line_number":178,"context_line":"            instance \u003d objects.Instance.get_by_uuid(context, guest.uuid)"},{"line_number":179,"context_line":"            try:"},{"line_number":180,"context_line":"                migration \u003d objects.Migration.get_by_instance_and_status("},{"line_number":181,"context_line":"                    context, guest.uuid, \u0027finished\u0027)"},{"line_number":182,"context_line":"            except Exception:"},{"line_number":183,"context_line":"                migration \u003d None"},{"line_number":184,"context_line":"            if migration:"},{"line_number":185,"context_line":"                if migration.dest_host \u003d\u003d CONF.host:"},{"line_number":186,"context_line":"                    flavor_id \u003d migration.new_instance_type_id"},{"line_number":187,"context_line":"                else:"},{"line_number":188,"context_line":"                    flavor_id \u003d migration.old_instance_type_id"},{"line_number":189,"context_line":"            else:"},{"line_number":190,"context_line":"                flavor_id \u003d instance.flavor.id"},{"line_number":191,"context_line":"            for device in cfg.devices:"},{"line_number":192,"context_line":"                if not isinstance(device, vconfig.LibvirtConfigGuestPMEM):"},{"line_number":193,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_754004a6","line":190,"range":{"start_line":179,"start_character":12,"end_line":190,"end_character":46},"updated":"2019-08-05 04:16:33.000000000","message":"Can we just check the instance\u0027s state equal to RESIZED?\n\nlike:\n\nflavor_id \u003d instance.flavor.id\n# Using the old flavor for the source node\nif instance.vm_state \u003d\u003d vm_states.RESIZED and instance.host !\u003d CONF.host:\n     flavor_id \u003d instance.old_flavor.id","commit_id":"5eace2f5d009af0666123a98b85125519f2ee82d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"88338f3b028b9bd3e0190a65e3556842d110597d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # fixed along with Bug #1778563."},{"line_number":115,"context_line":"        context \u003d nova.context.get_admin_context()"},{"line_number":116,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(context,"},{"line_number":117,"context_line":"            {\u0027uuid\u0027: list(assigned_mdevs.values())})"},{"line_number":118,"context_line":"        instance_flavor_id_mapping \u003d {"},{"line_number":119,"context_line":"            instance.uuid: instance.instance_type_id"},{"line_number":120,"context_line":"                for instance in instances}"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_91fe4969","line":117,"updated":"2019-08-14 14:23:02.000000000","message":"This code is also looking up all the instances, but more efficiently.","commit_id":"3ae51c86063b915293ac88210513622f94d4b59a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"88338f3b028b9bd3e0190a65e3556842d110597d","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        for guest in self._driver._host.list_guests(only_running\u003dFalse):"},{"line_number":194,"context_line":"            cfg \u003d guest.get_config()"},{"line_number":195,"context_line":"            context \u003d nova.context.get_admin_context()"},{"line_number":196,"context_line":"            instance \u003d objects.Instance.get_by_uuid(context, guest.uuid)"},{"line_number":197,"context_line":"            flavor_id \u003d instance.flavor.id"},{"line_number":198,"context_line":"            # Using the old flavor for the source node"},{"line_number":199,"context_line":"            if instance.vm_state \u003d\u003d vm_states.RESIZED and \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_71386d3a","line":196,"updated":"2019-08-14 14:23:02.000000000","message":"This is a very inefficient way to look up instances, one at a time. I think you need to do this once at the beginning (i.e. in __init__) and pass the list to this pmem code and the mdev code above. Ideally the driver would do this and pass it into the __init__ itself, but...\n\nThe refactor should be in a patch before this one that adds the pmem use case.","commit_id":"3ae51c86063b915293ac88210513622f94d4b59a"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b75880c5d29fddf705bc9dc6b6b9705b803f8369","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                               }"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"# Persistent Memory ( PMEM/NVDIMM ) Device Support"},{"line_number":265,"context_line":"MIN_LIBVIRT_PMEM_SUPPORT \u003d (5, 0, 0)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"# Mediated devices support"},{"line_number":268,"context_line":"MIN_LIBVIRT_MDEV_SUPPORT \u003d (3, 4, 0)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_6fd5fae4","line":265,"updated":"2019-07-29 02:48:51.000000000","message":"do we have qemu version requirement?","commit_id":"f1839a4386f214463206544624b082e5e6b37f67"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b75880c5d29fddf705bc9dc6b6b9705b803f8369","unresolved":false,"context_lines":[{"line_number":472,"context_line":"                    align\u003dns[\u0027daxregion\u0027][\u0027align\u0027])"},{"line_number":473,"context_line":"        return pmems_host"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    def _get_all_assigned_pmems(self):"},{"line_number":476,"context_line":"        assigned_pmems \u003d {}  # {dev: instance_uuid,...}"},{"line_number":477,"context_line":"        for guest in self._host.list_guests(only_running\u003dFalse):"},{"line_number":478,"context_line":"            cfg \u003d guest.get_config()"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_efe9eab6","line":475,"range":{"start_line":475,"start_character":4,"end_line":475,"end_character":38},"updated":"2019-07-29 02:48:51.000000000","message":"move this into device manager.","commit_id":"f1839a4386f214463206544624b082e5e6b37f67"}]}
