)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c5e28e38c2fd95aa7df651f0c846a55c4dbe8b28","unresolved":false,"context_lines":[{"line_number":11,"context_line":"An earlier version of this change was previously merged as"},{"line_number":12,"context_line":"change I5619728d. This was later reverted, as it was failing in the"},{"line_number":13,"context_line":"gate. However, on inspection these failures seem to have been simply"},{"line_number":14,"context_line":"timeouts due to load rather than a of race."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Changes from previous version:"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bfdaf3ff_fbfd116e","line":14,"range":{"start_line":14,"start_character":28,"end_line":14,"end_character":43},"updated":"2019-06-21 08:46:02.000000000","message":"nit: I cannot parse this. :)","commit_id":"a9a501bf16975a20f635c2fa1ab2a15e3c66132f"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"0a1c15b1c4ce4b8d101786a8ac0eba99afdeccb4","unresolved":false,"context_lines":[{"line_number":11,"context_line":"An earlier version of this change was previously merged as"},{"line_number":12,"context_line":"change I5619728d. This was later reverted, as it was failing in the"},{"line_number":13,"context_line":"gate. However, on inspection these failures seem to have been simply"},{"line_number":14,"context_line":"timeouts due to load rather than a of race."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Changes from previous version:"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fb8cfa7_4b557a4f","line":14,"range":{"start_line":14,"start_character":28,"end_line":14,"end_character":43},"in_reply_to":"bfdaf3ff_fbfd116e","updated":"2019-06-24 16:05:40.000000000","message":"Hehe. s/of//\n\nI\u0027ll update if I respin.","commit_id":"a9a501bf16975a20f635c2fa1ab2a15e3c66132f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"932b701a47f18a70bfb0734abdeb43f4ba1ecdae","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Changes from previous version:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"- Increase the timeouts which were previously triggering, and"},{"line_number":19,"context_line":"  serialise server creation to reduce the chance of this recurring."},{"line_number":20,"context_line":"- Add an LVM test, which highlights the requirement to flag the"},{"line_number":21,"context_line":"  creation of ephemeral and swap disks."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9fb8cfa7_087cd11e","line":18,"range":{"start_line":18,"start_character":2,"end_line":18,"end_character":56},"updated":"2019-06-17 23:54:45.000000000","message":"I don\u0027t see anything related to timeouts in this patch. Did I miss it?\n\n(later)\n\nI see the test is increasing max_retries to try and address timeout issues.","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"932b701a47f18a70bfb0734abdeb43f4ba1ecdae","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  serialise server creation to reduce the chance of this recurring."},{"line_number":20,"context_line":"- Add an LVM test, which highlights the requirement to flag the"},{"line_number":21,"context_line":"  creation of ephemeral and swap disks."},{"line_number":22,"context_line":"- Some nits addressed."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Related-Bug: #1550919"},{"line_number":25,"context_line":"Change-Id: I1062b3e74382734edbb2142a09ff0073c66af8db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9fb8cfa7_08a13196","line":22,"updated":"2019-06-17 23:54:45.000000000","message":"Overall in this commit message, I\u0027d appreciate seeing a summary of what\u0027s tested in here. For example: tests the instance directory removal and disk removal behaviors for the flat, LVM, and RBD imagebackends when the instance directory is shared and when the instance directory is nonshared.","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"922a7e4683a66897f7ec49fcfe155e8fe15ff3cb","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Changes from previous version:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"- Increase the timeouts which were previously triggering, and"},{"line_number":19,"context_line":"  serialise server creation to reduce the chance of this recurring."},{"line_number":20,"context_line":"- Add an LVM test, which highlights the requirement to flag the"},{"line_number":21,"context_line":"  creation of ephemeral and swap disks."},{"line_number":22,"context_line":"- Some nits addressed."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9fb8cfa7_b2d01421","line":19,"range":{"start_line":18,"start_character":0,"end_line":19,"end_character":67},"updated":"2019-06-25 15:58:34.000000000","message":"I\u0027m likely being dense but which timeouts and how is serialising server creation helping here?","commit_id":"eedd1c7233531e1ceb801e10831fb118be157286"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"922a7e4683a66897f7ec49fcfe155e8fe15ff3cb","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"- Increase the timeouts which were previously triggering, and"},{"line_number":19,"context_line":"  serialise server creation to reduce the chance of this recurring."},{"line_number":20,"context_line":"- Add an LVM test, which highlights the requirement to flag the"},{"line_number":21,"context_line":"  creation of ephemeral and swap disks."},{"line_number":22,"context_line":"- Some nits addressed."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Related-Bug: #1550919"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9fb8cfa7_d2926857","line":21,"range":{"start_line":20,"start_character":19,"end_line":21,"end_character":39},"updated":"2019-06-25 15:58:34.000000000","message":"I\u0027m also not entirely sure what you mean by this.","commit_id":"eedd1c7233531e1ceb801e10831fb118be157286"}],"nova/tests/functional/libvirt/test_evacuate.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"932b701a47f18a70bfb0734abdeb43f4ba1ecdae","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_utils import fileutils"},{"line_number":21,"context_line":"from oslo_utils import units"},{"line_number":22,"context_line":"from oslo_utils.fixture import uuidsentinel as uuids"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from nova import conf"},{"line_number":25,"context_line":"from nova import context"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_a898251b","line":22,"updated":"2019-06-17 23:54:45.000000000","message":"pep8 failure is from this needing to go before \"from oslo_utils import units\"","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"932b701a47f18a70bfb0734abdeb43f4ba1ecdae","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                        (source_root_disk, name))"},{"line_number":149,"context_line":"        self.assertFalse(os.path.exists(dest_root_disk),"},{"line_number":150,"context_line":"                         \"Destination root disk %s for server %s exists\" %"},{"line_number":151,"context_line":"                         (dest_root_disk, name))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def assert_disks_shared_instancedir(self, server):"},{"line_number":154,"context_line":"        name \u003d server[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_e8c05d2d","line":151,"updated":"2019-06-17 23:54:45.000000000","message":"Note to self: asserts that the source root disk exists and the destination root disk is removed for nonshared instance dir with flat backend.","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"932b701a47f18a70bfb0734abdeb43f4ba1ecdae","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        # FIXME(mdbooth): We should not have deleted a shared disk"},{"line_number":163,"context_line":"        self.assertFalse(os.path.exists(source_root_disk),"},{"line_number":164,"context_line":"                         \"Source root disk %s for server %s exists\" %"},{"line_number":165,"context_line":"                         (source_root_disk, name))"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"class _RbdTest(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_a8e025ce","line":165,"updated":"2019-06-17 23:54:45.000000000","message":"Note to self: asserts the source root disk exists for shared instance dir with flat backend.","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"932b701a47f18a70bfb0734abdeb43f4ba1ecdae","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        self.assertFalse(os.path.exists(source_root_disk),"},{"line_number":164,"context_line":"                         \"Source root disk %s for server %s exists\" %"},{"line_number":165,"context_line":"                         (source_root_disk, name))"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"class _RbdTest(object):"},{"line_number":169,"context_line":"    \"\"\"A mixin which configures the rbd imagebackend, and provides assertions"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_08cff157","line":166,"updated":"2019-06-17 23:54:45.000000000","message":"What\u0027s the expected state of the destination root disk here? Should we have an assert for that too? If we don\u0027t want an assert for that, can we have a code comment explaining why?\n\n(later)\n\nLooks like we don\u0027t need a separate assert because if the instance dir is shared, the disk is also shared and thus, is the same.","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"932b701a47f18a70bfb0734abdeb43f4ba1ecdae","unresolved":false,"context_lines":[{"line_number":213,"context_line":"    # We never want to cleanup rbd disks during evacuate, regardless of"},{"line_number":214,"context_line":"    # instance shared storage"},{"line_number":215,"context_line":"    assert_disks_nonshared_instancedir \u003d _assert_disks"},{"line_number":216,"context_line":"    assert_disks_shared_instancedir \u003d _assert_disks"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"class FakeLVM(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_a82ee5f7","line":216,"updated":"2019-06-17 23:54:45.000000000","message":"Good code comment ++","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"932b701a47f18a70bfb0734abdeb43f4ba1ecdae","unresolved":false,"context_lines":[{"line_number":358,"context_line":"    # We always want to cleanup LVM disks on failure, regardless of shared"},{"line_number":359,"context_line":"    # instance directory"},{"line_number":360,"context_line":"    assert_disks_nonshared_instancedir \u003d _assert_disks"},{"line_number":361,"context_line":"    assert_disks_shared_instancedir \u003d _assert_disks"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"class _LibvirtEvacuateTest(integrated_helpers.InstanceHelperMixin):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_a817c5a3","line":361,"updated":"2019-06-17 23:54:45.000000000","message":"Good code comment but I have to admit I don\u0027t know/understand why we always want to delete LVM disks on failure, even when they are shared storage. /me needs to go check the code to see if it\u0027s explained there.","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"0a1c15b1c4ce4b8d101786a8ac0eba99afdeccb4","unresolved":false,"context_lines":[{"line_number":358,"context_line":"    # We always want to cleanup LVM disks on failure, regardless of shared"},{"line_number":359,"context_line":"    # instance directory"},{"line_number":360,"context_line":"    assert_disks_nonshared_instancedir \u003d _assert_disks"},{"line_number":361,"context_line":"    assert_disks_shared_instancedir \u003d _assert_disks"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"class _LibvirtEvacuateTest(integrated_helpers.InstanceHelperMixin):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_2b7b66be","line":361,"in_reply_to":"9fb8cfa7_a817c5a3","updated":"2019-06-24 16:05:40.000000000","message":"It\u0027s because LVM disks are unshareable. They\u0027re never shared, so they were always created by us, so we always need to clean them up.","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"932b701a47f18a70bfb0734abdeb43f4ba1ecdae","unresolved":false,"context_lines":[{"line_number":448,"context_line":"                   \u0027host.Host.get_memory_mb_total\u0027):"},{"line_number":449,"context_line":"            fn_mock \u003d self.useFixture(fixtures.MockPatch("},{"line_number":450,"context_line":"                \u0027nova.virt.libvirt.\u0027 + fn)).mock"},{"line_number":451,"context_line":"            fn_mock.return_value \u003d lots"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        self.start_service(\u0027conductor\u0027)"},{"line_number":454,"context_line":"        self.start_service(\u0027scheduler\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_685f8d72","line":451,"updated":"2019-06-17 23:54:45.000000000","message":"I wonder if there\u0027s a less ugly way we could do this. In FakeDriver-land, we have self.resources [1].\n\n[1] https://github.com/openstack/nova/blob/ea7293c/nova/virt/fake.py#L155","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c5e28e38c2fd95aa7df651f0c846a55c4dbe8b28","unresolved":false,"context_lines":[{"line_number":448,"context_line":"                   \u0027host.Host.get_memory_mb_total\u0027):"},{"line_number":449,"context_line":"            fn_mock \u003d self.useFixture(fixtures.MockPatch("},{"line_number":450,"context_line":"                \u0027nova.virt.libvirt.\u0027 + fn)).mock"},{"line_number":451,"context_line":"            fn_mock.return_value \u003d lots"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        self.start_service(\u0027conductor\u0027)"},{"line_number":454,"context_line":"        self.start_service(\u0027scheduler\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_af20e2f8","line":451,"in_reply_to":"9fb8cfa7_685f8d72","updated":"2019-06-21 08:46:02.000000000","message":"If we need to test the libvirt driver code here then we cannot use the FakeDriver. And the fakelibvirt fixture has its limitations. There is a third way, by mocking the libvirt connection. For example: https://github.com/openstack/nova/blob/d50d8b6357fce78db7f6a4f85ff6a14a529ac48e/nova/tests/functional/libvirt/test_reshape.py#L64","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"0a1c15b1c4ce4b8d101786a8ac0eba99afdeccb4","unresolved":false,"context_lines":[{"line_number":448,"context_line":"                   \u0027host.Host.get_memory_mb_total\u0027):"},{"line_number":449,"context_line":"            fn_mock \u003d self.useFixture(fixtures.MockPatch("},{"line_number":450,"context_line":"                \u0027nova.virt.libvirt.\u0027 + fn)).mock"},{"line_number":451,"context_line":"            fn_mock.return_value \u003d lots"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        self.start_service(\u0027conductor\u0027)"},{"line_number":454,"context_line":"        self.start_service(\u0027scheduler\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_9705d412","line":451,"in_reply_to":"9fb8cfa7_af20e2f8","updated":"2019-06-24 16:05:40.000000000","message":"I don\u0027t think this existed when I wrote this (in August 2018...). I\u0027ll look into whether this is now usable.","commit_id":"074aa38b639c199ffc68818a6ab914d7fb5da2be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e84b2afd37698eccae8a3cf44626dfd73b7e1e6e","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        # force_down and evacuate without onSharedStorage"},{"line_number":413,"context_line":"        self.api.microversion \u003d \u00272.14\u0027"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        fake_image.stub_out_image_service(self)"},{"line_number":416,"context_line":"        self.addCleanup(fake_image.FakeImageService_reset)"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        fake_notifier.stub_notifier(self)"},{"line_number":419,"context_line":"        self.addCleanup(fake_notifier.reset)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_edf20f6f","line":416,"range":{"start_line":415,"start_character":0,"end_line":416,"end_character":58},"updated":"2019-12-09 16:42:15.000000000","message":"Any reason we aren\u0027t using the \u0027_IntegratedTestBase\u0027 class, which gives us this and much of the above and below for free? Heck, \u0027nova.tests.functional.libvirt.base.ServersTestBase\u0027 would give us a lot of the same too","commit_id":"eedd1c7233531e1ceb801e10831fb118be157286"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"922a7e4683a66897f7ec49fcfe155e8fe15ff3cb","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            \u0027nova.virt.libvirt.driver.LibvirtDriver._get_local_gb_info\u0027)).mock"},{"line_number":445,"context_line":"        get_local_gb_info.return_value \u003d {"},{"line_number":446,"context_line":"            \u0027total\u0027: lots, \u0027free\u0027: lots, \u0027used\u0027: 1}"},{"line_number":447,"context_line":"        for fn in (\u0027driver.LibvirtDriver._get_vcpu_total\u0027,"},{"line_number":448,"context_line":"                   \u0027host.Host.get_memory_mb_total\u0027):"},{"line_number":449,"context_line":"            fn_mock \u003d self.useFixture(fixtures.MockPatch("},{"line_number":450,"context_line":"                \u0027nova.virt.libvirt.\u0027 + fn)).mock"},{"line_number":451,"context_line":"            fn_mock.return_value \u003d lots"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        self.start_service(\u0027conductor\u0027)"},{"line_number":454,"context_line":"        self.start_service(\u0027scheduler\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fb8cfa7_b2225451","line":451,"range":{"start_line":447,"start_character":0,"end_line":451,"end_character":39},"updated":"2019-06-25 15:58:34.000000000","message":"https://github.com/openstack/nova/blob/d50d8b6357fce78db7f6a4f85ff6a14a529ac48e/nova/tests/functional/libvirt/test_reshape.py#L64\n\nAs suggested by gibi, did you look into using this?","commit_id":"eedd1c7233531e1ceb801e10831fb118be157286"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"922a7e4683a66897f7ec49fcfe155e8fe15ff3cb","unresolved":false,"context_lines":[{"line_number":515,"context_line":"        # Return fresh server state after evacuate"},{"line_number":516,"context_line":"        return server"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    def test_evacuate_nonshared_instancedir(self):"},{"line_number":519,"context_line":"        # If we fail during evacuate and the instance directory didn\u0027t"},{"line_number":520,"context_line":"        # previously exist on the destination, we should delete it"},{"line_number":521,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9fb8cfa7_92715047","line":518,"range":{"start_line":518,"start_character":8,"end_line":518,"end_character":43},"updated":"2019-06-25 15:58:34.000000000","message":"nit - Maybe mention that this an evacuation failure test somewhere here?","commit_id":"eedd1c7233531e1ceb801e10831fb118be157286"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e84b2afd37698eccae8a3cf44626dfd73b7e1e6e","unresolved":false,"context_lines":[{"line_number":515,"context_line":"        # Return fresh server state after evacuate"},{"line_number":516,"context_line":"        return server"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    def test_evacuate_nonshared_instancedir(self):"},{"line_number":519,"context_line":"        # If we fail during evacuate and the instance directory didn\u0027t"},{"line_number":520,"context_line":"        # previously exist on the destination, we should delete it"},{"line_number":521,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_4dafa32a","line":518,"range":{"start_line":518,"start_character":8,"end_line":518,"end_character":43},"in_reply_to":"9fb8cfa7_92715047","updated":"2019-12-09 16:42:15.000000000","message":"docstring docstring docstring","commit_id":"eedd1c7233531e1ceb801e10831fb118be157286"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"922a7e4683a66897f7ec49fcfe155e8fe15ff3cb","unresolved":false,"context_lines":[{"line_number":572,"context_line":"            # Check we\u0027re still on the failed source host"},{"line_number":573,"context_line":"            self.assertEqual(\u0027compute0\u0027, server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    def test_evacuate_shared_instancedir(self):"},{"line_number":576,"context_line":"        # If we fail during evacuate and the instance directory was already"},{"line_number":577,"context_line":"        # present on the destination, we should leave it there"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9fb8cfa7_b2a3349e","line":575,"range":{"start_line":575,"start_character":8,"end_line":575,"end_character":40},"updated":"2019-06-25 15:58:34.000000000","message":"nit - Maybe mention that this an evacuation failure test somewhere here?","commit_id":"eedd1c7233531e1ceb801e10831fb118be157286"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3b183672714bc5a42bf43b5c876b37328c15fceb","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        if not disk:"},{"line_number":140,"context_line":"            return"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        source_root_disk \u003d os.path.join(self.source_instance_path(server),"},{"line_number":143,"context_line":"                                        disk)"},{"line_number":144,"context_line":"        dest_root_disk \u003d os.path.join(self.dest_instance_path(server),"},{"line_number":145,"context_line":"                                      disk)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff570b3c_f1242e0f","line":142,"range":{"start_line":142,"start_character":8,"end_line":142,"end_character":24},"updated":"2020-05-20 16:52:33.000000000","message":"nit: if you called this src_root_disk, it would have fit on one line","commit_id":"a321f4792ac2977b1ab2d7c400cd23e5e25ab6a2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3b183672714bc5a42bf43b5c876b37328c15fceb","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            \u0027nova.virt.libvirt.imagebackend.Qcow2.create_image\u0027,"},{"line_number":186,"context_line":"            fake_create_image))"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def assert_disks_nonshared_instancedir(self, server):"},{"line_number":189,"context_line":"        name \u003d server[\u0027name\u0027]"},{"line_number":190,"context_line":"        disk \u003d SERVER_DISKS[name]"},{"line_number":191,"context_line":"        if not disk:"},{"line_number":192,"context_line":"            return"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        source_root_disk \u003d os.path.join(self.source_instance_path(server),"},{"line_number":195,"context_line":"                                        disk)"},{"line_number":196,"context_line":"        dest_root_disk \u003d os.path.join(self.dest_instance_path(server),"},{"line_number":197,"context_line":"                                      disk)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertTrue(os.path.exists(source_root_disk),"},{"line_number":200,"context_line":"                        \"Source root disk %s for server %s does not exist\" %"},{"line_number":201,"context_line":"                        (source_root_disk, name))"},{"line_number":202,"context_line":"        self.assertFalse(os.path.exists(dest_root_disk),"},{"line_number":203,"context_line":"                         \"Destination root disk %s for server %s exists\" %"},{"line_number":204,"context_line":"                         (dest_root_disk, name))"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def assert_disks_shared_instancedir(self, server):"},{"line_number":207,"context_line":"        name \u003d server[\u0027name\u0027]"},{"line_number":208,"context_line":"        disk \u003d SERVER_DISKS[name]"},{"line_number":209,"context_line":"        if not disk:"},{"line_number":210,"context_line":"            return"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        source_root_disk \u003d os.path.join("},{"line_number":213,"context_line":"            self.source_instance_path(server), disk)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        # FIXME(mdbooth): We should not have deleted a shared disk"},{"line_number":216,"context_line":"        self.assertFalse(os.path.exists(source_root_disk),"},{"line_number":217,"context_line":"                         \"Source root disk %s for server %s exists\" %"},{"line_number":218,"context_line":"                         (source_root_disk, name))"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"class _RbdTest(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff570b3c_71677e4e","line":218,"range":{"start_line":188,"start_character":0,"end_line":218,"end_character":50},"updated":"2020-05-20 16:52:33.000000000","message":"These are identical to the above. Any reason they\u0027re not in a superclass?","commit_id":"a321f4792ac2977b1ab2d7c400cd23e5e25ab6a2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3b183672714bc5a42bf43b5c876b37328c15fceb","unresolved":false,"context_lines":[{"line_number":402,"context_line":"                        \u0027source\u0027.format(disk\u003ddisk, server\u003dname))"},{"line_number":403,"context_line":"        self.assertFalse(compute1._exists(vg, lv),"},{"line_number":404,"context_line":"                         \u0027Disk \"{disk}\" of server {server} still exists on \u0027"},{"line_number":405,"context_line":"                         \u0027destination\u0027.format(disk\u003ddisk, server\u003dname))"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    # We always want to cleanup LVM disks on failure, regardless of shared"},{"line_number":408,"context_line":"    # instance directory"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff570b3c_d19daa0a","line":405,"updated":"2020-05-20 16:52:33.000000000","message":"could use f-strings in a follow-up","commit_id":"a321f4792ac2977b1ab2d7c400cd23e5e25ab6a2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3b183672714bc5a42bf43b5c876b37328c15fceb","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        fake_network.set_stub_network_methods(self)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        api_fixture \u003d self.useFixture("},{"line_number":459,"context_line":"                nova_fixtures.OSAPIFixture(api_version\u003d\u0027v2.1\u0027))"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        self.api \u003d api_fixture.admin_api"},{"line_number":462,"context_line":"        # force_down and evacuate without onSharedStorage"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff570b3c_318ce6d5","line":459,"range":{"start_line":459,"start_character":12,"end_line":459,"end_character":16},"updated":"2020-05-20 16:52:33.000000000","message":"nit","commit_id":"a321f4792ac2977b1ab2d7c400cd23e5e25ab6a2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3b183672714bc5a42bf43b5c876b37328c15fceb","unresolved":false,"context_lines":[{"line_number":615,"context_line":"                    return instance.uuid"},{"line_number":616,"context_line":"                return dest_instance_path"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"            with mock.patch(\u0027nova.virt.libvirt.utils.get_instance_path\u0027) \\"},{"line_number":619,"context_line":"                    as get_instance_path:"},{"line_number":620,"context_line":"                get_instance_path.side_effect \u003d dest_get_instance_path"},{"line_number":621,"context_line":"                server \u003d self._evacuate_with_failure(server, compute1)"},{"line_number":622,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ff570b3c_14c8b0a3","line":619,"range":{"start_line":618,"start_character":0,"end_line":619,"end_character":41},"updated":"2020-05-20 16:52:33.000000000","message":"nit: could have done this as a decorator and simply overloaded the side effect for each iteration of this loop","commit_id":"a321f4792ac2977b1ab2d7c400cd23e5e25ab6a2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3b183672714bc5a42bf43b5c876b37328c15fceb","unresolved":false,"context_lines":[{"line_number":647,"context_line":"        # Use a unique instances_path per test to allow cleanup"},{"line_number":648,"context_line":"        test_path \u003d \u0027_\u0027.join(["},{"line_number":649,"context_line":"            self.__class__.__name__, \u0027test_evacuate_shared_instancedir\u0027])"},{"line_number":650,"context_line":"        self.flags(instances_path\u003dtest_path)"},{"line_number":651,"context_line":"        self.addCleanup(shutil.rmtree, test_path)"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"        # Create test instances on compute0"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff570b3c_34c33459","line":650,"range":{"start_line":650,"start_character":8,"end_line":650,"end_character":44},"updated":"2020-05-20 16:52:33.000000000","message":"Try:\n\n  self.flags(instances_path\u003dself.useFixture(fixtures.TempDir()).path)\n\nwhich is what we do for the live migration tests [1]\n\n[1] nova/tests/functional/libvirt/test_numa_live_migration.py","commit_id":"a321f4792ac2977b1ab2d7c400cd23e5e25ab6a2"}]}
