)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"cfbab4b1eb5ac70b418dfa5d81296bd6411fc5e1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"anyway, we know it exists."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"As a bonus, this removes the last user of check_image_exists outside"},{"line_number":17,"context_line":"imagebackend. This api is problematic as it almost always (including"},{"line_number":18,"context_line":"this case) points to a race condition. The remaining callers can be"},{"line_number":19,"context_line":"dealt with within a single module."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: Icb926e64151048c6ce8353de604417d5d79858e4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a8ffd7b_1667d5b7","line":18,"range":{"start_line":17,"start_character":41,"end_line":18,"end_character":37},"updated":"2015-11-27 16:18:52.000000000","message":"It would be really good if we had a bug for this, just for tracking purposes.","commit_id":"5c1e4329140b5de988df0abec580d5efa2d78519"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"702acfbe9dce4969f6459ffda6e8b4a48ca3fadf","unresolved":false,"context_lines":[{"line_number":14,"context_line":"anyway, we know it exists."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"As a bonus, this removes the last user of check_image_exists outside"},{"line_number":17,"context_line":"imagebackend. This api is problematic as it almost always (including"},{"line_number":18,"context_line":"this case) points to a race condition. The remaining callers can be"},{"line_number":19,"context_line":"dealt with within a single module."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: Icb926e64151048c6ce8353de604417d5d79858e4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a8ffd7b_79dc1246","line":18,"range":{"start_line":17,"start_character":41,"end_line":18,"end_character":37},"in_reply_to":"9a8ffd7b_1667d5b7","updated":"2015-11-27 16:36:59.000000000","message":"I thought about this. The potential bug here is that the instance is deleted during spawn. However, this is a whole class of potential bugs. For all I know (I haven\u0027t looked) this is handled higher up. If not, there are going to be so many of these just in this section of code alone that filing a bug for this one would just be noise. It would just be one of those bugs which sat being ignored for 2 years until some diligent soul had to wade through to find out if it was still relevant, which in this case would be reasonably complex.\n\nTL;DR I don\u0027t think it would improve anybody\u0027s day to file a bug for this.","commit_id":"5c1e4329140b5de988df0abec580d5efa2d78519"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"eb32cb95369ec2e3692c78acfcc7a589caa64567","unresolved":false,"context_lines":[{"line_number":14,"context_line":"anyway, we know it exists."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"As a bonus, this removes the last user of check_image_exists outside"},{"line_number":17,"context_line":"imagebackend. This api is problematic as it almost always (including"},{"line_number":18,"context_line":"this case) points to a race condition. The remaining callers can be"},{"line_number":19,"context_line":"dealt with within a single module."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: Icb926e64151048c6ce8353de604417d5d79858e4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a8ffd7b_d9665e50","line":18,"range":{"start_line":17,"start_character":41,"end_line":18,"end_character":37},"in_reply_to":"9a8ffd7b_79dc1246","updated":"2015-11-27 16:44:43.000000000","message":"OK fair enough","commit_id":"5c1e4329140b5de988df0abec580d5efa2d78519"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"f2636f023cbe11a362afb6c6a2e6fb999c37f145","unresolved":false,"context_lines":[{"line_number":12,"context_line":"and pass the existing image object in directly. We modify _inject_data"},{"line_number":13,"context_line":"to remove the existence check as, bar a delete race which was present"},{"line_number":14,"context_line":"anyway, we know it exists."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Icb926e64151048c6ce8353de604417d5d79858e4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"dab17558_69b27b95","line":15,"updated":"2016-05-17 19:06:46.000000000","message":"Should the blueprint be mentioned here?","commit_id":"eb4229506c46c29e0a99a1dbb2019cf0ae77948c"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"9e6a0bdf2baf44ce03fa7ef073761481825cea72","unresolved":false,"context_lines":[{"line_number":12,"context_line":"and pass the existing image object in directly. We modify _inject_data"},{"line_number":13,"context_line":"to remove the existence check as, bar a delete race which was present"},{"line_number":14,"context_line":"anyway, we know it exists."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Icb926e64151048c6ce8353de604417d5d79858e4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"bab6814e_ebdc8a1a","line":15,"in_reply_to":"dab17558_69b27b95","updated":"2016-05-18 08:33:24.000000000","message":"It was at one point, but I took it out again because this isn\u0027t really part of the bp. It\u0027s a dependency of the bp, but not part of it, if you see what I mean.","commit_id":"eb4229506c46c29e0a99a1dbb2019cf0ae77948c"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"cfbab4b1eb5ac70b418dfa5d81296bd6411fc5e1","unresolved":false,"context_lines":[{"line_number":2923,"context_line":"                                        root_fname, disk_images[\u0027image_id\u0027],"},{"line_number":2924,"context_line":"                                        instance, size, fallback_from_host)"},{"line_number":2925,"context_line":""},{"line_number":2926,"context_line":"            # File injection only if needed"},{"line_number":2927,"context_line":"            if inject_files and CONF.libvirt.inject_partition !\u003d -2:"},{"line_number":2928,"context_line":"                self._inject_data(backend, instance, network_info, admin_pass,"},{"line_number":2929,"context_line":"                                  files)"},{"line_number":2930,"context_line":""},{"line_number":2931,"context_line":"        # Lookup the filesystem type if required"},{"line_number":2932,"context_line":"        os_type_with_default \u003d disk.get_fs_type_for_os_type(instance.os_type)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_9643c512","line":2929,"range":{"start_line":2926,"start_character":11,"end_line":2929,"end_character":40},"updated":"2015-11-27 16:18:52.000000000","message":"I think we lost the check for config drive now, in which case we don\u0027t want to do injection right?","commit_id":"5c1e4329140b5de988df0abec580d5efa2d78519"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"702acfbe9dce4969f6459ffda6e8b4a48ca3fadf","unresolved":false,"context_lines":[{"line_number":2923,"context_line":"                                        root_fname, disk_images[\u0027image_id\u0027],"},{"line_number":2924,"context_line":"                                        instance, size, fallback_from_host)"},{"line_number":2925,"context_line":""},{"line_number":2926,"context_line":"            # File injection only if needed"},{"line_number":2927,"context_line":"            if inject_files and CONF.libvirt.inject_partition !\u003d -2:"},{"line_number":2928,"context_line":"                self._inject_data(backend, instance, network_info, admin_pass,"},{"line_number":2929,"context_line":"                                  files)"},{"line_number":2930,"context_line":""},{"line_number":2931,"context_line":"        # Lookup the filesystem type if required"},{"line_number":2932,"context_line":"        os_type_with_default \u003d disk.get_fs_type_for_os_type(instance.os_type)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_d92c1e9b","line":2929,"range":{"start_line":2926,"start_character":11,"end_line":2929,"end_character":40},"in_reply_to":"9a8ffd7b_9643c512","updated":"2015-11-27 16:36:59.000000000","message":"D\u0027oh! Think I\u0027ll move the config drive check up the top.","commit_id":"5c1e4329140b5de988df0abec580d5efa2d78519"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"706ad312b9941764d6c4508f589d3c8e6bfb74d8","unresolved":false,"context_lines":[{"line_number":2794,"context_line":"        Helper used for injecting data in a disk image file system."},{"line_number":2795,"context_line":""},{"line_number":2796,"context_line":"        Keyword arguments:"},{"line_number":2797,"context_line":"          instance -- a dict that refers instance specifications"},{"line_number":2798,"context_line":"          network_info -- a dict that refers network speficications"},{"line_number":2799,"context_line":"          admin_pass -- a string used to set an admin password"},{"line_number":2800,"context_line":"          files -- a list of files needs to be injected"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_3fa10aaa","line":2797,"updated":"2015-12-01 15:50:02.000000000","message":"instance is now injection_image","commit_id":"d0340d59de30d52bd1f381a3ea34b20477f74152"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"ded6da2b2a6c038556a0ffd51c6c690c7d907182","unresolved":false,"context_lines":[{"line_number":2794,"context_line":"        Helper used for injecting data in a disk image file system."},{"line_number":2795,"context_line":""},{"line_number":2796,"context_line":"        Keyword arguments:"},{"line_number":2797,"context_line":"          instance -- a dict that refers instance specifications"},{"line_number":2798,"context_line":"          network_info -- a dict that refers network speficications"},{"line_number":2799,"context_line":"          admin_pass -- a string used to set an admin password"},{"line_number":2800,"context_line":"          files -- a list of files needs to be injected"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_74ec6b29","line":2797,"in_reply_to":"9a8ffd7b_3fa10aaa","updated":"2015-12-02 09:47:44.000000000","message":"Good catch!","commit_id":"d0340d59de30d52bd1f381a3ea34b20477f74152"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"706ad312b9941764d6c4508f589d3c8e6bfb74d8","unresolved":false,"context_lines":[{"line_number":2798,"context_line":"          network_info -- a dict that refers network speficications"},{"line_number":2799,"context_line":"          admin_pass -- a string used to set an admin password"},{"line_number":2800,"context_line":"          files -- a list of files needs to be injected"},{"line_number":2801,"context_line":"          suffix -- a string used as an image name suffix"},{"line_number":2802,"context_line":"        \"\"\""},{"line_number":2803,"context_line":"        # Handles the partition need to be used."},{"line_number":2804,"context_line":"        target_partition \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_bfce5a81","line":2801,"updated":"2015-12-01 15:50:02.000000000","message":"you should remove suffix here","commit_id":"d0340d59de30d52bd1f381a3ea34b20477f74152"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"ded6da2b2a6c038556a0ffd51c6c690c7d907182","unresolved":false,"context_lines":[{"line_number":2798,"context_line":"          network_info -- a dict that refers network speficications"},{"line_number":2799,"context_line":"          admin_pass -- a string used to set an admin password"},{"line_number":2800,"context_line":"          files -- a list of files needs to be injected"},{"line_number":2801,"context_line":"          suffix -- a string used as an image name suffix"},{"line_number":2802,"context_line":"        \"\"\""},{"line_number":2803,"context_line":"        # Handles the partition need to be used."},{"line_number":2804,"context_line":"        target_partition \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_34f6e3f9","line":2801,"in_reply_to":"9a8ffd7b_bfce5a81","updated":"2015-12-02 09:47:44.000000000","message":"Ditto.","commit_id":"d0340d59de30d52bd1f381a3ea34b20477f74152"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"706ad312b9941764d6c4508f589d3c8e6bfb74d8","unresolved":false,"context_lines":[{"line_number":2898,"context_line":"                                     project_id\u003dinstance.project_id)"},{"line_number":2899,"context_line":""},{"line_number":2900,"context_line":"        inst_type \u003d instance.get_flavor()"},{"line_number":2901,"context_line":""},{"line_number":2902,"context_line":"        # Config drive"},{"line_number":2903,"context_line":"        config_drive_image \u003d None"},{"line_number":2904,"context_line":"        if configdrive.required_by(instance):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_9f711647","line":2901,"updated":"2015-12-01 15:50:02.000000000","message":"can you please split this into a sub method. then that can be tested","commit_id":"d0340d59de30d52bd1f381a3ea34b20477f74152"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"ded6da2b2a6c038556a0ffd51c6c690c7d907182","unresolved":false,"context_lines":[{"line_number":2898,"context_line":"                                     project_id\u003dinstance.project_id)"},{"line_number":2899,"context_line":""},{"line_number":2900,"context_line":"        inst_type \u003d instance.get_flavor()"},{"line_number":2901,"context_line":""},{"line_number":2902,"context_line":"        # Config drive"},{"line_number":2903,"context_line":"        config_drive_image \u003d None"},{"line_number":2904,"context_line":"        if configdrive.required_by(instance):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_94622fd7","line":2901,"in_reply_to":"9a8ffd7b_9f711647","updated":"2015-12-02 09:47:44.000000000","message":"Agree in principal, but it\u0027s out of scope for this change. I don\u0027t want to restructure the code without a plan for where it\u0027s going (which I don\u0027t have, and have no intention of creating any time soon ;)). This is a tactical fix.","commit_id":"d0340d59de30d52bd1f381a3ea34b20477f74152"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"ab37b1893e151b140cb70e62d1557d5a46a3f05a","unresolved":false,"context_lines":[{"line_number":3248,"context_line":""},{"line_number":3249,"context_line":"        # File injection only if needed"},{"line_number":3250,"context_line":"        elif inject_files and CONF.libvirt.inject_partition !\u003d -2:"},{"line_number":3251,"context_line":"            if booted_from_volume:"},{"line_number":3252,"context_line":"                LOG.warn(_LW(\u0027File injection into a boot from volume \u0027"},{"line_number":3253,"context_line":"                             \u0027instance is not supported\u0027), instance\u003dinstance)"},{"line_number":3254,"context_line":"            self._inject_data("}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_97b078f6","side":"PARENT","line":3251,"range":{"start_line":3251,"start_character":12,"end_line":3251,"end_character":33},"updated":"2016-02-15 13:41:47.000000000","message":"How come this check is not needed anymore, even though it just logs a warning? Actually by removing the check in _inject_data, might attempt to do this with a volume which is set up to fail probably with worse debugging info than this warning message - so we should probably keep this?","commit_id":"7ba2f294635683fe7db982f251a8238b2178f76b"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"606114c4a770a07581ffc561b05d4bc32c1bfe4d","unresolved":false,"context_lines":[{"line_number":3248,"context_line":""},{"line_number":3249,"context_line":"        # File injection only if needed"},{"line_number":3250,"context_line":"        elif inject_files and CONF.libvirt.inject_partition !\u003d -2:"},{"line_number":3251,"context_line":"            if booted_from_volume:"},{"line_number":3252,"context_line":"                LOG.warn(_LW(\u0027File injection into a boot from volume \u0027"},{"line_number":3253,"context_line":"                             \u0027instance is not supported\u0027), instance\u003dinstance)"},{"line_number":3254,"context_line":"            self._inject_data("}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_df1f4d06","side":"PARENT","line":3251,"range":{"start_line":3251,"start_character":12,"end_line":3251,"end_character":33},"in_reply_to":"dae33548_97b078f6","updated":"2016-02-17 10:00:20.000000000","message":"Yes, you\u0027re right. Basically what we\u0027re losing is: if the user specified injection, but injection is not possible because the instance is boot from volume, they no longer get a warning about that. I\u0027ll add it back.\n\nThis wouldn\u0027t have been an error previously as you note, because the second image check would catch the lack of root disk. The code above already has a \u0027booted_from_volume\u0027 guard, so it should be easy to shuffle so that we get a log message, but still don\u0027t attempt to inject into a disk which doesn\u0027t exist.","commit_id":"7ba2f294635683fe7db982f251a8238b2178f76b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"875c276414e97bc4cdee37a11ae0b8aed2340ec0","unresolved":false,"context_lines":[{"line_number":2983,"context_line":"                # we no longer need the local copy"},{"line_number":2984,"context_line":"                if CONF.libvirt.images_type \u003d\u003d \u0027rbd\u0027:"},{"line_number":2985,"context_line":"                    os.unlink(configdrive_path)"},{"line_number":2986,"context_line":""},{"line_number":2987,"context_line":"        need_inject \u003d (config_drive_image is None and inject_files and"},{"line_number":2988,"context_line":"                       CONF.libvirt.inject_partition !\u003d -2)"},{"line_number":2989,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"dab17558_20d8267f","line":2986,"updated":"2016-05-13 13:58:37.000000000","message":"Kinda seems like this moved block from here up could/should be a separate method. This one is loong.","commit_id":"6794af4ecb034e8bc773240e255aa82bb839497a"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"c9363f93380c89dacf0ed72955e1608ce0cba88b","unresolved":false,"context_lines":[{"line_number":2843,"context_line":"        Helper used for injecting data in a disk image file system."},{"line_number":2844,"context_line":""},{"line_number":2845,"context_line":"        Keyword arguments:"},{"line_number":2846,"context_line":"          injection_image -- An Image object we\u0027re injecting into"},{"line_number":2847,"context_line":"          instance -- a dict that refers instance specifications"},{"line_number":2848,"context_line":"          network_info -- a dict that refers network speficications"},{"line_number":2849,"context_line":"          admin_pass -- a string used to set an admin password"}],"source_content_type":"text/x-python","patch_set":23,"id":"dab17558_bc6383dc","line":2846,"updated":"2016-05-14 10:40:01.000000000","message":"Image is ambiguous name, since nova.virt.image.model.Image exists as well and is used here in driver.py","commit_id":"4b9fba470d5a1979aebd9ae80f688c48f9d18c90"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"376d2a296b5d4652705a61d19d7dbf2b3f0981f3","unresolved":false,"context_lines":[{"line_number":2843,"context_line":"        Helper used for injecting data in a disk image file system."},{"line_number":2844,"context_line":""},{"line_number":2845,"context_line":"        Keyword arguments:"},{"line_number":2846,"context_line":"          injection_image -- An Image object we\u0027re injecting into"},{"line_number":2847,"context_line":"          instance -- a dict that refers instance specifications"},{"line_number":2848,"context_line":"          network_info -- a dict that refers network speficications"},{"line_number":2849,"context_line":"          admin_pass -- a string used to set an admin password"}],"source_content_type":"text/x-python","patch_set":23,"id":"dab17558_f8db377a","line":2846,"in_reply_to":"dab17558_b5289a34","updated":"2016-05-16 10:10:20.000000000","message":"I mean to clarify the name in the comment only. I.e. \u0027An imagebackend.Image object...\u0027 instead of \u0027An Image object...\u0027\n\nI like Disk name too. It relates neither to Glance\u0027s images, nor to Cinder\u0027s volumes, but still relates to a thing we attach to a virtual computer as a hard drive.","commit_id":"4b9fba470d5a1979aebd9ae80f688c48f9d18c90"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"a413bcfb317c9d7b78395653942fe5264d161ad8","unresolved":false,"context_lines":[{"line_number":2843,"context_line":"        Helper used for injecting data in a disk image file system."},{"line_number":2844,"context_line":""},{"line_number":2845,"context_line":"        Keyword arguments:"},{"line_number":2846,"context_line":"          injection_image -- An Image object we\u0027re injecting into"},{"line_number":2847,"context_line":"          instance -- a dict that refers instance specifications"},{"line_number":2848,"context_line":"          network_info -- a dict that refers network speficications"},{"line_number":2849,"context_line":"          admin_pass -- a string used to set an admin password"}],"source_content_type":"text/x-python","patch_set":23,"id":"dab17558_b5289a34","line":2846,"in_reply_to":"dab17558_bc6383dc","updated":"2016-05-16 09:57:58.000000000","message":"This is one of my bugbears, too. I\u0027ll probably leave it alone in this patch, though, because it\u0027s the existing name of the variable: I\u0027m just now passing it in rather than recreating it. It\u0027s ripe for a cleanup if we get round to Image renaming, though.\n\nIncidentally I favour \u0027Disk\u0027 as the new name of the Image object, as I think I\u0027ve said elsewhere. I believe Paul Carlton is in fact using that in the libvirt storage pools patches.","commit_id":"4b9fba470d5a1979aebd9ae80f688c48f9d18c90"}]}
