)]}'
{"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"712891b7c37c735f42d26270011a62e35093e410","unresolved":false,"context_lines":[{"line_number":11782,"context_line":"             u\u0027type\u0027: u\u0027qcow2\u0027,"},{"line_number":11783,"context_line":"             u\u0027virt_disk_size\u0027: virt_disk_size}]"},{"line_number":11784,"context_line":""},{"line_number":11785,"context_line":"        def fake_copy_image(src, dest, **kwargs):"},{"line_number":11786,"context_line":"            if dest \u003d\u003d backfile_path:"},{"line_number":11787,"context_line":"                with open(dest, \u0027a\u0027):"},{"line_number":11788,"context_line":"                    pass"},{"line_number":11789,"context_line":"        with test.nested("},{"line_number":11790,"context_line":"            mock.patch.object(libvirt_driver.libvirt_utils, \u0027copy_image\u0027,"},{"line_number":11791,"context_line":"                              side_effect\u003dfake_copy_image),"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_16a7620d","line":11788,"range":{"start_line":11785,"start_character":0,"end_line":11788,"end_character":24},"updated":"2019-05-15 13:19:15.000000000","message":"This fake function is ensuring that the test:\n\n            if os.path.exists(base) and size \u003e self.get_disk_size(base):\n                self.resize_image(size)\n\npasses and we perform the resize, because:\n\n1. It actually creates a file (the exists test)\n2. The file is zero size (25165824 is greater than that)\n\nIt might be \u0027purer\u0027 to mock this file creation out entirely, however in doing that I think we\u0027d end up mocking so many things we\u0027d be obscuring the purpose of the test. I\u0027m personally ok with creating a blank file here.\n\nHowever, it did take me slightly too long to work out why we can rely on this executing. A comment in fake_copy_image might be nice? I\u0027m not -1 for this, but it\u0027s a strong preference.","commit_id":"992ddb321ad3c5016a6c8e00395e638a375133d5"},{"author":{"_account_id":28332,"name":"Alexandre arents","email":"alexandre.arents@corp.ovh.com","username":"aarents"},"change_message_id":"881e2f369a04896052bf608807ea8a31562c15e1","unresolved":false,"context_lines":[{"line_number":11782,"context_line":"             u\u0027type\u0027: u\u0027qcow2\u0027,"},{"line_number":11783,"context_line":"             u\u0027virt_disk_size\u0027: virt_disk_size}]"},{"line_number":11784,"context_line":""},{"line_number":11785,"context_line":"        def fake_copy_image(src, dest, **kwargs):"},{"line_number":11786,"context_line":"            if dest \u003d\u003d backfile_path:"},{"line_number":11787,"context_line":"                with open(dest, \u0027a\u0027):"},{"line_number":11788,"context_line":"                    pass"},{"line_number":11789,"context_line":"        with test.nested("},{"line_number":11790,"context_line":"            mock.patch.object(libvirt_driver.libvirt_utils, \u0027copy_image\u0027,"},{"line_number":11791,"context_line":"                              side_effect\u003dfake_copy_image),"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_c0157b41","line":11788,"range":{"start_line":11785,"start_character":0,"end_line":11788,"end_character":24},"in_reply_to":"dfbec78f_16a7620d","updated":"2019-05-15 15:19:09.000000000","message":"You caught the logic, I\u0027m adding a comment on the fake_copy_image, it will not hurts.","commit_id":"992ddb321ad3c5016a6c8e00395e638a375133d5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78195be3cd8643483cf0bd7978d7b48baa74c328","unresolved":false,"context_lines":[{"line_number":11780,"context_line":"        def fake_copy_image(src, dest, **kwargs):"},{"line_number":11781,"context_line":"            # backing file should be present and have a smaller size"},{"line_number":11782,"context_line":"            # than instance root disk in order to assert resize_image()"},{"line_number":11783,"context_line":"            if dest \u003d\u003d backfile_path:"},{"line_number":11784,"context_line":"                with open(dest, \u0027a\u0027):"},{"line_number":11785,"context_line":"                    pass"},{"line_number":11786,"context_line":"        with test.nested("},{"line_number":11787,"context_line":"            mock.patch.object(libvirt_driver.libvirt_utils, \u0027copy_image\u0027,"},{"line_number":11788,"context_line":"                              side_effect\u003dfake_copy_image),"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_1fc7e247","line":11785,"range":{"start_line":11783,"start_character":0,"end_line":11785,"end_character":24},"updated":"2019-05-22 14:52:50.000000000","message":"This sent me off on a merry chase. I was going to hard -1 this for creating a file and then leaving it around after the test completed.\n\nBut it turns out the file is created under the temp directory set up via the TempDir fixture, so it goes away on test cleanup.\n\nIt would be really nice to include a comment to this effect so that future me doesn\u0027t freak out about it.","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"},{"author":{"_account_id":28332,"name":"Alexandre arents","email":"alexandre.arents@corp.ovh.com","username":"aarents"},"change_message_id":"2319cba72afd3c15f636ea7ae4dfd0a24a6ad09d","unresolved":false,"context_lines":[{"line_number":11780,"context_line":"        def fake_copy_image(src, dest, **kwargs):"},{"line_number":11781,"context_line":"            # backing file should be present and have a smaller size"},{"line_number":11782,"context_line":"            # than instance root disk in order to assert resize_image()"},{"line_number":11783,"context_line":"            if dest \u003d\u003d backfile_path:"},{"line_number":11784,"context_line":"                with open(dest, \u0027a\u0027):"},{"line_number":11785,"context_line":"                    pass"},{"line_number":11786,"context_line":"        with test.nested("},{"line_number":11787,"context_line":"            mock.patch.object(libvirt_driver.libvirt_utils, \u0027copy_image\u0027,"},{"line_number":11788,"context_line":"                              side_effect\u003dfake_copy_image),"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_7672b913","line":11785,"range":{"start_line":11783,"start_character":0,"end_line":11785,"end_character":24},"in_reply_to":"bfb3d3c7_1fc7e247","updated":"2019-05-23 07:38:03.000000000","message":"comment added","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78195be3cd8643483cf0bd7978d7b48baa74c328","unresolved":false,"context_lines":[{"line_number":11791,"context_line":"                                  image_id\u003duuids.fake_id)),"},{"line_number":11792,"context_line":"            mock.patch.object(imagebackend.Qcow2, \u0027resize_image\u0027),"},{"line_number":11793,"context_line":"            mock.patch.object(imagebackend.Image, \u0027get_disk_size\u0027,"},{"line_number":11794,"context_line":"                              return_value \u003d disk_size),"},{"line_number":11795,"context_line":"        ) as (copy_image_mock, fetch_image_mock, resize_image_mock,"},{"line_number":11796,"context_line":"              get_disk_size_mock):"},{"line_number":11797,"context_line":"            conn._create_images_and_backing(self.context, instance,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_bf77b63a","line":11794,"range":{"start_line":11794,"start_character":42,"end_line":11794,"end_character":45},"updated":"2019-05-22 14:52:50.000000000","message":"pep8: remove spaces around \u0027\u003d\u0027\n\n(Hm, pep8 isn\u0027t failing on this, wonder why.)","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"},{"author":{"_account_id":28332,"name":"Alexandre arents","email":"alexandre.arents@corp.ovh.com","username":"aarents"},"change_message_id":"2319cba72afd3c15f636ea7ae4dfd0a24a6ad09d","unresolved":false,"context_lines":[{"line_number":11791,"context_line":"                                  image_id\u003duuids.fake_id)),"},{"line_number":11792,"context_line":"            mock.patch.object(imagebackend.Qcow2, \u0027resize_image\u0027),"},{"line_number":11793,"context_line":"            mock.patch.object(imagebackend.Image, \u0027get_disk_size\u0027,"},{"line_number":11794,"context_line":"                              return_value \u003d disk_size),"},{"line_number":11795,"context_line":"        ) as (copy_image_mock, fetch_image_mock, resize_image_mock,"},{"line_number":11796,"context_line":"              get_disk_size_mock):"},{"line_number":11797,"context_line":"            conn._create_images_and_backing(self.context, instance,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_d65cc57f","line":11794,"range":{"start_line":11794,"start_character":42,"end_line":11794,"end_character":45},"in_reply_to":"bfb3d3c7_bf77b63a","updated":"2019-05-23 07:38:03.000000000","message":"Done","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78195be3cd8643483cf0bd7978d7b48baa74c328","unresolved":false,"context_lines":[{"line_number":11821,"context_line":"                mock.call(self.context, ramdisk_path, instance.ramdisk_id,"},{"line_number":11822,"context_line":"                          trusted_certs)"},{"line_number":11823,"context_line":"            ])"},{"line_number":11824,"context_line":"            resize_image_mock.assert_has_calls(["},{"line_number":11825,"context_line":"                mock.call(virt_disk_size)"},{"line_number":11826,"context_line":"            ])"},{"line_number":11827,"context_line":""},{"line_number":11828,"context_line":"        mock_utime.assert_called()"},{"line_number":11829,"context_line":"        mock_create_cow_image.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_5f447a1b","line":11826,"range":{"start_line":11824,"start_character":13,"end_line":11826,"end_character":14},"updated":"2019-05-22 14:52:50.000000000","message":"or\n\n resize_image_mock.assert_called_once_with(virt_disk_size)","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"},{"author":{"_account_id":28332,"name":"Alexandre arents","email":"alexandre.arents@corp.ovh.com","username":"aarents"},"change_message_id":"2319cba72afd3c15f636ea7ae4dfd0a24a6ad09d","unresolved":false,"context_lines":[{"line_number":11821,"context_line":"                mock.call(self.context, ramdisk_path, instance.ramdisk_id,"},{"line_number":11822,"context_line":"                          trusted_certs)"},{"line_number":11823,"context_line":"            ])"},{"line_number":11824,"context_line":"            resize_image_mock.assert_has_calls(["},{"line_number":11825,"context_line":"                mock.call(virt_disk_size)"},{"line_number":11826,"context_line":"            ])"},{"line_number":11827,"context_line":""},{"line_number":11828,"context_line":"        mock_utime.assert_called()"},{"line_number":11829,"context_line":"        mock_create_cow_image.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_d69fe500","line":11826,"range":{"start_line":11824,"start_character":13,"end_line":11826,"end_character":14},"in_reply_to":"bfb3d3c7_5f447a1b","updated":"2019-05-23 07:38:03.000000000","message":"exact, done","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"712891b7c37c735f42d26270011a62e35093e410","unresolved":false,"context_lines":[{"line_number":8432,"context_line":"                                         dest\u003dtarget,"},{"line_number":8433,"context_line":"                                         host\u003dfallback_from_host,"},{"line_number":8434,"context_line":"                                         receive\u003dTrue)"},{"line_number":8435,"context_line":"            image.cache(fetch_func\u003dcopy_from_host, size\u003dsize,"},{"line_number":8436,"context_line":"                        filename\u003dfilename)"},{"line_number":8437,"context_line":""},{"line_number":8438,"context_line":"    def _create_images_and_backing(self, context, instance, instance_dir,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_96ed92b8","line":8435,"updated":"2019-05-15 13:19:15.000000000","message":"Ack.\n\ntrusted_certs isn\u0027t relevant here. context isn\u0027t required as we\u0027re not hitting glance.\n\nimage_id is only used by the Flat and Ploop imagebackends, which don\u0027t have a backing file, so we wouldn\u0027t call _try_fetch_image_cache from _create_and_fetch_backing anyway. However, this method is also called from _create_image, which is used in a bunch of places. My head hurts too much to go check all of them. We should definitely leave this alone! \n\nTL;DR Although it might be tempting, we should not also add the image_id argument here, and this code is good.","commit_id":"992ddb321ad3c5016a6c8e00395e638a375133d5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95e442d9c10157d141dd84ee28f3a841c12d0a99","unresolved":false,"context_lines":[{"line_number":8311,"context_line":"                # Ensure images and backing files are present."},{"line_number":8312,"context_line":"                LOG.debug(\u0027Checking to make sure images and backing files are \u0027"},{"line_number":8313,"context_line":"                          \u0027present before live migration.\u0027, instance\u003dinstance)"},{"line_number":8314,"context_line":"                self._create_images_and_backing("},{"line_number":8315,"context_line":"                    context, instance, instance_dir, disk_info,"},{"line_number":8316,"context_line":"                    fallback_from_host\u003dinstance.host)"},{"line_number":8317,"context_line":"                if (configdrive.required_by(instance) and"},{"line_number":8318,"context_line":"                        CONF.config_drive_format \u003d\u003d \u0027iso9660\u0027):"},{"line_number":8319,"context_line":"                    # NOTE(pkoniszewski): Due to a bug in libvirt iso config"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_7f9b7ec8","line":8316,"range":{"start_line":8314,"start_character":16,"end_line":8316,"end_character":53},"updated":"2019-05-22 14:51:11.000000000","message":"This is the call that starts down the path you\u0027re hitting for live migration correct?\n\nAnd in this case, fallback_from_host\u003dinstance.host where instance.host is still the source host, so we\u0027re telling the code to pull the image from the source host if we can.","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"},{"author":{"_account_id":28332,"name":"Alexandre arents","email":"alexandre.arents@corp.ovh.com","username":"aarents"},"change_message_id":"2319cba72afd3c15f636ea7ae4dfd0a24a6ad09d","unresolved":false,"context_lines":[{"line_number":8311,"context_line":"                # Ensure images and backing files are present."},{"line_number":8312,"context_line":"                LOG.debug(\u0027Checking to make sure images and backing files are \u0027"},{"line_number":8313,"context_line":"                          \u0027present before live migration.\u0027, instance\u003dinstance)"},{"line_number":8314,"context_line":"                self._create_images_and_backing("},{"line_number":8315,"context_line":"                    context, instance, instance_dir, disk_info,"},{"line_number":8316,"context_line":"                    fallback_from_host\u003dinstance.host)"},{"line_number":8317,"context_line":"                if (configdrive.required_by(instance) and"},{"line_number":8318,"context_line":"                        CONF.config_drive_format \u003d\u003d \u0027iso9660\u0027):"},{"line_number":8319,"context_line":"                    # NOTE(pkoniszewski): Due to a bug in libvirt iso config"}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_e9256eac","line":8316,"range":{"start_line":8314,"start_character":16,"end_line":8316,"end_character":53},"in_reply_to":"bfb3d3c7_7f9b7ec8","updated":"2019-05-23 07:38:03.000000000","message":"Yes, this is the path, it will pull the image from source host only if it cannot be downloaded from glance.","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95e442d9c10157d141dd84ee28f3a841c12d0a99","unresolved":false,"context_lines":[{"line_number":8418,"context_line":"                        image_id\u003dimage_id,"},{"line_number":8419,"context_line":"                        size\u003dsize,"},{"line_number":8420,"context_line":"                        trusted_certs\u003dinstance.trusted_certs)"},{"line_number":8421,"context_line":"        except exception.ImageNotFound:"},{"line_number":8422,"context_line":"            if not fallback_from_host:"},{"line_number":8423,"context_line":"                raise"},{"line_number":8424,"context_line":"            LOG.debug(\"Image %(image_id)s doesn\u0027t exist anymore \""}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_5fa8fad9","line":8421,"updated":"2019-05-22 14:51:11.000000000","message":"And then we hit this because the image is deleted in glance (or you no longer have access to it).","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"},{"author":{"_account_id":28332,"name":"Alexandre arents","email":"alexandre.arents@corp.ovh.com","username":"aarents"},"change_message_id":"2319cba72afd3c15f636ea7ae4dfd0a24a6ad09d","unresolved":false,"context_lines":[{"line_number":8418,"context_line":"                        image_id\u003dimage_id,"},{"line_number":8419,"context_line":"                        size\u003dsize,"},{"line_number":8420,"context_line":"                        trusted_certs\u003dinstance.trusted_certs)"},{"line_number":8421,"context_line":"        except exception.ImageNotFound:"},{"line_number":8422,"context_line":"            if not fallback_from_host:"},{"line_number":8423,"context_line":"                raise"},{"line_number":8424,"context_line":"            LOG.debug(\"Image %(image_id)s doesn\u0027t exist anymore \""}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_e95a4e28","line":8421,"in_reply_to":"bfb3d3c7_5fa8fad9","updated":"2019-05-23 07:38:03.000000000","message":"that\u0027s it","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95e442d9c10157d141dd84ee28f3a841c12d0a99","unresolved":false,"context_lines":[{"line_number":8497,"context_line":"                                size\u003dswap_mb * units.Mi,"},{"line_number":8498,"context_line":"                                swap_mb\u003dswap_mb)"},{"line_number":8499,"context_line":"                else:"},{"line_number":8500,"context_line":"                    self._try_fetch_image_cache(disk,"},{"line_number":8501,"context_line":"                                                libvirt_utils.fetch_image,"},{"line_number":8502,"context_line":"                                                context, cache_name,"},{"line_number":8503,"context_line":"                                                instance.image_ref,"},{"line_number":8504,"context_line":"                                                instance,"},{"line_number":8505,"context_line":"                                                info[\u0027virt_disk_size\u0027],"},{"line_number":8506,"context_line":"                                                fallback_from_host)"},{"line_number":8507,"context_line":""},{"line_number":8508,"context_line":"        # if disk has kernel and ramdisk, just download"},{"line_number":8509,"context_line":"        # following normal way."}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_9f9e72b6","line":8506,"range":{"start_line":8500,"start_character":20,"end_line":8506,"end_character":67},"updated":"2019-05-22 14:51:11.000000000","message":"And then you get here, right?","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"},{"author":{"_account_id":28332,"name":"Alexandre arents","email":"alexandre.arents@corp.ovh.com","username":"aarents"},"change_message_id":"2319cba72afd3c15f636ea7ae4dfd0a24a6ad09d","unresolved":false,"context_lines":[{"line_number":8497,"context_line":"                                size\u003dswap_mb * units.Mi,"},{"line_number":8498,"context_line":"                                swap_mb\u003dswap_mb)"},{"line_number":8499,"context_line":"                else:"},{"line_number":8500,"context_line":"                    self._try_fetch_image_cache(disk,"},{"line_number":8501,"context_line":"                                                libvirt_utils.fetch_image,"},{"line_number":8502,"context_line":"                                                context, cache_name,"},{"line_number":8503,"context_line":"                                                instance.image_ref,"},{"line_number":8504,"context_line":"                                                instance,"},{"line_number":8505,"context_line":"                                                info[\u0027virt_disk_size\u0027],"},{"line_number":8506,"context_line":"                                                fallback_from_host)"},{"line_number":8507,"context_line":""},{"line_number":8508,"context_line":"        # if disk has kernel and ramdisk, just download"},{"line_number":8509,"context_line":"        # following normal way."}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_893cf2c8","line":8506,"range":{"start_line":8500,"start_character":20,"end_line":8506,"end_character":67},"in_reply_to":"bfb3d3c7_9f1752a4","updated":"2019-05-23 07:38:03.000000000","message":"Yes","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78195be3cd8643483cf0bd7978d7b48baa74c328","unresolved":false,"context_lines":[{"line_number":8497,"context_line":"                                size\u003dswap_mb * units.Mi,"},{"line_number":8498,"context_line":"                                swap_mb\u003dswap_mb)"},{"line_number":8499,"context_line":"                else:"},{"line_number":8500,"context_line":"                    self._try_fetch_image_cache(disk,"},{"line_number":8501,"context_line":"                                                libvirt_utils.fetch_image,"},{"line_number":8502,"context_line":"                                                context, cache_name,"},{"line_number":8503,"context_line":"                                                instance.image_ref,"},{"line_number":8504,"context_line":"                                                instance,"},{"line_number":8505,"context_line":"                                                info[\u0027virt_disk_size\u0027],"},{"line_number":8506,"context_line":"                                                fallback_from_host)"},{"line_number":8507,"context_line":""},{"line_number":8508,"context_line":"        # if disk has kernel and ramdisk, just download"},{"line_number":8509,"context_line":"        # following normal way."}],"source_content_type":"text/x-python","patch_set":3,"id":"bfb3d3c7_9f1752a4","line":8506,"range":{"start_line":8500,"start_character":20,"end_line":8506,"end_character":67},"in_reply_to":"bfb3d3c7_9f9e72b6","updated":"2019-05-22 14:52:50.000000000","message":"That was my assessment, yes.","commit_id":"5f92843657397350071251ce7bb2cb83c06b70a1"}]}
