)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"475395f7ac14d6167890c0856df7ea7a2db7bfc8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Clean up orphan instances virt driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Delete the VM while the nove-compute service down, the instance"},{"line_number":10,"context_line":"will become orphan and is not tracked by database anymore. Orphan"},{"line_number":11,"context_line":"instances could still query from libvirt by name, then deleted or"},{"line_number":12,"context_line":"power off by name."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This commit introduce libvirt driver support for adding new periodic"},{"line_number":15,"context_line":"clean task to clean orphan instances."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"7faddb67_27e385db","line":12,"range":{"start_line":9,"start_character":0,"end_line":12,"end_character":18},"updated":"2019-07-30 20:56:54.000000000","message":"This is old and needs to be updated to reflect the current proposed code.","commit_id":"720fa68594bd0387b6e055f60b2915c8eeb58a4a"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"1ffad3565f61f6b2a2faced8476a5fba378c7817","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Clean up orphan instances virt driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Delete the VM while the nove-compute service down, the instance"},{"line_number":10,"context_line":"will become orphan and is not tracked by database anymore. Orphan"},{"line_number":11,"context_line":"instances could still query from libvirt by name, then deleted or"},{"line_number":12,"context_line":"power off by name."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This commit introduce libvirt driver support for adding new periodic"},{"line_number":15,"context_line":"clean task to clean orphan instances."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"7faddb67_bd0adacd","line":12,"range":{"start_line":9,"start_character":0,"end_line":12,"end_character":18},"in_reply_to":"7faddb67_27e385db","updated":"2019-09-05 08:34:51.000000000","message":"Done","commit_id":"720fa68594bd0387b6e055f60b2915c8eeb58a4a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"569d88c9a0cde818711acb4a303c749683abdae6","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The VM is not tracked by database could still query from libvirt"},{"line_number":10,"context_line":"by UUID, then deleted or power off by UUID. This commit introduce"},{"line_number":11,"context_line":"libvirt driver for periodicly clean the orphan instances."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia7618e11e727e84818874bf5b6fae802ff030609"},{"line_number":14,"context_line":"Partial-Bug: #1820802"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"1f493fa4_493e3db8","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":57},"updated":"2020-04-29 09:28:58.000000000","message":"a virt driver API that can be used to determine if nova owns a given instance. It will be used in a later commit.","commit_id":"845bf47546348b9b88d1831b5bba2ab924beae93"}],"nova/tests/unit/virt/libvirt/fakelibvirt.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c3059c514153ce1c921a2a18e6858ac63c77cf4e","unresolved":false,"context_lines":[{"line_number":1297,"context_line":"                error_domain\u003dVIR_FROM_QEMU)"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"    def lookupByName(self, name):"},{"line_number":1300,"context_line":"        if name in self._vms:"},{"line_number":1301,"context_line":"            return self._vms[name]"},{"line_number":1302,"context_line":"        else:"},{"line_number":1303,"context_line":"            raise make_libvirtError("},{"line_number":1304,"context_line":"                libvirtError,"},{"line_number":1305,"context_line":"                \u0027Domain not found: no domain with matching name \"%s\"\u0027 % name,"},{"line_number":1306,"context_line":"                error_code\u003dVIR_ERR_NO_DOMAIN,"},{"line_number":1307,"context_line":"                error_domain\u003dVIR_FROM_QEMU)"},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":"    def listAllDomains(self, flags\u003dNone):"},{"line_number":1310,"context_line":"        vms \u003d []"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_3005e510","line":1307,"range":{"start_line":1300,"start_character":8,"end_line":1307,"end_character":43},"updated":"2019-06-26 18:01:24.000000000","message":"nit: this could just be \nvm \u003d self._vms.get(name)\nif not vm:\n raise make_libvirtError(\n                libvirtError,\n                \u0027Domain not found: no domain with matching name \"%s\"\u0027 % name,\n                error_code\u003dVIR_ERR_NO_DOMAIN,\n                error_domain\u003dVIR_FROM_QEMU)\nreturn vm\n\nto avoid doing the dictionary lookup twice\nbut it functionally the same","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":1297,"context_line":"                error_domain\u003dVIR_FROM_QEMU)"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"    def lookupByName(self, name):"},{"line_number":1300,"context_line":"        if name in self._vms:"},{"line_number":1301,"context_line":"            return self._vms[name]"},{"line_number":1302,"context_line":"        else:"},{"line_number":1303,"context_line":"            raise make_libvirtError("},{"line_number":1304,"context_line":"                libvirtError,"},{"line_number":1305,"context_line":"                \u0027Domain not found: no domain with matching name \"%s\"\u0027 % name,"},{"line_number":1306,"context_line":"                error_code\u003dVIR_ERR_NO_DOMAIN,"},{"line_number":1307,"context_line":"                error_domain\u003dVIR_FROM_QEMU)"},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":"    def listAllDomains(self, flags\u003dNone):"},{"line_number":1310,"context_line":"        vms \u003d []"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_b13649b4","line":1307,"range":{"start_line":1300,"start_character":8,"end_line":1307,"end_character":43},"in_reply_to":"9fb8cfa7_3005e510","updated":"2019-07-05 09:04:06.000000000","message":"Done\ndrop by_name stuff","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"}],"nova/virt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25d96eeacf1c8fc4276cf5de6b673f57894b5c78","unresolved":false,"context_lines":[{"line_number":1844,"context_line":"        return instance.get(\u0027host\u0027)"},{"line_number":1845,"context_line":""},{"line_number":1846,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":1847,"context_line":"        \"\"\"Destroy an instance if we only know \u0027name\u0027 and not the full"},{"line_number":1848,"context_line":"        instance (i.e., we lost instance object and it is not in Database)."},{"line_number":1849,"context_line":"        Using this routine is a last resort to reap instances, the preferred"},{"line_number":1850,"context_line":"        method is to use destroy(instance)."}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_0b18ebd0","line":1847,"range":{"start_line":1847,"start_character":47,"end_line":1847,"end_character":52},"updated":"2019-04-26 11:48:02.000000000","message":"What is this name? Does every virt driver assigns a name to an instance?","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25d96eeacf1c8fc4276cf5de6b673f57894b5c78","unresolved":false,"context_lines":[{"line_number":1844,"context_line":"        return instance.get(\u0027host\u0027)"},{"line_number":1845,"context_line":""},{"line_number":1846,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":1847,"context_line":"        \"\"\"Destroy an instance if we only know \u0027name\u0027 and not the full"},{"line_number":1848,"context_line":"        instance (i.e., we lost instance object and it is not in Database)."},{"line_number":1849,"context_line":"        Using this routine is a last resort to reap instances, the preferred"},{"line_number":1850,"context_line":"        method is to use destroy(instance)."}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_2b492fcf","line":1847,"updated":"2019-04-26 11:48:02.000000000","message":"the","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"a250655605bd0882b64802975597ccba773fcf10","unresolved":false,"context_lines":[{"line_number":1844,"context_line":"        return instance.get(\u0027host\u0027)"},{"line_number":1845,"context_line":""},{"line_number":1846,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":1847,"context_line":"        \"\"\"Destroy an instance if we only know \u0027name\u0027 and not the full"},{"line_number":1848,"context_line":"        instance (i.e., we lost instance object and it is not in Database)."},{"line_number":1849,"context_line":"        Using this routine is a last resort to reap instances, the preferred"},{"line_number":1850,"context_line":"        method is to use destroy(instance)."}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_9f34eb94","line":1847,"range":{"start_line":1847,"start_character":47,"end_line":1847,"end_character":52},"in_reply_to":"ffb9cba7_0b18ebd0","updated":"2019-04-30 05:53:47.000000000","message":"Only libvirt now.","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"a250655605bd0882b64802975597ccba773fcf10","unresolved":false,"context_lines":[{"line_number":1844,"context_line":"        return instance.get(\u0027host\u0027)"},{"line_number":1845,"context_line":""},{"line_number":1846,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":1847,"context_line":"        \"\"\"Destroy an instance if we only know \u0027name\u0027 and not the full"},{"line_number":1848,"context_line":"        instance (i.e., we lost instance object and it is not in Database)."},{"line_number":1849,"context_line":"        Using this routine is a last resort to reap instances, the preferred"},{"line_number":1850,"context_line":"        method is to use destroy(instance)."}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_1f20fb47","line":1847,"in_reply_to":"ffb9cba7_2b492fcf","updated":"2019-04-30 05:53:47.000000000","message":"Done","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25d96eeacf1c8fc4276cf5de6b673f57894b5c78","unresolved":false,"context_lines":[{"line_number":1856,"context_line":"    def power_off_by_name(self, instance_name):"},{"line_number":1857,"context_line":"        \"\"\"Power off a instance by name."},{"line_number":1858,"context_line":""},{"line_number":1859,"context_line":"        Power off a instance if we only know \u0027name\u0027 and not the full instance."},{"line_number":1860,"context_line":"        Calling this to power off instance only if the instance object is"},{"line_number":1861,"context_line":"        NOT in the DB: the instance had been logically deleted already."},{"line_number":1862,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_cb1173ae","line":1859,"updated":"2019-04-26 11:48:02.000000000","message":"ditto","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"a250655605bd0882b64802975597ccba773fcf10","unresolved":false,"context_lines":[{"line_number":1856,"context_line":"    def power_off_by_name(self, instance_name):"},{"line_number":1857,"context_line":"        \"\"\"Power off a instance by name."},{"line_number":1858,"context_line":""},{"line_number":1859,"context_line":"        Power off a instance if we only know \u0027name\u0027 and not the full instance."},{"line_number":1860,"context_line":"        Calling this to power off instance only if the instance object is"},{"line_number":1861,"context_line":"        NOT in the DB: the instance had been logically deleted already."},{"line_number":1862,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_df1583e6","line":1859,"in_reply_to":"ffb9cba7_cb1173ae","updated":"2019-04-30 05:53:47.000000000","message":"Done","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"079386a0f0850c3b8d805881c216b4cf36a1c3fe","unresolved":false,"context_lines":[{"line_number":1861,"context_line":""},{"line_number":1862,"context_line":"    def verify_nova_namespace(self, instance_name):"},{"line_number":1863,"context_line":"        \"\"\"Verify if a instance is created by Nova.\"\"\""},{"line_number":1864,"context_line":"        raise NotImplementedError()"},{"line_number":1865,"context_line":""},{"line_number":1866,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":1867,"context_line":"        \"\"\"Destroy an instance if we only know the \u0027name\u0027 and not the full"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_6449da5e","line":1864,"range":{"start_line":1864,"start_character":9,"end_line":1864,"end_character":35},"updated":"2019-06-19 10:57:51.000000000","message":"this should return True by defult so that driver all driver that dont override it will accept any instance\n\nwhen invoked here https://review.opendev.org/#/c/627765/25/nova/compute/manager.py@8829","commit_id":"ae8c1243e7cf2c6c4cfce0efa7239f0b47fa81fb"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":1861,"context_line":""},{"line_number":1862,"context_line":"    def verify_nova_namespace(self, instance_name):"},{"line_number":1863,"context_line":"        \"\"\"Verify if a instance is created by Nova.\"\"\""},{"line_number":1864,"context_line":"        raise NotImplementedError()"},{"line_number":1865,"context_line":""},{"line_number":1866,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":1867,"context_line":"        \"\"\"Destroy an instance if we only know the \u0027name\u0027 and not the full"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_9995fe89","line":1864,"range":{"start_line":1864,"start_character":9,"end_line":1864,"end_character":35},"in_reply_to":"9fb8cfa7_04a9fedd","updated":"2019-07-05 09:04:06.000000000","message":"Done\nFalse seems better.","commit_id":"ae8c1243e7cf2c6c4cfce0efa7239f0b47fa81fb"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":1861,"context_line":""},{"line_number":1862,"context_line":"    def verify_nova_namespace(self, instance_name):"},{"line_number":1863,"context_line":"        \"\"\"Verify if a instance is created by Nova.\"\"\""},{"line_number":1864,"context_line":"        raise NotImplementedError()"},{"line_number":1865,"context_line":""},{"line_number":1866,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":1867,"context_line":"        \"\"\"Destroy an instance if we only know the \u0027name\u0027 and not the full"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_79984abf","line":1864,"range":{"start_line":1864,"start_character":9,"end_line":1864,"end_character":35},"in_reply_to":"9fb8cfa7_6449da5e","updated":"2019-07-05 09:04:06.000000000","message":"Done","commit_id":"ae8c1243e7cf2c6c4cfce0efa7239f0b47fa81fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4637c3ebbce9afd81280fc0c77586134dbcde231","unresolved":false,"context_lines":[{"line_number":1861,"context_line":""},{"line_number":1862,"context_line":"    def verify_nova_namespace(self, instance_name):"},{"line_number":1863,"context_line":"        \"\"\"Verify if a instance is created by Nova.\"\"\""},{"line_number":1864,"context_line":"        raise NotImplementedError()"},{"line_number":1865,"context_line":""},{"line_number":1866,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":1867,"context_line":"        \"\"\"Destroy an instance if we only know the \u0027name\u0027 and not the full"}],"source_content_type":"text/x-python","patch_set":11,"id":"9fb8cfa7_04a9fedd","line":1864,"range":{"start_line":1864,"start_character":9,"end_line":1864,"end_character":35},"in_reply_to":"9fb8cfa7_6449da5e","updated":"2019-06-19 11:00:33.000000000","message":"you could have this return False also just dont raise an excetpion","commit_id":"ae8c1243e7cf2c6c4cfce0efa7239f0b47fa81fb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2919e273c93659d0b57b14ad4e84ee0e0d4dfe50","unresolved":false,"context_lines":[{"line_number":1861,"context_line":""},{"line_number":1862,"context_line":"    def verify_nova_namespace(self, instance):"},{"line_number":1863,"context_line":"        \"\"\"Verify if a instance is created by Nova.\"\"\""},{"line_number":1864,"context_line":"        return True"},{"line_number":1865,"context_line":""},{"line_number":1866,"context_line":""},{"line_number":1867,"context_line":"def load_compute_driver(virtapi, compute_driver\u003dNone):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7faddb67_2944feb6","line":1864,"range":{"start_line":1864,"start_character":15,"end_line":1864,"end_character":19},"updated":"2019-07-09 13:40:44.000000000","message":"why did you change this to true in the latest version?\n\nit should be False","commit_id":"a93c5dfddca7cb56bb8834da29833905cb40b456"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"494874b55ec5a44600b28e25d7a5dbeaa63abb96","unresolved":false,"context_lines":[{"line_number":1861,"context_line":""},{"line_number":1862,"context_line":"    def verify_nova_namespace(self, instance):"},{"line_number":1863,"context_line":"        \"\"\"Verify if a instance is created by Nova.\"\"\""},{"line_number":1864,"context_line":"        return True"},{"line_number":1865,"context_line":""},{"line_number":1866,"context_line":""},{"line_number":1867,"context_line":"def load_compute_driver(virtapi, compute_driver\u003dNone):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7faddb67_c64ae953","line":1864,"range":{"start_line":1864,"start_character":15,"end_line":1864,"end_character":19},"in_reply_to":"7faddb67_2944feb6","updated":"2019-07-16 06:39:43.000000000","message":"Done","commit_id":"a93c5dfddca7cb56bb8834da29833905cb40b456"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"d2f8ffd8e3f52e336fe25b957ae367f87edf0817","unresolved":false,"context_lines":[{"line_number":1896,"context_line":"        \"\"\""},{"line_number":1897,"context_line":"        return False"},{"line_number":1898,"context_line":""},{"line_number":1899,"context_line":"    def verify_nova_namespace(self, instance):"},{"line_number":1900,"context_line":"        \"\"\"Verify if a instance is created by Nova.\"\"\""},{"line_number":1901,"context_line":"        return False"},{"line_number":1902,"context_line":""},{"line_number":1903,"context_line":""},{"line_number":1904,"context_line":"def load_compute_driver(virtapi, compute_driver\u003dNone):"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f493fa4_a9c42141","line":1901,"range":{"start_line":1899,"start_character":0,"end_line":1901,"end_character":20},"updated":"2020-04-29 09:47:16.000000000","message":"Given the changes you\u0027re making on top of this surely we want to default to True to avoid cleaning up everything on virt drivers other than libvirt.","commit_id":"845bf47546348b9b88d1831b5bba2ab924beae93"}],"nova/virt/fake.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25d96eeacf1c8fc4276cf5de6b673f57894b5c78","unresolved":false,"context_lines":[{"line_number":673,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"        if len(insts):"},{"line_number":676,"context_line":"            insts[0].state \u003d power_state.SHUTDOWN"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":679,"context_line":"        insts \u003d [uuid for uuid in self.instances.keys()"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_eb8a3719","line":676,"updated":"2019-04-26 11:48:02.000000000","message":"We could raise if the instance is not found","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"a250655605bd0882b64802975597ccba773fcf10","unresolved":false,"context_lines":[{"line_number":673,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"        if len(insts):"},{"line_number":676,"context_line":"            insts[0].state \u003d power_state.SHUTDOWN"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":679,"context_line":"        insts \u003d [uuid for uuid in self.instances.keys()"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_3fb37f0c","line":676,"in_reply_to":"ffb9cba7_eb8a3719","updated":"2019-04-30 05:53:47.000000000","message":"Raise instance not find need uuid of the instance, which we don\u0027t have. Create a new Instance not found by name? i don\u0027t know.","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25d96eeacf1c8fc4276cf5de6b673f57894b5c78","unresolved":false,"context_lines":[{"line_number":681,"context_line":""},{"line_number":682,"context_line":"        if len(insts):"},{"line_number":683,"context_line":"            self.instances.pop(insts[0])"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"class FakeVirtAPI(virtapi.VirtAPI):"},{"line_number":687,"context_line":"    @contextlib.contextmanager"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_ab843f0d","line":684,"updated":"2019-04-26 11:48:02.000000000","message":"ditto","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c3059c514153ce1c921a2a18e6858ac63c77cf4e","unresolved":false,"context_lines":[{"line_number":673,"context_line":"        pass"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"    def power_off_by_name(self, instance_name, destroy\u003dFalse):"},{"line_number":676,"context_line":"        insts \u003d [self.instances[uuid] for uuid in self.instances.keys()"},{"line_number":677,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        if len(insts):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_30ef251e","line":676,"range":{"start_line":676,"start_character":64,"end_line":676,"end_character":71},"updated":"2019-06-26 18:01:24.000000000","message":".keys() is not need.\n\npython iterates over the keys of a dict by default.\nin python 2 this is actrully slower as the explcit call to keys() produces a tempory list \nhttps://docs.python.org/2.7/library/stdtypes.html#dict.keys\n\nin python 3 you actually get back a dictview object which is cheap to construction but since you dont need this anyway there is stil no point in directly calling keys() when self.instnaces will do the right thing.","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":673,"context_line":"        pass"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"    def power_off_by_name(self, instance_name, destroy\u003dFalse):"},{"line_number":676,"context_line":"        insts \u003d [self.instances[uuid] for uuid in self.instances.keys()"},{"line_number":677,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        if len(insts):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_b1e88916","line":676,"range":{"start_line":676,"start_character":64,"end_line":676,"end_character":71},"in_reply_to":"9fb8cfa7_30ef251e","updated":"2019-07-05 09:04:06.000000000","message":"Done\ndrop by_name stuff","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c3059c514153ce1c921a2a18e6858ac63c77cf4e","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        insts \u003d [self.instances[uuid] for uuid in self.instances.keys()"},{"line_number":677,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        if len(insts):"},{"line_number":680,"context_line":"            insts[0].state \u003d power_state.SHUTDOWN"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    def destroy_instance_by_name(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_10254109","line":679,"range":{"start_line":679,"start_character":11,"end_line":679,"end_character":14},"updated":"2019-06-26 18:01:24.000000000","message":"you do not need to call len here.\n\nif insts:\n\nis enough. if the list is empty it will be false","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        insts \u003d [self.instances[uuid] for uuid in self.instances.keys()"},{"line_number":677,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        if len(insts):"},{"line_number":680,"context_line":"            insts[0].state \u003d power_state.SHUTDOWN"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    def destroy_instance_by_name(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_d1ed0526","line":679,"range":{"start_line":679,"start_character":11,"end_line":679,"end_character":14},"in_reply_to":"9fb8cfa7_10254109","updated":"2019-07-05 09:04:06.000000000","message":"Done\ndrop by_name stuff","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c3059c514153ce1c921a2a18e6858ac63c77cf4e","unresolved":false,"context_lines":[{"line_number":679,"context_line":"        if len(insts):"},{"line_number":680,"context_line":"            insts[0].state \u003d power_state.SHUTDOWN"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":683,"context_line":"        insts \u003d [uuid for uuid in self.instances.keys()"},{"line_number":684,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":685,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_f07d0d1c","line":682,"range":{"start_line":682,"start_character":8,"end_line":682,"end_character":32},"updated":"2019-06-26 18:01:24.000000000","message":"this should jsut be\n\nif","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":679,"context_line":"        if len(insts):"},{"line_number":680,"context_line":"            insts[0].state \u003d power_state.SHUTDOWN"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":683,"context_line":"        insts \u003d [uuid for uuid in self.instances.keys()"},{"line_number":684,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":685,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_71f21109","line":682,"range":{"start_line":682,"start_character":8,"end_line":682,"end_character":32},"in_reply_to":"9fb8cfa7_f07d0d1c","updated":"2019-07-05 09:04:06.000000000","message":"Done\ndrop by_name stuff","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c3059c514153ce1c921a2a18e6858ac63c77cf4e","unresolved":false,"context_lines":[{"line_number":680,"context_line":"            insts[0].state \u003d power_state.SHUTDOWN"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":683,"context_line":"        insts \u003d [uuid for uuid in self.instances.keys()"},{"line_number":684,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        if len(insts):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_f0218d4e","line":683,"range":{"start_line":683,"start_character":48,"end_line":683,"end_character":55},"updated":"2019-06-26 18:01:24.000000000","message":"as above you dont need keys","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":680,"context_line":"            insts[0].state \u003d power_state.SHUTDOWN"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":683,"context_line":"        insts \u003d [uuid for uuid in self.instances.keys()"},{"line_number":684,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        if len(insts):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_91f78df6","line":683,"range":{"start_line":683,"start_character":48,"end_line":683,"end_character":55},"in_reply_to":"9fb8cfa7_f0218d4e","updated":"2019-07-05 09:04:06.000000000","message":"Done\ndrop by_name stuff","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c3059c514153ce1c921a2a18e6858ac63c77cf4e","unresolved":false,"context_lines":[{"line_number":683,"context_line":"        insts \u003d [uuid for uuid in self.instances.keys()"},{"line_number":684,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        if len(insts):"},{"line_number":687,"context_line":"            self.instances.pop(insts[0])"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def verify_nova_namespace(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_70791dfa","line":686,"range":{"start_line":686,"start_character":11,"end_line":686,"end_character":14},"updated":"2019-06-26 18:01:24.000000000","message":"same as above","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":683,"context_line":"        insts \u003d [uuid for uuid in self.instances.keys()"},{"line_number":684,"context_line":"                if self.instances[uuid].name \u003d\u003d instance_name]"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        if len(insts):"},{"line_number":687,"context_line":"            self.instances.pop(insts[0])"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    def verify_nova_namespace(self, instance_name):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_31dc9973","line":686,"range":{"start_line":686,"start_character":11,"end_line":686,"end_character":14},"in_reply_to":"9fb8cfa7_70791dfa","updated":"2019-07-05 09:04:06.000000000","message":"Done\ndrop by_name stuff","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25d96eeacf1c8fc4276cf5de6b673f57894b5c78","unresolved":false,"context_lines":[{"line_number":9567,"context_line":"        Calling this to destroy instance only if the instance object is"},{"line_number":9568,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9569,"context_line":""},{"line_number":9570,"context_line":"        This does not unplug VIFs, destroy block devices, or destroy disks."},{"line_number":9571,"context_line":"        \"\"\""},{"line_number":9572,"context_line":"        try:"},{"line_number":9573,"context_line":"            virt_dom \u003d self._host._get_domain_by_name(instance_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_2b784f28","line":9570,"range":{"start_line":9570,"start_character":8,"end_line":9570,"end_character":75},"updated":"2019-04-26 11:48:02.000000000","message":"Why not? I guess because we don\u0027t have the necessary info to do this.","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"a250655605bd0882b64802975597ccba773fcf10","unresolved":false,"context_lines":[{"line_number":9567,"context_line":"        Calling this to destroy instance only if the instance object is"},{"line_number":9568,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9569,"context_line":""},{"line_number":9570,"context_line":"        This does not unplug VIFs, destroy block devices, or destroy disks."},{"line_number":9571,"context_line":"        \"\"\""},{"line_number":9572,"context_line":"        try:"},{"line_number":9573,"context_line":"            virt_dom \u003d self._host._get_domain_by_name(instance_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_1fcebb81","line":9570,"range":{"start_line":9570,"start_character":8,"end_line":9570,"end_character":75},"in_reply_to":"ffb9cba7_2b784f28","updated":"2019-04-30 05:53:47.000000000","message":"Yeah, we can not do that.","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25d96eeacf1c8fc4276cf5de6b673f57894b5c78","unresolved":false,"context_lines":[{"line_number":9590,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9591,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9592,"context_line":"                               \u0027name\u0027: instance_name}))"},{"line_number":9593,"context_line":"                return"},{"line_number":9594,"context_line":""},{"line_number":9595,"context_line":"            try:"},{"line_number":9596,"context_line":"                # \"Undefines a domain from hypervisor, similar as"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_2badaf87","line":9593,"range":{"start_line":9593,"start_character":16,"end_line":9593,"end_character":22},"updated":"2019-04-26 11:48:02.000000000","message":"Why we need this here? Either we raise InstancePowerOffFailure or save_and_reraise_exception() will raise the libvirtError.","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"a250655605bd0882b64802975597ccba773fcf10","unresolved":false,"context_lines":[{"line_number":9590,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9591,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9592,"context_line":"                               \u0027name\u0027: instance_name}))"},{"line_number":9593,"context_line":"                return"},{"line_number":9594,"context_line":""},{"line_number":9595,"context_line":"            try:"},{"line_number":9596,"context_line":"                # \"Undefines a domain from hypervisor, similar as"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_5f867315","line":9593,"range":{"start_line":9593,"start_character":16,"end_line":9593,"end_character":22},"in_reply_to":"ffb9cba7_2badaf87","updated":"2019-04-30 05:53:47.000000000","message":"Done.\nGood catch, it does always go out of here.","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25d96eeacf1c8fc4276cf5de6b673f57894b5c78","unresolved":false,"context_lines":[{"line_number":9593,"context_line":"                return"},{"line_number":9594,"context_line":""},{"line_number":9595,"context_line":"            try:"},{"line_number":9596,"context_line":"                # \"Undefines a domain from hypervisor, similar as"},{"line_number":9597,"context_line":"                #  delete_configuration"},{"line_number":9598,"context_line":"                virt_dom.undefineFlags("},{"line_number":9599,"context_line":"                    libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE)"},{"line_number":9600,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9601,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9602,"context_line":"                    errcode \u003d e.get_error_code()"},{"line_number":9603,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_8bccdb61","line":9600,"range":{"start_line":9596,"start_character":1,"end_line":9600,"end_character":2},"updated":"2019-04-26 11:48:02.000000000","message":"Do we need VIR_DOMAIN_UNDEFINE_NVRAM as well for uefi guest like in delete_configuration?","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"a250655605bd0882b64802975597ccba773fcf10","unresolved":false,"context_lines":[{"line_number":9593,"context_line":"                return"},{"line_number":9594,"context_line":""},{"line_number":9595,"context_line":"            try:"},{"line_number":9596,"context_line":"                # \"Undefines a domain from hypervisor, similar as"},{"line_number":9597,"context_line":"                #  delete_configuration"},{"line_number":9598,"context_line":"                virt_dom.undefineFlags("},{"line_number":9599,"context_line":"                    libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE)"},{"line_number":9600,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9601,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9602,"context_line":"                    errcode \u003d e.get_error_code()"},{"line_number":9603,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_9f906b4c","line":9600,"range":{"start_line":9596,"start_character":1,"end_line":9600,"end_character":2},"in_reply_to":"ffb9cba7_8bccdb61","updated":"2019-04-30 05:53:47.000000000","message":"Done","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25d96eeacf1c8fc4276cf5de6b673f57894b5c78","unresolved":false,"context_lines":[{"line_number":9618,"context_line":""},{"line_number":9619,"context_line":"        \"\"\""},{"line_number":9620,"context_line":"        try:"},{"line_number":9621,"context_line":"            virt_dom \u003d self._host._get_domain_by_name(instance_name)"},{"line_number":9622,"context_line":"            try:"},{"line_number":9623,"context_line":"                (state, _max_mem, _mem, _cpus, _t) \u003d virt_dom.info()"},{"line_number":9624,"context_line":"                state \u003d libvirt_guest.LIBVIRT_POWER_STATE[state]"},{"line_number":9625,"context_line":"                if state not in [power_state.SHUTDOWN, power_state.CRASHED]:"},{"line_number":9626,"context_line":"                    virt_dom.shutdown()"},{"line_number":9627,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9628,"context_line":"                errcode \u003d e.get_error_code()"},{"line_number":9629,"context_line":"                if errcode \u003d\u003d libvirt.VIR_ERR_OPERATION_TIMEOUT:"},{"line_number":9630,"context_line":"                    LOG.warning(\"Cannot Poweroff instance, \""},{"line_number":9631,"context_line":"                                \"operation time out, %s\","},{"line_number":9632,"context_line":"                                instance_name)"},{"line_number":9633,"context_line":"                    reason \u003d _(\"operation time out\")"},{"line_number":9634,"context_line":"                    raise exception.InstancePowerOffFailure(reason\u003dreason)"},{"line_number":9635,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9636,"context_line":"                    LOG.error(\u0027Error from libvirt during poweroff. \u0027"},{"line_number":9637,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9638,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9639,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9640,"context_line":"                               \u0027name\u0027: instance_name}))"},{"line_number":9641,"context_line":""},{"line_number":9642,"context_line":"        except exception.InstanceNotFound:"},{"line_number":9643,"context_line":"            # Instance is already gone"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_8bf5bb85","line":9640,"range":{"start_line":9621,"start_character":1,"end_line":9640,"end_character":55},"updated":"2019-04-26 11:48:02.000000000","message":"This seems to be a repetition from destroy_instance_by_name(). Could you pull out the common parts of the two function?","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"a250655605bd0882b64802975597ccba773fcf10","unresolved":false,"context_lines":[{"line_number":9618,"context_line":""},{"line_number":9619,"context_line":"        \"\"\""},{"line_number":9620,"context_line":"        try:"},{"line_number":9621,"context_line":"            virt_dom \u003d self._host._get_domain_by_name(instance_name)"},{"line_number":9622,"context_line":"            try:"},{"line_number":9623,"context_line":"                (state, _max_mem, _mem, _cpus, _t) \u003d virt_dom.info()"},{"line_number":9624,"context_line":"                state \u003d libvirt_guest.LIBVIRT_POWER_STATE[state]"},{"line_number":9625,"context_line":"                if state not in [power_state.SHUTDOWN, power_state.CRASHED]:"},{"line_number":9626,"context_line":"                    virt_dom.shutdown()"},{"line_number":9627,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9628,"context_line":"                errcode \u003d e.get_error_code()"},{"line_number":9629,"context_line":"                if errcode \u003d\u003d libvirt.VIR_ERR_OPERATION_TIMEOUT:"},{"line_number":9630,"context_line":"                    LOG.warning(\"Cannot Poweroff instance, \""},{"line_number":9631,"context_line":"                                \"operation time out, %s\","},{"line_number":9632,"context_line":"                                instance_name)"},{"line_number":9633,"context_line":"                    reason \u003d _(\"operation time out\")"},{"line_number":9634,"context_line":"                    raise exception.InstancePowerOffFailure(reason\u003dreason)"},{"line_number":9635,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9636,"context_line":"                    LOG.error(\u0027Error from libvirt during poweroff. \u0027"},{"line_number":9637,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9638,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9639,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9640,"context_line":"                               \u0027name\u0027: instance_name}))"},{"line_number":9641,"context_line":""},{"line_number":9642,"context_line":"        except exception.InstanceNotFound:"},{"line_number":9643,"context_line":"            # Instance is already gone"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_bfc20f33","line":9640,"range":{"start_line":9621,"start_character":1,"end_line":9640,"end_character":55},"in_reply_to":"ffb9cba7_8bf5bb85","updated":"2019-04-30 05:53:47.000000000","message":"It\u0027s quite the same, but common part seems a wrapper style, do we want that? I\u0027m not sure yet. I gonna address this if we do think wrapper is better.","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c3059c514153ce1c921a2a18e6858ac63c77cf4e","unresolved":false,"context_lines":[{"line_number":9693,"context_line":"                    return None"},{"line_number":9694,"context_line":""},{"line_number":9695,"context_line":"    def verify_nova_namespace(self, instance_name):"},{"line_number":9696,"context_line":"        \"\"\"If the instance metadata has nova namespace tag \u0027flavor\u0027,"},{"line_number":9697,"context_line":"        It is a instance created by Nova."},{"line_number":9698,"context_line":"        \"\"\""},{"line_number":9699,"context_line":"        try:"},{"line_number":9700,"context_line":"            virt_dom \u003d self._host._get_domain_by_name(instance_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_50d2d9d2","line":9697,"range":{"start_line":9696,"start_character":11,"end_line":9697,"end_character":41},"updated":"2019-06-26 18:01:24.000000000","message":"technically if it has any tags with the nova namespaces\nit was created by nova but checking for the flavor should be fine.","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c3059c514153ce1c921a2a18e6858ac63c77cf4e","unresolved":false,"context_lines":[{"line_number":9705,"context_line":"            return False"},{"line_number":9706,"context_line":""},{"line_number":9707,"context_line":"        # check if flavor in the nova namespace"},{"line_number":9708,"context_line":"        nova_ns \u003d tree.findall(\u0027./metadata/*/{%s}flavor\u0027 % vconfig.NOVA_NS)"},{"line_number":9709,"context_line":"        if len(nova_ns) \u003d\u003d 0:"},{"line_number":9710,"context_line":"            return False"},{"line_number":9711,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_b08eb5ce","line":9708,"range":{"start_line":9708,"start_character":32,"end_line":9708,"end_character":56},"updated":"2019-06-26 18:01:24.000000000","message":"nit you could just match on any ellement in the nova namespces\n\nbut for the flavor will always be set on nova instances.","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c3059c514153ce1c921a2a18e6858ac63c77cf4e","unresolved":false,"context_lines":[{"line_number":9706,"context_line":""},{"line_number":9707,"context_line":"        # check if flavor in the nova namespace"},{"line_number":9708,"context_line":"        nova_ns \u003d tree.findall(\u0027./metadata/*/{%s}flavor\u0027 % vconfig.NOVA_NS)"},{"line_number":9709,"context_line":"        if len(nova_ns) \u003d\u003d 0:"},{"line_number":9710,"context_line":"            return False"},{"line_number":9711,"context_line":""},{"line_number":9712,"context_line":"        return True"},{"line_number":9713,"context_line":""},{"line_number":9714,"context_line":"    def power_off_by_name(self, instance_name, destroy\u003dFalse):"},{"line_number":9715,"context_line":"        \"\"\"Power off a domain by name."}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_309ba517","line":9712,"range":{"start_line":9709,"start_character":7,"end_line":9712,"end_character":19},"updated":"2019-06-26 18:01:24.000000000","message":"this could be\n\nif not nova_ns:\n   return false\nreturn true\n\nor just\n\nreturn bool(nova_ns)","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":9706,"context_line":""},{"line_number":9707,"context_line":"        # check if flavor in the nova namespace"},{"line_number":9708,"context_line":"        nova_ns \u003d tree.findall(\u0027./metadata/*/{%s}flavor\u0027 % vconfig.NOVA_NS)"},{"line_number":9709,"context_line":"        if len(nova_ns) \u003d\u003d 0:"},{"line_number":9710,"context_line":"            return False"},{"line_number":9711,"context_line":""},{"line_number":9712,"context_line":"        return True"},{"line_number":9713,"context_line":""},{"line_number":9714,"context_line":"    def power_off_by_name(self, instance_name, destroy\u003dFalse):"},{"line_number":9715,"context_line":"        \"\"\"Power off a domain by name."}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_3e2468c6","line":9712,"range":{"start_line":9709,"start_character":7,"end_line":9712,"end_character":19},"in_reply_to":"9fb8cfa7_309ba517","updated":"2019-07-05 09:04:06.000000000","message":"Done","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"50e0056759ad6a705569cd9ed07f8cb6dcb9eb0c","unresolved":false,"context_lines":[{"line_number":9711,"context_line":""},{"line_number":9712,"context_line":"        return True"},{"line_number":9713,"context_line":""},{"line_number":9714,"context_line":"    def power_off_by_name(self, instance_name, destroy\u003dFalse):"},{"line_number":9715,"context_line":"        \"\"\"Power off a domain by name."},{"line_number":9716,"context_line":""},{"line_number":9717,"context_line":"        Power off a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9718,"context_line":"        Calling this to destory instance only if the instance object is"},{"line_number":9719,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9720,"context_line":""},{"line_number":9721,"context_line":"        \"\"\""},{"line_number":9722,"context_line":"        try:"},{"line_number":9723,"context_line":"            virt_dom \u003d self._host._get_domain_by_name(instance_name)"},{"line_number":9724,"context_line":"            try:"},{"line_number":9725,"context_line":"                (state, _max_mem, _mem, _cpus, _t) \u003d virt_dom.info()"},{"line_number":9726,"context_line":"                state \u003d libvirt_guest.LIBVIRT_POWER_STATE[state]"},{"line_number":9727,"context_line":"                if state not in [power_state.SHUTDOWN, power_state.CRASHED]:"},{"line_number":9728,"context_line":"                    if destroy:"},{"line_number":9729,"context_line":"                        virt_dom.destroy()"},{"line_number":9730,"context_line":"                    else:"},{"line_number":9731,"context_line":"                        virt_dom.shutdown()"},{"line_number":9732,"context_line":""},{"line_number":9733,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9734,"context_line":"                errcode \u003d e.get_error_code()"},{"line_number":9735,"context_line":"                if errcode \u003d\u003d libvirt.VIR_ERR_OPERATION_TIMEOUT:"},{"line_number":9736,"context_line":"                    LOG.warning(\"Cannot destroy/power off instance, \""},{"line_number":9737,"context_line":"                                \"operation time out, %s\","},{"line_number":9738,"context_line":"                                instance_name)"},{"line_number":9739,"context_line":"                    reason \u003d _(\"operation time out\")"},{"line_number":9740,"context_line":"                    raise exception.InstancePowerOffFailure(reason\u003dreason)"},{"line_number":9741,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9742,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy/power off. \u0027"},{"line_number":9743,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9744,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9745,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9746,"context_line":"                               \u0027name\u0027: instance_name}))"},{"line_number":9747,"context_line":""},{"line_number":9748,"context_line":"            return virt_dom"},{"line_number":9749,"context_line":""},{"line_number":9750,"context_line":"        except exception.InstanceNotFound:"},{"line_number":9751,"context_line":"            # Instance is already gone"},{"line_number":9752,"context_line":"            return None"},{"line_number":9753,"context_line":""},{"line_number":9754,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":9755,"context_line":"        \"\"\"Destroy a domain by name."},{"line_number":9756,"context_line":""},{"line_number":9757,"context_line":"        Destroy a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9758,"context_line":"        Calling this to destroy instance only if the instance object is"},{"line_number":9759,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9760,"context_line":""},{"line_number":9761,"context_line":"        This does not unplug VIFs, destroy block devices, or destroy disks due"},{"line_number":9762,"context_line":"        to lack of information."},{"line_number":9763,"context_line":"        \"\"\""},{"line_number":9764,"context_line":"        virt_dom \u003d self.power_off_by_name(instance_name, destroy\u003dTrue)"},{"line_number":9765,"context_line":""},{"line_number":9766,"context_line":"        if virt_dom is not None:"},{"line_number":9767,"context_line":"            try:"},{"line_number":9768,"context_line":"                # \"Undefines a domain from hypervisor, similar as"},{"line_number":9769,"context_line":"                #  delete_configuration"},{"line_number":9770,"context_line":"                support_uefi \u003d self._has_uefi_support()"},{"line_number":9771,"context_line":"                flags \u003d libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE"},{"line_number":9772,"context_line":"                if support_uefi:"},{"line_number":9773,"context_line":"                    flags |\u003d libvirt.VIR_DOMAIN_UNDEFINE_NVRAM"},{"line_number":9774,"context_line":"                virt_dom.undefineFlags(flags)"},{"line_number":9775,"context_line":""},{"line_number":9776,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9777,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9778,"context_line":"                    errcode \u003d e.get_error_code()"},{"line_number":9779,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy. \u0027"},{"line_number":9780,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9781,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9782,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9783,"context_line":"                               \u0027name\u0027: instance_name}))"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_0ba0b48f","line":9783,"range":{"start_line":9714,"start_character":0,"end_line":9783,"end_character":55},"updated":"2019-06-26 18:40:54.000000000","message":"we dont acctuly use this in this patch or in the follow up.\nwe can just use the uuids instead as the instance uuid is encoded in the libvirt domain xml in the uuid field so that external monitoring systems can track the stats related to the vm.","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":9711,"context_line":""},{"line_number":9712,"context_line":"        return True"},{"line_number":9713,"context_line":""},{"line_number":9714,"context_line":"    def power_off_by_name(self, instance_name, destroy\u003dFalse):"},{"line_number":9715,"context_line":"        \"\"\"Power off a domain by name."},{"line_number":9716,"context_line":""},{"line_number":9717,"context_line":"        Power off a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9718,"context_line":"        Calling this to destory instance only if the instance object is"},{"line_number":9719,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9720,"context_line":""},{"line_number":9721,"context_line":"        \"\"\""},{"line_number":9722,"context_line":"        try:"},{"line_number":9723,"context_line":"            virt_dom \u003d self._host._get_domain_by_name(instance_name)"},{"line_number":9724,"context_line":"            try:"},{"line_number":9725,"context_line":"                (state, _max_mem, _mem, _cpus, _t) \u003d virt_dom.info()"},{"line_number":9726,"context_line":"                state \u003d libvirt_guest.LIBVIRT_POWER_STATE[state]"},{"line_number":9727,"context_line":"                if state not in [power_state.SHUTDOWN, power_state.CRASHED]:"},{"line_number":9728,"context_line":"                    if destroy:"},{"line_number":9729,"context_line":"                        virt_dom.destroy()"},{"line_number":9730,"context_line":"                    else:"},{"line_number":9731,"context_line":"                        virt_dom.shutdown()"},{"line_number":9732,"context_line":""},{"line_number":9733,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9734,"context_line":"                errcode \u003d e.get_error_code()"},{"line_number":9735,"context_line":"                if errcode \u003d\u003d libvirt.VIR_ERR_OPERATION_TIMEOUT:"},{"line_number":9736,"context_line":"                    LOG.warning(\"Cannot destroy/power off instance, \""},{"line_number":9737,"context_line":"                                \"operation time out, %s\","},{"line_number":9738,"context_line":"                                instance_name)"},{"line_number":9739,"context_line":"                    reason \u003d _(\"operation time out\")"},{"line_number":9740,"context_line":"                    raise exception.InstancePowerOffFailure(reason\u003dreason)"},{"line_number":9741,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9742,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy/power off. \u0027"},{"line_number":9743,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9744,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9745,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9746,"context_line":"                               \u0027name\u0027: instance_name}))"},{"line_number":9747,"context_line":""},{"line_number":9748,"context_line":"            return virt_dom"},{"line_number":9749,"context_line":""},{"line_number":9750,"context_line":"        except exception.InstanceNotFound:"},{"line_number":9751,"context_line":"            # Instance is already gone"},{"line_number":9752,"context_line":"            return None"},{"line_number":9753,"context_line":""},{"line_number":9754,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":9755,"context_line":"        \"\"\"Destroy a domain by name."},{"line_number":9756,"context_line":""},{"line_number":9757,"context_line":"        Destroy a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9758,"context_line":"        Calling this to destroy instance only if the instance object is"},{"line_number":9759,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9760,"context_line":""},{"line_number":9761,"context_line":"        This does not unplug VIFs, destroy block devices, or destroy disks due"},{"line_number":9762,"context_line":"        to lack of information."},{"line_number":9763,"context_line":"        \"\"\""},{"line_number":9764,"context_line":"        virt_dom \u003d self.power_off_by_name(instance_name, destroy\u003dTrue)"},{"line_number":9765,"context_line":""},{"line_number":9766,"context_line":"        if virt_dom is not None:"},{"line_number":9767,"context_line":"            try:"},{"line_number":9768,"context_line":"                # \"Undefines a domain from hypervisor, similar as"},{"line_number":9769,"context_line":"                #  delete_configuration"},{"line_number":9770,"context_line":"                support_uefi \u003d self._has_uefi_support()"},{"line_number":9771,"context_line":"                flags \u003d libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE"},{"line_number":9772,"context_line":"                if support_uefi:"},{"line_number":9773,"context_line":"                    flags |\u003d libvirt.VIR_DOMAIN_UNDEFINE_NVRAM"},{"line_number":9774,"context_line":"                virt_dom.undefineFlags(flags)"},{"line_number":9775,"context_line":""},{"line_number":9776,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9777,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9778,"context_line":"                    errcode \u003d e.get_error_code()"},{"line_number":9779,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy. \u0027"},{"line_number":9780,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9781,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9782,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9783,"context_line":"                               \u0027name\u0027: instance_name}))"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_b1d1695a","line":9783,"range":{"start_line":9714,"start_character":0,"end_line":9783,"end_character":55},"in_reply_to":"9fb8cfa7_0ba0b48f","updated":"2019-07-05 09:04:06.000000000","message":"Done","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"58e598a245c02dbecb94ac81c56b82d7d368878d","unresolved":false,"context_lines":[{"line_number":9711,"context_line":""},{"line_number":9712,"context_line":"        return True"},{"line_number":9713,"context_line":""},{"line_number":9714,"context_line":"    def power_off_by_name(self, instance_name, destroy\u003dFalse):"},{"line_number":9715,"context_line":"        \"\"\"Power off a domain by name."},{"line_number":9716,"context_line":""},{"line_number":9717,"context_line":"        Power off a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9718,"context_line":"        Calling this to destory instance only if the instance object is"},{"line_number":9719,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9720,"context_line":""},{"line_number":9721,"context_line":"        \"\"\""},{"line_number":9722,"context_line":"        try:"},{"line_number":9723,"context_line":"            virt_dom \u003d self._host._get_domain_by_name(instance_name)"},{"line_number":9724,"context_line":"            try:"},{"line_number":9725,"context_line":"                (state, _max_mem, _mem, _cpus, _t) \u003d virt_dom.info()"},{"line_number":9726,"context_line":"                state \u003d libvirt_guest.LIBVIRT_POWER_STATE[state]"},{"line_number":9727,"context_line":"                if state not in [power_state.SHUTDOWN, power_state.CRASHED]:"},{"line_number":9728,"context_line":"                    if destroy:"},{"line_number":9729,"context_line":"                        virt_dom.destroy()"},{"line_number":9730,"context_line":"                    else:"},{"line_number":9731,"context_line":"                        virt_dom.shutdown()"},{"line_number":9732,"context_line":""},{"line_number":9733,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9734,"context_line":"                errcode \u003d e.get_error_code()"},{"line_number":9735,"context_line":"                if errcode \u003d\u003d libvirt.VIR_ERR_OPERATION_TIMEOUT:"},{"line_number":9736,"context_line":"                    LOG.warning(\"Cannot destroy/power off instance, \""},{"line_number":9737,"context_line":"                                \"operation time out, %s\","},{"line_number":9738,"context_line":"                                instance_name)"},{"line_number":9739,"context_line":"                    reason \u003d _(\"operation time out\")"},{"line_number":9740,"context_line":"                    raise exception.InstancePowerOffFailure(reason\u003dreason)"},{"line_number":9741,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9742,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy/power off. \u0027"},{"line_number":9743,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9744,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9745,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9746,"context_line":"                               \u0027name\u0027: instance_name}))"},{"line_number":9747,"context_line":""},{"line_number":9748,"context_line":"            return virt_dom"},{"line_number":9749,"context_line":""},{"line_number":9750,"context_line":"        except exception.InstanceNotFound:"},{"line_number":9751,"context_line":"            # Instance is already gone"},{"line_number":9752,"context_line":"            return None"},{"line_number":9753,"context_line":""},{"line_number":9754,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":9755,"context_line":"        \"\"\"Destroy a domain by name."},{"line_number":9756,"context_line":""},{"line_number":9757,"context_line":"        Destroy a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9758,"context_line":"        Calling this to destroy instance only if the instance object is"},{"line_number":9759,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9760,"context_line":""},{"line_number":9761,"context_line":"        This does not unplug VIFs, destroy block devices, or destroy disks due"},{"line_number":9762,"context_line":"        to lack of information."},{"line_number":9763,"context_line":"        \"\"\""},{"line_number":9764,"context_line":"        virt_dom \u003d self.power_off_by_name(instance_name, destroy\u003dTrue)"},{"line_number":9765,"context_line":""},{"line_number":9766,"context_line":"        if virt_dom is not None:"},{"line_number":9767,"context_line":"            try:"},{"line_number":9768,"context_line":"                # \"Undefines a domain from hypervisor, similar as"},{"line_number":9769,"context_line":"                #  delete_configuration"},{"line_number":9770,"context_line":"                support_uefi \u003d self._has_uefi_support()"},{"line_number":9771,"context_line":"                flags \u003d libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE"},{"line_number":9772,"context_line":"                if support_uefi:"},{"line_number":9773,"context_line":"                    flags |\u003d libvirt.VIR_DOMAIN_UNDEFINE_NVRAM"},{"line_number":9774,"context_line":"                virt_dom.undefineFlags(flags)"},{"line_number":9775,"context_line":""},{"line_number":9776,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9777,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9778,"context_line":"                    errcode \u003d e.get_error_code()"},{"line_number":9779,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy. \u0027"},{"line_number":9780,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9781,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9782,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9783,"context_line":"                               \u0027name\u0027: instance_name}))"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_2b0a5878","line":9783,"range":{"start_line":9714,"start_character":0,"end_line":9783,"end_character":55},"in_reply_to":"9fb8cfa7_0ba0b48f","updated":"2019-06-26 18:44:10.000000000","message":"actully you are using this in the follow up patch but you have not implemented it for all drivers so i dont think you should be.","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":9711,"context_line":""},{"line_number":9712,"context_line":"        return True"},{"line_number":9713,"context_line":""},{"line_number":9714,"context_line":"    def power_off_by_name(self, instance_name, destroy\u003dFalse):"},{"line_number":9715,"context_line":"        \"\"\"Power off a domain by name."},{"line_number":9716,"context_line":""},{"line_number":9717,"context_line":"        Power off a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9718,"context_line":"        Calling this to destory instance only if the instance object is"},{"line_number":9719,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9720,"context_line":""},{"line_number":9721,"context_line":"        \"\"\""},{"line_number":9722,"context_line":"        try:"},{"line_number":9723,"context_line":"            virt_dom \u003d self._host._get_domain_by_name(instance_name)"},{"line_number":9724,"context_line":"            try:"},{"line_number":9725,"context_line":"                (state, _max_mem, _mem, _cpus, _t) \u003d virt_dom.info()"},{"line_number":9726,"context_line":"                state \u003d libvirt_guest.LIBVIRT_POWER_STATE[state]"},{"line_number":9727,"context_line":"                if state not in [power_state.SHUTDOWN, power_state.CRASHED]:"},{"line_number":9728,"context_line":"                    if destroy:"},{"line_number":9729,"context_line":"                        virt_dom.destroy()"},{"line_number":9730,"context_line":"                    else:"},{"line_number":9731,"context_line":"                        virt_dom.shutdown()"},{"line_number":9732,"context_line":""},{"line_number":9733,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9734,"context_line":"                errcode \u003d e.get_error_code()"},{"line_number":9735,"context_line":"                if errcode \u003d\u003d libvirt.VIR_ERR_OPERATION_TIMEOUT:"},{"line_number":9736,"context_line":"                    LOG.warning(\"Cannot destroy/power off instance, \""},{"line_number":9737,"context_line":"                                \"operation time out, %s\","},{"line_number":9738,"context_line":"                                instance_name)"},{"line_number":9739,"context_line":"                    reason \u003d _(\"operation time out\")"},{"line_number":9740,"context_line":"                    raise exception.InstancePowerOffFailure(reason\u003dreason)"},{"line_number":9741,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9742,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy/power off. \u0027"},{"line_number":9743,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9744,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9745,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9746,"context_line":"                               \u0027name\u0027: instance_name}))"},{"line_number":9747,"context_line":""},{"line_number":9748,"context_line":"            return virt_dom"},{"line_number":9749,"context_line":""},{"line_number":9750,"context_line":"        except exception.InstanceNotFound:"},{"line_number":9751,"context_line":"            # Instance is already gone"},{"line_number":9752,"context_line":"            return None"},{"line_number":9753,"context_line":""},{"line_number":9754,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":9755,"context_line":"        \"\"\"Destroy a domain by name."},{"line_number":9756,"context_line":""},{"line_number":9757,"context_line":"        Destroy a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9758,"context_line":"        Calling this to destroy instance only if the instance object is"},{"line_number":9759,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9760,"context_line":""},{"line_number":9761,"context_line":"        This does not unplug VIFs, destroy block devices, or destroy disks due"},{"line_number":9762,"context_line":"        to lack of information."},{"line_number":9763,"context_line":"        \"\"\""},{"line_number":9764,"context_line":"        virt_dom \u003d self.power_off_by_name(instance_name, destroy\u003dTrue)"},{"line_number":9765,"context_line":""},{"line_number":9766,"context_line":"        if virt_dom is not None:"},{"line_number":9767,"context_line":"            try:"},{"line_number":9768,"context_line":"                # \"Undefines a domain from hypervisor, similar as"},{"line_number":9769,"context_line":"                #  delete_configuration"},{"line_number":9770,"context_line":"                support_uefi \u003d self._has_uefi_support()"},{"line_number":9771,"context_line":"                flags \u003d libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE"},{"line_number":9772,"context_line":"                if support_uefi:"},{"line_number":9773,"context_line":"                    flags |\u003d libvirt.VIR_DOMAIN_UNDEFINE_NVRAM"},{"line_number":9774,"context_line":"                virt_dom.undefineFlags(flags)"},{"line_number":9775,"context_line":""},{"line_number":9776,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9777,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9778,"context_line":"                    errcode \u003d e.get_error_code()"},{"line_number":9779,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy. \u0027"},{"line_number":9780,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9781,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9782,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9783,"context_line":"                               \u0027name\u0027: instance_name}))"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_71cbf1a4","line":9783,"range":{"start_line":9714,"start_character":0,"end_line":9783,"end_character":55},"in_reply_to":"9fb8cfa7_2b0a5878","updated":"2019-07-05 09:04:06.000000000","message":"Done","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"41a8bd8622b5394b21c5bd4fe8306359c490af75","unresolved":false,"context_lines":[{"line_number":9711,"context_line":""},{"line_number":9712,"context_line":"        return True"},{"line_number":9713,"context_line":""},{"line_number":9714,"context_line":"    def power_off_by_name(self, instance_name, destroy\u003dFalse):"},{"line_number":9715,"context_line":"        \"\"\"Power off a domain by name."},{"line_number":9716,"context_line":""},{"line_number":9717,"context_line":"        Power off a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9718,"context_line":"        Calling this to destory instance only if the instance object is"},{"line_number":9719,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9720,"context_line":""},{"line_number":9721,"context_line":"        \"\"\""},{"line_number":9722,"context_line":"        try:"},{"line_number":9723,"context_line":"            virt_dom \u003d self._host._get_domain_by_name(instance_name)"},{"line_number":9724,"context_line":"            try:"},{"line_number":9725,"context_line":"                (state, _max_mem, _mem, _cpus, _t) \u003d virt_dom.info()"},{"line_number":9726,"context_line":"                state \u003d libvirt_guest.LIBVIRT_POWER_STATE[state]"},{"line_number":9727,"context_line":"                if state not in [power_state.SHUTDOWN, power_state.CRASHED]:"},{"line_number":9728,"context_line":"                    if destroy:"},{"line_number":9729,"context_line":"                        virt_dom.destroy()"},{"line_number":9730,"context_line":"                    else:"},{"line_number":9731,"context_line":"                        virt_dom.shutdown()"},{"line_number":9732,"context_line":""},{"line_number":9733,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9734,"context_line":"                errcode \u003d e.get_error_code()"},{"line_number":9735,"context_line":"                if errcode \u003d\u003d libvirt.VIR_ERR_OPERATION_TIMEOUT:"},{"line_number":9736,"context_line":"                    LOG.warning(\"Cannot destroy/power off instance, \""},{"line_number":9737,"context_line":"                                \"operation time out, %s\","},{"line_number":9738,"context_line":"                                instance_name)"},{"line_number":9739,"context_line":"                    reason \u003d _(\"operation time out\")"},{"line_number":9740,"context_line":"                    raise exception.InstancePowerOffFailure(reason\u003dreason)"},{"line_number":9741,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9742,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy/power off. \u0027"},{"line_number":9743,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9744,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9745,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9746,"context_line":"                               \u0027name\u0027: instance_name}))"},{"line_number":9747,"context_line":""},{"line_number":9748,"context_line":"            return virt_dom"},{"line_number":9749,"context_line":""},{"line_number":9750,"context_line":"        except exception.InstanceNotFound:"},{"line_number":9751,"context_line":"            # Instance is already gone"},{"line_number":9752,"context_line":"            return None"},{"line_number":9753,"context_line":""},{"line_number":9754,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":9755,"context_line":"        \"\"\"Destroy a domain by name."},{"line_number":9756,"context_line":""},{"line_number":9757,"context_line":"        Destroy a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9758,"context_line":"        Calling this to destroy instance only if the instance object is"},{"line_number":9759,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9760,"context_line":""},{"line_number":9761,"context_line":"        This does not unplug VIFs, destroy block devices, or destroy disks due"},{"line_number":9762,"context_line":"        to lack of information."},{"line_number":9763,"context_line":"        \"\"\""},{"line_number":9764,"context_line":"        virt_dom \u003d self.power_off_by_name(instance_name, destroy\u003dTrue)"},{"line_number":9765,"context_line":""},{"line_number":9766,"context_line":"        if virt_dom is not None:"},{"line_number":9767,"context_line":"            try:"},{"line_number":9768,"context_line":"                # \"Undefines a domain from hypervisor, similar as"},{"line_number":9769,"context_line":"                #  delete_configuration"},{"line_number":9770,"context_line":"                support_uefi \u003d self._has_uefi_support()"},{"line_number":9771,"context_line":"                flags \u003d libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE"},{"line_number":9772,"context_line":"                if support_uefi:"},{"line_number":9773,"context_line":"                    flags |\u003d libvirt.VIR_DOMAIN_UNDEFINE_NVRAM"},{"line_number":9774,"context_line":"                virt_dom.undefineFlags(flags)"},{"line_number":9775,"context_line":""},{"line_number":9776,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9777,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9778,"context_line":"                    errcode \u003d e.get_error_code()"},{"line_number":9779,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy. \u0027"},{"line_number":9780,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9781,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9782,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9783,"context_line":"                               \u0027name\u0027: instance_name}))"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_cb27fcc6","line":9783,"range":{"start_line":9714,"start_character":0,"end_line":9783,"end_character":55},"in_reply_to":"9fb8cfa7_2b0a5878","updated":"2019-06-26 19:04:24.000000000","message":"by the way im taking issue with the fact we are passing the libvirt domain name back up to the comptue manager and then using that to destroy or power off the domain.\n\ni think we should be using the uuids instead.\n\nim also concerend that we will not be cleaning up networking correctly.\n\nwe are not calling unplug on any of the interfaces nor are we cleanup and cinder volumes we are just removing the domain.\n\nwill removing the domain delete the disk?","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":9711,"context_line":""},{"line_number":9712,"context_line":"        return True"},{"line_number":9713,"context_line":""},{"line_number":9714,"context_line":"    def power_off_by_name(self, instance_name, destroy\u003dFalse):"},{"line_number":9715,"context_line":"        \"\"\"Power off a domain by name."},{"line_number":9716,"context_line":""},{"line_number":9717,"context_line":"        Power off a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9718,"context_line":"        Calling this to destory instance only if the instance object is"},{"line_number":9719,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9720,"context_line":""},{"line_number":9721,"context_line":"        \"\"\""},{"line_number":9722,"context_line":"        try:"},{"line_number":9723,"context_line":"            virt_dom \u003d self._host._get_domain_by_name(instance_name)"},{"line_number":9724,"context_line":"            try:"},{"line_number":9725,"context_line":"                (state, _max_mem, _mem, _cpus, _t) \u003d virt_dom.info()"},{"line_number":9726,"context_line":"                state \u003d libvirt_guest.LIBVIRT_POWER_STATE[state]"},{"line_number":9727,"context_line":"                if state not in [power_state.SHUTDOWN, power_state.CRASHED]:"},{"line_number":9728,"context_line":"                    if destroy:"},{"line_number":9729,"context_line":"                        virt_dom.destroy()"},{"line_number":9730,"context_line":"                    else:"},{"line_number":9731,"context_line":"                        virt_dom.shutdown()"},{"line_number":9732,"context_line":""},{"line_number":9733,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9734,"context_line":"                errcode \u003d e.get_error_code()"},{"line_number":9735,"context_line":"                if errcode \u003d\u003d libvirt.VIR_ERR_OPERATION_TIMEOUT:"},{"line_number":9736,"context_line":"                    LOG.warning(\"Cannot destroy/power off instance, \""},{"line_number":9737,"context_line":"                                \"operation time out, %s\","},{"line_number":9738,"context_line":"                                instance_name)"},{"line_number":9739,"context_line":"                    reason \u003d _(\"operation time out\")"},{"line_number":9740,"context_line":"                    raise exception.InstancePowerOffFailure(reason\u003dreason)"},{"line_number":9741,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9742,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy/power off. \u0027"},{"line_number":9743,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9744,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9745,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9746,"context_line":"                               \u0027name\u0027: instance_name}))"},{"line_number":9747,"context_line":""},{"line_number":9748,"context_line":"            return virt_dom"},{"line_number":9749,"context_line":""},{"line_number":9750,"context_line":"        except exception.InstanceNotFound:"},{"line_number":9751,"context_line":"            # Instance is already gone"},{"line_number":9752,"context_line":"            return None"},{"line_number":9753,"context_line":""},{"line_number":9754,"context_line":"    def destroy_instance_by_name(self, instance_name):"},{"line_number":9755,"context_line":"        \"\"\"Destroy a domain by name."},{"line_number":9756,"context_line":""},{"line_number":9757,"context_line":"        Destroy a domain if we only know \u0027name\u0027 and not the full instance."},{"line_number":9758,"context_line":"        Calling this to destroy instance only if the instance object is"},{"line_number":9759,"context_line":"        NOT in the DB; the instance had been logically deleted already."},{"line_number":9760,"context_line":""},{"line_number":9761,"context_line":"        This does not unplug VIFs, destroy block devices, or destroy disks due"},{"line_number":9762,"context_line":"        to lack of information."},{"line_number":9763,"context_line":"        \"\"\""},{"line_number":9764,"context_line":"        virt_dom \u003d self.power_off_by_name(instance_name, destroy\u003dTrue)"},{"line_number":9765,"context_line":""},{"line_number":9766,"context_line":"        if virt_dom is not None:"},{"line_number":9767,"context_line":"            try:"},{"line_number":9768,"context_line":"                # \"Undefines a domain from hypervisor, similar as"},{"line_number":9769,"context_line":"                #  delete_configuration"},{"line_number":9770,"context_line":"                support_uefi \u003d self._has_uefi_support()"},{"line_number":9771,"context_line":"                flags \u003d libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE"},{"line_number":9772,"context_line":"                if support_uefi:"},{"line_number":9773,"context_line":"                    flags |\u003d libvirt.VIR_DOMAIN_UNDEFINE_NVRAM"},{"line_number":9774,"context_line":"                virt_dom.undefineFlags(flags)"},{"line_number":9775,"context_line":""},{"line_number":9776,"context_line":"            except libvirt.libvirtError as e:"},{"line_number":9777,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":9778,"context_line":"                    errcode \u003d e.get_error_code()"},{"line_number":9779,"context_line":"                    LOG.error(\u0027Error from libvirt during destroy. \u0027"},{"line_number":9780,"context_line":"                              \u0027Code\u003d%(errcode)s Error\u003d%(e)s, name\u003d%(name)s\u0027,"},{"line_number":9781,"context_line":"                               ({\u0027errcode\u0027: errcode,"},{"line_number":9782,"context_line":"                               \u0027e\u0027: e,"},{"line_number":9783,"context_line":"                               \u0027name\u0027: instance_name}))"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_d1d66550","line":9783,"range":{"start_line":9714,"start_character":0,"end_line":9783,"end_character":55},"in_reply_to":"9fb8cfa7_cb27fcc6","updated":"2019-07-05 09:04:06.000000000","message":"Done","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"475395f7ac14d6167890c0856df7ea7a2db7bfc8","unresolved":false,"context_lines":[{"line_number":9754,"context_line":"            return False"},{"line_number":9755,"context_line":""},{"line_number":9756,"context_line":"        # check if flavor in the nova namespace"},{"line_number":9757,"context_line":"        nova_ns \u003d tree.findall(\u0027./metadata/*/{%s}flavor\u0027 % vconfig.NOVA_NS)"},{"line_number":9758,"context_line":""},{"line_number":9759,"context_line":"        if not nova_ns:"},{"line_number":9760,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":18,"id":"7faddb67_87a3599e","line":9757,"updated":"2019-07-30 20:56:54.000000000","message":"Note to self: doc about how XML with namespaces are expanded is here:\n\nhttps://docs.python.org/2/library/xml.etree.elementtree.html#parsing-xml-with-namespaces\n\nand here is a sample guest XML from a gate run:\n\nhttp://paste.openstack.org/show/755138\n\n\u003cmetadata\u003e\n  \u003cnova:instance xmlns:nova\u003d\"http://openstack.org/xmlns/libvirt/nova/1.0\"\u003e\n    \u003cnova:package version\u003d\"19.1.0\"/\u003e\n    \u003cnova:name\u003etempest-DeleteServersAdminTestJSON-server-1172869963\u003c/nova:name\u003e\n    \u003cnova:creationTime\u003e2019-07-18 17:13:41\u003c/nova:creationTime\u003e\n    \u003cnova:flavor name\u003d\"m1.nano\"\u003e\n      \u003cnova:memory\u003e64\u003c/nova:memory\u003e\n      \u003cnova:disk\u003e1\u003c/nova:disk\u003e\n      \u003cnova:swap\u003e0\u003c/nova:swap\u003e\n      \u003cnova:ephemeral\u003e0\u003c/nova:ephemeral\u003e\n      \u003cnova:vcpus\u003e1\u003c/nova:vcpus\u003e\n    \u003c/nova:flavor\u003e\n    \u003cnova:owner\u003e\n      \u003cnova:user uuid\u003d\"002f799cc23e4d2291dbfd145bf6a7e1\"\u003etempest-DeleteServersAdminTestJSON-144966377\u003c/nova:user\u003e\n      \u003cnova:project uuid\u003d\"0ec6c301238a41bd8e6c54f26c76ef43\"\u003etempest-DeleteServersAdminTestJSON-144966377\u003c/nova:project\u003e\n    \u003c/nova:owner\u003e\n    \u003cnova:root type\u003d\"image\" uuid\u003d\"161a7d64-a753-4b85-b9b1-8089294f6fd7\"/\u003e\n  \u003c/nova:instance\u003e\n\u003c/metadata\u003e","commit_id":"720fa68594bd0387b6e055f60b2915c8eeb58a4a"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"d2f8ffd8e3f52e336fe25b957ae367f87edf0817","unresolved":false,"context_lines":[{"line_number":10550,"context_line":"        \"\"\""},{"line_number":10551,"context_line":"        try:"},{"line_number":10552,"context_line":"            virt_dom \u003d self._host._get_domain(instance)"},{"line_number":10553,"context_line":"            guest \u003d libvirt_guest.Guest(virt_dom)"},{"line_number":10554,"context_line":"            xml \u003d guest.get_xml_desc()"},{"line_number":10555,"context_line":"            tree \u003d etree.fromstring(xml)"},{"line_number":10556,"context_line":"        except exception.InstanceNotFound:"},{"line_number":10557,"context_line":"            return False"},{"line_number":10558,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1f493fa4_49f63dd9","line":10555,"range":{"start_line":10553,"start_character":2,"end_line":10555,"end_character":40},"updated":"2020-04-29 09:47:16.000000000","message":"I\u0027d remove this from the try block and also move the logic for this into the guest class.","commit_id":"845bf47546348b9b88d1831b5bba2ab924beae93"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"d2f8ffd8e3f52e336fe25b957ae367f87edf0817","unresolved":false,"context_lines":[{"line_number":10556,"context_line":"        except exception.InstanceNotFound:"},{"line_number":10557,"context_line":"            return False"},{"line_number":10558,"context_line":""},{"line_number":10559,"context_line":"        # check if flavor in the nova namespace"},{"line_number":10560,"context_line":"        nova_ns \u003d tree.findall(\u0027./metadata/*/{%s}flavor\u0027 % vconfig.NOVA_NS)"},{"line_number":10561,"context_line":""},{"line_number":10562,"context_line":"        if not nova_ns:"},{"line_number":10563,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f493fa4_c9336daa","line":10560,"range":{"start_line":10559,"start_character":0,"end_line":10560,"end_character":75},"updated":"2020-04-29 09:47:16.000000000","message":"As above you can move this into the guest class.","commit_id":"845bf47546348b9b88d1831b5bba2ab924beae93"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"d2f8ffd8e3f52e336fe25b957ae367f87edf0817","unresolved":false,"context_lines":[{"line_number":10557,"context_line":"            return False"},{"line_number":10558,"context_line":""},{"line_number":10559,"context_line":"        # check if flavor in the nova namespace"},{"line_number":10560,"context_line":"        nova_ns \u003d tree.findall(\u0027./metadata/*/{%s}flavor\u0027 % vconfig.NOVA_NS)"},{"line_number":10561,"context_line":""},{"line_number":10562,"context_line":"        if not nova_ns:"},{"line_number":10563,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f493fa4_89984575","line":10560,"range":{"start_line":10560,"start_character":49,"end_line":10560,"end_character":55},"updated":"2020-04-29 09:47:16.000000000","message":"Couldn\u0027t we use the version.product_string() here instead?","commit_id":"845bf47546348b9b88d1831b5bba2ab924beae93"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"d2f8ffd8e3f52e336fe25b957ae367f87edf0817","unresolved":false,"context_lines":[{"line_number":10559,"context_line":"        # check if flavor in the nova namespace"},{"line_number":10560,"context_line":"        nova_ns \u003d tree.findall(\u0027./metadata/*/{%s}flavor\u0027 % vconfig.NOVA_NS)"},{"line_number":10561,"context_line":""},{"line_number":10562,"context_line":"        if not nova_ns:"},{"line_number":10563,"context_line":"            return False"},{"line_number":10564,"context_line":""},{"line_number":10565,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f493fa4_09df153a","line":10565,"range":{"start_line":10562,"start_character":0,"end_line":10565,"end_character":19},"updated":"2020-04-29 09:47:16.000000000","message":"and then just return the value from the call to the guest class here. Something like:\n\n    return guest.is_managed_by_nova()","commit_id":"845bf47546348b9b88d1831b5bba2ab924beae93"}],"nova/virt/libvirt/host.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25d96eeacf1c8fc4276cf5de6b673f57894b5c78","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":587,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":588,"context_line":"            if error_code \u003d\u003d libvirt.VIR_ERR_NO_DOMAIN:"},{"line_number":589,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_name)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"            msg \u003d (_(\u0027Error from libvirt while looking up %(instance_name)s: \u0027"},{"line_number":592,"context_line":"                     \u0027[Error Code %(error_code)s] %(ex)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_6b3f2725","line":589,"range":{"start_line":589,"start_character":49,"end_line":589,"end_character":74},"updated":"2019-04-26 11:48:02.000000000","message":"This is hackish but meh.","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"a250655605bd0882b64802975597ccba773fcf10","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":587,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":588,"context_line":"            if error_code \u003d\u003d libvirt.VIR_ERR_NO_DOMAIN:"},{"line_number":589,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_name)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"            msg \u003d (_(\u0027Error from libvirt while looking up %(instance_name)s: \u0027"},{"line_number":592,"context_line":"                     \u0027[Error Code %(error_code)s] %(ex)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffb9cba7_dfbfc3a7","line":589,"range":{"start_line":589,"start_character":49,"end_line":589,"end_character":74},"in_reply_to":"ffb9cba7_6b3f2725","updated":"2019-04-30 05:53:47.000000000","message":"Need a new Exception?","commit_id":"1ef9dd8dab6ec13fb6d2b990a14bca9487ebf7ad"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"50e0056759ad6a705569cd9ed07f8cb6dcb9eb0c","unresolved":false,"context_lines":[{"line_number":569,"context_line":"                    \u0027ex\u0027: ex})"},{"line_number":570,"context_line":"            raise exception.InternalError(msg)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    def _get_domain_by_name(self, instance_name):"},{"line_number":573,"context_line":"        \"\"\"Retrieve libvirt domain object given an instance name."},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        All libvirt error handling should be handled in this method and"},{"line_number":576,"context_line":"        relevant nova exceptions should be raised in response."},{"line_number":577,"context_line":"        \"\"\""},{"line_number":578,"context_line":"        try:"},{"line_number":579,"context_line":"            conn \u003d self.get_connection()"},{"line_number":580,"context_line":"            return conn.lookupByName(instance_name)"},{"line_number":581,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":582,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":583,"context_line":"            if error_code \u003d\u003d libvirt.VIR_ERR_NO_DOMAIN:"},{"line_number":584,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_name)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"            msg \u003d (_(\u0027Error from libvirt while looking up %(instance_name)s: \u0027"},{"line_number":587,"context_line":"                     \u0027[Error Code %(error_code)s] %(ex)s\u0027) %"},{"line_number":588,"context_line":"                   {\u0027instance_name\u0027: instance_name,"},{"line_number":589,"context_line":"                    \u0027error_code\u0027: error_code,"},{"line_number":590,"context_line":"                    \u0027ex\u0027: ex})"},{"line_number":591,"context_line":"            raise exception.NovaException(msg)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def list_guests(self, only_running\u003dTrue, only_guests\u003dTrue):"},{"line_number":594,"context_line":"        \"\"\"Get a list of Guest objects for nova instances"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_8be264d4","line":591,"range":{"start_line":572,"start_character":4,"end_line":591,"end_character":46},"updated":"2019-06-26 18:40:54.000000000","message":"this is not needed","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":569,"context_line":"                    \u0027ex\u0027: ex})"},{"line_number":570,"context_line":"            raise exception.InternalError(msg)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    def _get_domain_by_name(self, instance_name):"},{"line_number":573,"context_line":"        \"\"\"Retrieve libvirt domain object given an instance name."},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        All libvirt error handling should be handled in this method and"},{"line_number":576,"context_line":"        relevant nova exceptions should be raised in response."},{"line_number":577,"context_line":"        \"\"\""},{"line_number":578,"context_line":"        try:"},{"line_number":579,"context_line":"            conn \u003d self.get_connection()"},{"line_number":580,"context_line":"            return conn.lookupByName(instance_name)"},{"line_number":581,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":582,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":583,"context_line":"            if error_code \u003d\u003d libvirt.VIR_ERR_NO_DOMAIN:"},{"line_number":584,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_name)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"            msg \u003d (_(\u0027Error from libvirt while looking up %(instance_name)s: \u0027"},{"line_number":587,"context_line":"                     \u0027[Error Code %(error_code)s] %(ex)s\u0027) %"},{"line_number":588,"context_line":"                   {\u0027instance_name\u0027: instance_name,"},{"line_number":589,"context_line":"                    \u0027error_code\u0027: error_code,"},{"line_number":590,"context_line":"                    \u0027ex\u0027: ex})"},{"line_number":591,"context_line":"            raise exception.NovaException(msg)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def list_guests(self, only_running\u003dTrue, only_guests\u003dTrue):"},{"line_number":594,"context_line":"        \"\"\"Get a list of Guest objects for nova instances"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_31c5798f","line":591,"range":{"start_line":572,"start_character":4,"end_line":591,"end_character":46},"in_reply_to":"9fb8cfa7_4610e300","updated":"2019-07-05 09:04:06.000000000","message":"Done","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"e486b4982f2bf2dcfafe4d0ff74433755b5bff3d","unresolved":false,"context_lines":[{"line_number":569,"context_line":"                    \u0027ex\u0027: ex})"},{"line_number":570,"context_line":"            raise exception.InternalError(msg)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    def _get_domain_by_name(self, instance_name):"},{"line_number":573,"context_line":"        \"\"\"Retrieve libvirt domain object given an instance name."},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        All libvirt error handling should be handled in this method and"},{"line_number":576,"context_line":"        relevant nova exceptions should be raised in response."},{"line_number":577,"context_line":"        \"\"\""},{"line_number":578,"context_line":"        try:"},{"line_number":579,"context_line":"            conn \u003d self.get_connection()"},{"line_number":580,"context_line":"            return conn.lookupByName(instance_name)"},{"line_number":581,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":582,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":583,"context_line":"            if error_code \u003d\u003d libvirt.VIR_ERR_NO_DOMAIN:"},{"line_number":584,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_name)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"            msg \u003d (_(\u0027Error from libvirt while looking up %(instance_name)s: \u0027"},{"line_number":587,"context_line":"                     \u0027[Error Code %(error_code)s] %(ex)s\u0027) %"},{"line_number":588,"context_line":"                   {\u0027instance_name\u0027: instance_name,"},{"line_number":589,"context_line":"                    \u0027error_code\u0027: error_code,"},{"line_number":590,"context_line":"                    \u0027ex\u0027: ex})"},{"line_number":591,"context_line":"            raise exception.NovaException(msg)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def list_guests(self, only_running\u003dTrue, only_guests\u003dTrue):"},{"line_number":594,"context_line":"        \"\"\"Get a list of Guest objects for nova instances"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_91d0ed52","line":591,"range":{"start_line":572,"start_character":4,"end_line":591,"end_character":46},"in_reply_to":"9fb8cfa7_8be264d4","updated":"2019-07-05 09:04:06.000000000","message":"Done","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"08cd8ec80fed9b352b609daa3e9f434e6ea0c454","unresolved":false,"context_lines":[{"line_number":569,"context_line":"                    \u0027ex\u0027: ex})"},{"line_number":570,"context_line":"            raise exception.InternalError(msg)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    def _get_domain_by_name(self, instance_name):"},{"line_number":573,"context_line":"        \"\"\"Retrieve libvirt domain object given an instance name."},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        All libvirt error handling should be handled in this method and"},{"line_number":576,"context_line":"        relevant nova exceptions should be raised in response."},{"line_number":577,"context_line":"        \"\"\""},{"line_number":578,"context_line":"        try:"},{"line_number":579,"context_line":"            conn \u003d self.get_connection()"},{"line_number":580,"context_line":"            return conn.lookupByName(instance_name)"},{"line_number":581,"context_line":"        except libvirt.libvirtError as ex:"},{"line_number":582,"context_line":"            error_code \u003d ex.get_error_code()"},{"line_number":583,"context_line":"            if error_code \u003d\u003d libvirt.VIR_ERR_NO_DOMAIN:"},{"line_number":584,"context_line":"                raise exception.InstanceNotFound(instance_id\u003dinstance_name)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"            msg \u003d (_(\u0027Error from libvirt while looking up %(instance_name)s: \u0027"},{"line_number":587,"context_line":"                     \u0027[Error Code %(error_code)s] %(ex)s\u0027) %"},{"line_number":588,"context_line":"                   {\u0027instance_name\u0027: instance_name,"},{"line_number":589,"context_line":"                    \u0027error_code\u0027: error_code,"},{"line_number":590,"context_line":"                    \u0027ex\u0027: ex})"},{"line_number":591,"context_line":"            raise exception.NovaException(msg)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def list_guests(self, only_running\u003dTrue, only_guests\u003dTrue):"},{"line_number":594,"context_line":"        \"\"\"Get a list of Guest objects for nova instances"}],"source_content_type":"text/x-python","patch_set":14,"id":"9fb8cfa7_4610e300","line":591,"range":{"start_line":572,"start_character":4,"end_line":591,"end_character":46},"in_reply_to":"9fb8cfa7_8be264d4","updated":"2019-06-26 19:17:33.000000000","message":"this is used by power_off_by_name \n\nwe shoudl pull out a get_domain_by_uuid function and reuse it in _get_domain above.","commit_id":"1bc9f461410a5e3441b8f76001002b528acd97c8"}]}
