)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84589be4219d1d655c4106e0347c700f80a6d9b9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"that attach/detach root volume is supported. It will be checked"},{"line_number":11,"context_line":"in compute/api.py when handling root volume when attaching/detaching."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch also makes changes to the start and unshelve API, so that"},{"line_number":14,"context_line":"BFV instances without valid root volume will not be able to"},{"line_number":15,"context_line":"start/restore/confirm_resize/revert_resize/unshelve."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implements: blueprint detach-boot-volume"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"3f79a3b5_de8cd5df","line":15,"range":{"start_line":13,"start_character":0,"end_line":15,"end_character":52},"updated":"2018-12-18 16:56:39.000000000","message":"Can we split the nova-compute and nova-api changes apart please? I would like to work from the bottom up, like you\u0027re doing, but I don\u0027t see why we need to munge these changes into a single large and hard to review patch.","commit_id":"2904de300a206c7df3b22c39928758bcaa0f8db6"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"3f60cd81d91b020949e9cb53c0237279e94a3354","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-02-25 10:03:24 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Bump compute service to indicate attach/detach root volume is supported"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch bumps compute service version to 38 to indicate"},{"line_number":10,"context_line":"that attach/detach root volume is supported. It will be checked"},{"line_number":11,"context_line":"in compute/api.py when handling root volume when attaching/detaching."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"9fdfeff1_f7ea1d0c","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":0},"updated":"2019-02-25 02:16:38.000000000","message":"minor: I may wrong. seems this patch make it possible to do that instead of indicating?","commit_id":"ed64e9749c3c1fcbc7bc6cda681002e521227228"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4549ee7a2c67fbc324c092b2d4cd21c00baac6c3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kevin_Zheng \u003czhengzhenyu@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-02-25 10:06:43 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Bump compute service to indicate attach/detach root volume is supported"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch bumps compute service version to 38 to indicate"},{"line_number":10,"context_line":"that attach/detach root volume is supported. It will be checked"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"9fdfeff1_61e97de1","line":7,"updated":"2019-02-25 17:49:09.000000000","message":"This patch does much more than just bump the compute service version - so I would re-title this as \"Add compute service support for attach/detach root volume\".\n\nAnd then explain what the changes are and why the are needed in whatever scenario (stopped instance vs shelved offloaded).","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d1e8abcd02bb6c2f19f35e21b600d6daf9bf67e5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kevin_Zheng \u003czhengzhenyu@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-02-25 10:06:43 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Bump compute service to indicate attach/detach root volume is supported"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch bumps compute service version to 38 to indicate"},{"line_number":10,"context_line":"that attach/detach root volume is supported. It will be checked"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"9fdfeff1_e09a3e11","line":7,"in_reply_to":"9fdfeff1_61e97de1","updated":"2019-02-26 03:17:50.000000000","message":"Done","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"}],"nova/compute/manager.py":[{"author":{"_account_id":13578,"name":"Yang Ye","email":"yangye2@huawei.com","username":"YangYe"},"change_message_id":"65dcb9a35340dddbe74d61539ff23aee199f0b2d","unresolved":false,"context_lines":[{"line_number":5429,"context_line":"            phase\u003dfields.NotificationPhase.START,"},{"line_number":5430,"context_line":"            volume_id\u003dbdm.volume_id)"},{"line_number":5431,"context_line":"        try:"},{"line_number":5432,"context_line":"            bdm.attach(context, instance, self.volume_api, self.driver,"},{"line_number":5433,"context_line":"                       do_driver_attach\u003dTrue)"},{"line_number":5434,"context_line":"        except Exception as e:"},{"line_number":5435,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":5436,"context_line":"                LOG.exception(\"Failed to attach %(volume_id)s \""}],"source_content_type":"text/x-python","patch_set":21,"id":"1f769fc5_f6aa9ed0","line":5433,"range":{"start_line":5432,"start_character":0,"end_line":5433,"end_character":45},"updated":"2018-12-22 02:23:01.000000000","message":"need to update image metadata when a root volume is attached","commit_id":"2904de300a206c7df3b22c39928758bcaa0f8db6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4549ee7a2c67fbc324c092b2d4cd21c00baac6c3","unresolved":false,"context_lines":[{"line_number":5464,"context_line":"            # records, and update the device name of the existing"},{"line_number":5465,"context_line":"            # bdm record."},{"line_number":5466,"context_line":"            if existing_bdm:"},{"line_number":5467,"context_line":"                device_name \u003d self._get_device_name_for_instance("},{"line_number":5468,"context_line":"                    instance, bdms, existing_bdm)"},{"line_number":5469,"context_line":"                values \u003d {\u0027device_name\u0027: device_name}"},{"line_number":5470,"context_line":"                existing_bdm.update(values)"},{"line_number":5471,"context_line":"                existing_bdm.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_a1c8c554","line":5468,"range":{"start_line":5467,"start_character":16,"end_line":5468,"end_character":49},"updated":"2019-02-25 17:49:09.000000000","message":"I think this is probably wrong - this means the device name could go from like vda to vdc or something, right? For example, if I boot from volume with a single volume and it\u0027s device is vda, then I attach another volume and that has device vdb, now I detach the root volume and attach a new root volume, the device would be vdc and now there is no attached volume with vda, which seems weird. I\u0027m not sure why we need to reset the device_name on detaching/attaching a root volume, seems it should never change. And _get_device_name_for_instance is counting existing attached volumes (bdms) to figure out the next device number. I think the libvirt driver also uses the disk_bus and/or device_type, which won\u0027t change when attaching a root volume.\n\nHell, we could have even just used instance.root_device_name too right?\n\nAnyway, I probably just wouldn\u0027t reset it and we can avoid this complication.","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d1e8abcd02bb6c2f19f35e21b600d6daf9bf67e5","unresolved":false,"context_lines":[{"line_number":5464,"context_line":"            # records, and update the device name of the existing"},{"line_number":5465,"context_line":"            # bdm record."},{"line_number":5466,"context_line":"            if existing_bdm:"},{"line_number":5467,"context_line":"                device_name \u003d self._get_device_name_for_instance("},{"line_number":5468,"context_line":"                    instance, bdms, existing_bdm)"},{"line_number":5469,"context_line":"                values \u003d {\u0027device_name\u0027: device_name}"},{"line_number":5470,"context_line":"                existing_bdm.update(values)"},{"line_number":5471,"context_line":"                existing_bdm.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_2063661c","line":5468,"range":{"start_line":5467,"start_character":16,"end_line":5468,"end_character":49},"in_reply_to":"9fdfeff1_171a2f7c","updated":"2019-02-26 03:17:50.000000000","message":"So this method is actually only modified for stopped case, if it is out of the scope of this BP, I will redo the change and send out a ML about it.","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"06db2531200b9235ab53f7e6a91dd3b2cb4b5346","unresolved":false,"context_lines":[{"line_number":5464,"context_line":"            # records, and update the device name of the existing"},{"line_number":5465,"context_line":"            # bdm record."},{"line_number":5466,"context_line":"            if existing_bdm:"},{"line_number":5467,"context_line":"                device_name \u003d self._get_device_name_for_instance("},{"line_number":5468,"context_line":"                    instance, bdms, existing_bdm)"},{"line_number":5469,"context_line":"                values \u003d {\u0027device_name\u0027: device_name}"},{"line_number":5470,"context_line":"                existing_bdm.update(values)"},{"line_number":5471,"context_line":"                existing_bdm.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_171a2f7c","line":5468,"range":{"start_line":5467,"start_character":16,"end_line":5468,"end_character":49},"in_reply_to":"9fdfeff1_776ffb27","updated":"2019-02-25 19:24:05.000000000","message":"This also came up in the spec review but apparently I talked myself out of it being an issue:\n\nhttps://review.openstack.org/#/c/600628/7/specs/stein/approved/detach-boot-volume.rst@127","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ee6d0c5ccf78d39fd7b338a3d301ee02a730cbba","unresolved":false,"context_lines":[{"line_number":5464,"context_line":"            # records, and update the device name of the existing"},{"line_number":5465,"context_line":"            # bdm record."},{"line_number":5466,"context_line":"            if existing_bdm:"},{"line_number":5467,"context_line":"                device_name \u003d self._get_device_name_for_instance("},{"line_number":5468,"context_line":"                    instance, bdms, existing_bdm)"},{"line_number":5469,"context_line":"                values \u003d {\u0027device_name\u0027: device_name}"},{"line_number":5470,"context_line":"                existing_bdm.update(values)"},{"line_number":5471,"context_line":"                existing_bdm.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_fcb670f9","line":5468,"range":{"start_line":5467,"start_character":16,"end_line":5468,"end_character":49},"in_reply_to":"9fdfeff1_a1c8c554","updated":"2019-02-25 18:20:51.000000000","message":"we retirve the image meta for a bdm here\nhttps://github.com/openstack/nova/blob/5a09c81af3b438ecbcf27fa653095ff55abb3ed4/nova/compute/api.py#L1057\n\nby invokeing\n https://github.com/openstack/nova/blob/af78b13c24d4abf393d17ac57e9135204ef12b73/nova/utils.py#L928 \n\nso if the new root volume was created from an image with a different hw_disk_bus the name could change\n\nbecause the image metadata can change attaching a\nvolume created from a different image could also invalidate\nthe current host as a viable host for the instance by\nchanging cpu pinning policies or other factors.\n\nin the shelve unshelve case it should be fine but it may not be ok when the instance is mearly powered off.","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95d123fe2d94b9f256319643e0add7a13d3bf218","unresolved":false,"context_lines":[{"line_number":5464,"context_line":"            # records, and update the device name of the existing"},{"line_number":5465,"context_line":"            # bdm record."},{"line_number":5466,"context_line":"            if existing_bdm:"},{"line_number":5467,"context_line":"                device_name \u003d self._get_device_name_for_instance("},{"line_number":5468,"context_line":"                    instance, bdms, existing_bdm)"},{"line_number":5469,"context_line":"                values \u003d {\u0027device_name\u0027: device_name}"},{"line_number":5470,"context_line":"                existing_bdm.update(values)"},{"line_number":5471,"context_line":"                existing_bdm.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_776ffb27","line":5468,"range":{"start_line":5467,"start_character":16,"end_line":5468,"end_character":49},"in_reply_to":"9fdfeff1_dc092c84","updated":"2019-02-25 19:13:10.000000000","message":"Yeah, supporting stopped instances was brought up during the stein spec review by s10 and I didn\u0027t think about the image changing in the root volume which would invalidate the current compute host. So for stopped instances, we can either:\n\n1. Not allow it like in the original spec\n2. Allow it but only if the new root volume does not change the original image_id, but I\u0027m not sure how to calculate that because (1) instance.image_ref is blank for volume-backed servers and (2) the RequestSpec.image does not have the \u0027id\u0027 set for volume-backed servers...so we can\u0027t really know. Which probably just leaves us with option 1 and not support it.\n\nAs for unshelve, we go back through the scheduler but there is nothing in the attach root volume or unshelve flow that is updating the RequestSpec.image with the image metadata from the new root volume, which as you say could mean we don\u0027t honor the image meta when unshelving for things like CPU pinning.","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8ecb497af961446d86f368d3931274e91da01008","unresolved":false,"context_lines":[{"line_number":5464,"context_line":"            # records, and update the device name of the existing"},{"line_number":5465,"context_line":"            # bdm record."},{"line_number":5466,"context_line":"            if existing_bdm:"},{"line_number":5467,"context_line":"                device_name \u003d self._get_device_name_for_instance("},{"line_number":5468,"context_line":"                    instance, bdms, existing_bdm)"},{"line_number":5469,"context_line":"                values \u003d {\u0027device_name\u0027: device_name}"},{"line_number":5470,"context_line":"                existing_bdm.update(values)"},{"line_number":5471,"context_line":"                existing_bdm.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_dc092c84","line":5468,"range":{"start_line":5467,"start_character":16,"end_line":5468,"end_character":49},"in_reply_to":"9fdfeff1_fcb670f9","updated":"2019-02-25 18:31:36.000000000","message":"looking at the propsoed changes section\nof the mitka spec originally this was only going to work for\ninstance that are shelve_offloaded\nhttp://specs.openstack.org/openstack/nova-specs/specs/mitaka/approved/detach-boot-volume.html#proposed-change\nbut the stein spec allows instances that are powered off\nhttp://specs.openstack.org/openstack/nova-specs/specs/stein/approved/detach-boot-volume.html#proposed-change\n\nwhen the vm is powered off if you attach a new root volume that was created form a different image or that has different image metadta it may invalidate teh current host that is selected.\n\nim not sure how to guard agaisnt that other then not allowing detach of root volumes form powered off instnaces.","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4549ee7a2c67fbc324c092b2d4cd21c00baac6c3","unresolved":false,"context_lines":[{"line_number":5506,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":5507,"context_line":"                    # NOTE(Kevin Zheng) If we are attaching the root volume,"},{"line_number":5508,"context_line":"                    # we will only reset the volume specific fields and keep"},{"line_number":5509,"context_line":"                    # the DBM record."},{"line_number":5510,"context_line":"                    if bdm.is_root:"},{"line_number":5511,"context_line":"                        bdm.reset_fields_for_root_bdm()"},{"line_number":5512,"context_line":"                        bdm.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_61489db2","line":5509,"range":{"start_line":5509,"start_character":26,"end_line":5509,"end_character":29},"updated":"2019-02-25 17:49:09.000000000","message":"BDM","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d1e8abcd02bb6c2f19f35e21b600d6daf9bf67e5","unresolved":false,"context_lines":[{"line_number":5506,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":5507,"context_line":"                    # NOTE(Kevin Zheng) If we are attaching the root volume,"},{"line_number":5508,"context_line":"                    # we will only reset the volume specific fields and keep"},{"line_number":5509,"context_line":"                    # the DBM record."},{"line_number":5510,"context_line":"                    if bdm.is_root:"},{"line_number":5511,"context_line":"                        bdm.reset_fields_for_root_bdm()"},{"line_number":5512,"context_line":"                        bdm.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_40c30aee","line":5509,"range":{"start_line":5509,"start_character":26,"end_line":5509,"end_character":29},"in_reply_to":"9fdfeff1_61489db2","updated":"2019-02-26 03:17:50.000000000","message":"Done","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4549ee7a2c67fbc324c092b2d4cd21c00baac6c3","unresolved":false,"context_lines":[{"line_number":5640,"context_line":"        if destroy_bdm:"},{"line_number":5641,"context_line":"            # NOTE(Kevin Zheng) If we are detaching the root volume, we"},{"line_number":5642,"context_line":"            # will only reset the volume specific fields and keep the"},{"line_number":5643,"context_line":"            # DBM record, it will be used for attaching root volume."},{"line_number":5644,"context_line":"            if bdm.is_root:"},{"line_number":5645,"context_line":"                bdm.reset_fields_for_root_bdm()"},{"line_number":5646,"context_line":"                bdm.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_41e0f997","line":5643,"range":{"start_line":5643,"start_character":14,"end_line":5643,"end_character":17},"updated":"2019-02-25 17:49:09.000000000","message":"BDM","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d1e8abcd02bb6c2f19f35e21b600d6daf9bf67e5","unresolved":false,"context_lines":[{"line_number":5640,"context_line":"        if destroy_bdm:"},{"line_number":5641,"context_line":"            # NOTE(Kevin Zheng) If we are detaching the root volume, we"},{"line_number":5642,"context_line":"            # will only reset the volume specific fields and keep the"},{"line_number":5643,"context_line":"            # DBM record, it will be used for attaching root volume."},{"line_number":5644,"context_line":"            if bdm.is_root:"},{"line_number":5645,"context_line":"                bdm.reset_fields_for_root_bdm()"},{"line_number":5646,"context_line":"                bdm.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_c0213ab6","line":5643,"range":{"start_line":5643,"start_character":14,"end_line":5643,"end_character":17},"in_reply_to":"9fdfeff1_41e0f997","updated":"2019-02-26 03:17:50.000000000","message":"Done","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d1e8abcd02bb6c2f19f35e21b600d6daf9bf67e5","unresolved":false,"context_lines":[{"line_number":5477,"context_line":"            bdms \u003d ("},{"line_number":5478,"context_line":"                objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":5479,"context_line":"                    context, instance.uuid))"},{"line_number":5480,"context_line":""},{"line_number":5481,"context_line":"            # NOTE(ndipanov): We need to explicitly set all the fields on the"},{"line_number":5482,"context_line":"            #                 object so that obj_load_attr does not fail"},{"line_number":5483,"context_line":"            new_bdm \u003d objects.BlockDeviceMapping("},{"line_number":5484,"context_line":"                    context\u003dcontext,"},{"line_number":5485,"context_line":"                    source_type\u003d\u0027volume\u0027, destination_type\u003d\u0027volume\u0027,"},{"line_number":5486,"context_line":"                    instance_uuid\u003dinstance.uuid, boot_index\u003dNone,"},{"line_number":5487,"context_line":"                    volume_id\u003dvolume_id,"},{"line_number":5488,"context_line":"                    device_name\u003ddevice, guest_format\u003dNone,"},{"line_number":5489,"context_line":"                    disk_bus\u003ddisk_bus, device_type\u003ddevice_type, tag\u003dtag)"},{"line_number":5490,"context_line":""},{"line_number":5491,"context_line":"            new_bdm.device_name \u003d self._get_device_name_for_instance("},{"line_number":5492,"context_line":"                    instance, bdms, new_bdm)"},{"line_number":5493,"context_line":""},{"line_number":5494,"context_line":"            # NOTE(vish): create bdm here to avoid race condition"},{"line_number":5495,"context_line":"            new_bdm.create()"}],"source_content_type":"text/x-python","patch_set":35,"id":"9fdfeff1_abdc1774","side":"PARENT","line":5492,"range":{"start_line":5480,"start_character":0,"end_line":5492,"end_character":44},"updated":"2019-02-26 03:17:50.000000000","message":"Hmm, typos when I redo some changes, will fix these latter.","commit_id":"c7f0d160e4df95cc82706bcd8c4a9890a4dfeb51"}],"nova/exception.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4549ee7a2c67fbc324c092b2d4cd21c00baac6c3","unresolved":false,"context_lines":[{"line_number":1209,"context_line":"    code \u003d 409"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":""},{"line_number":1212,"context_line":"class DetachAttachRootVolumeNotYetSupported(NovaException):"},{"line_number":1213,"context_line":"    msg_fmt \u003d _(\"Detach/Attach root volume is not yet supported for this \""},{"line_number":1214,"context_line":"                \"instance.\")"},{"line_number":1215,"context_line":"    code \u003d 409"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_e1ea4d72","line":1212,"updated":"2019-02-25 17:49:09.000000000","message":"None of these exceptions are used in this patch - move them to the API change that actually uses them.","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d1e8abcd02bb6c2f19f35e21b600d6daf9bf67e5","unresolved":false,"context_lines":[{"line_number":1209,"context_line":"    code \u003d 409"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":""},{"line_number":1212,"context_line":"class DetachAttachRootVolumeNotYetSupported(NovaException):"},{"line_number":1213,"context_line":"    msg_fmt \u003d _(\"Detach/Attach root volume is not yet supported for this \""},{"line_number":1214,"context_line":"                \"instance.\")"},{"line_number":1215,"context_line":"    code \u003d 409"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_4b2d6b93","line":1212,"in_reply_to":"9fdfeff1_e1ea4d72","updated":"2019-02-26 03:17:50.000000000","message":"Done","commit_id":"38053e07a5d0dd0ae628bdecd3d477417a0d66d5"}],"nova/objects/block_device.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d1e8abcd02bb6c2f19f35e21b600d6daf9bf67e5","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        self.obj_reset_changes(fields\u003d[\u0027instance\u0027])"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def reset_fields_for_detached_root_bdm(self):"},{"line_number":371,"context_line":"        # This method is used in detach root volume case and related"},{"line_number":372,"context_line":"        # exception handling (rolling back when attaching a root volume"},{"line_number":373,"context_line":"        # and some error occurred). In these cases, we want to keep the"},{"line_number":374,"context_line":"        # BDM record but reset some fields."}],"source_content_type":"text/x-python","patch_set":35,"id":"9fdfeff1_8bdfd364","line":371,"range":{"start_line":371,"start_character":33,"end_line":371,"end_character":39},"updated":"2019-02-26 03:17:50.000000000","message":"detach/attach","commit_id":"a9d813da89f1f14c937f9445947613ab81693d13"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d1e8abcd02bb6c2f19f35e21b600d6daf9bf67e5","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        self.attachment_id \u003d None"},{"line_number":377,"context_line":"        self.volume_size \u003d None"},{"line_number":378,"context_line":"        self.connection_info \u003d None"},{"line_number":379,"context_line":"        self.tag \u003d None"},{"line_number":380,"context_line":"        self.volume_type \u003d None"},{"line_number":381,"context_line":"        self.image_id \u003d None"},{"line_number":382,"context_line":"        self.snapshot_id \u003d None"}],"source_content_type":"text/x-python","patch_set":35,"id":"9fdfeff1_abc5f78f","line":379,"range":{"start_line":379,"start_character":8,"end_line":379,"end_character":23},"updated":"2019-02-26 03:17:50.000000000","message":"should send out a ML about this one","commit_id":"a9d813da89f1f14c937f9445947613ab81693d13"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4054f06a8bf7d8030b1cbf0d7a904fa8e364d14a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    # Version 1.17: Added tag field"},{"line_number":70,"context_line":"    # Version 1.18: Added attachment_id"},{"line_number":71,"context_line":"    # Version 1.19: Added uuid"},{"line_number":72,"context_line":"    # Version 1.20: Added volume_type and reset_fields_for_detached_root_bdm()"},{"line_number":73,"context_line":"    VERSION \u003d \u00271.20\u0027"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_dfd7ccbe","line":72,"range":{"start_line":72,"start_character":38,"end_line":72,"end_character":78},"updated":"2019-02-26 13:08:25.000000000","message":"We don\u0027t really need to call this out here since it wasn\u0027t actually added with 1.20 nor does it matter for the versioned interface.","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"353f75da3af1dc3ea5ed6d48aaf902eb1eab8d9f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    # Version 1.17: Added tag field"},{"line_number":70,"context_line":"    # Version 1.18: Added attachment_id"},{"line_number":71,"context_line":"    # Version 1.19: Added uuid"},{"line_number":72,"context_line":"    # Version 1.20: Added volume_type and reset_fields_for_detached_root_bdm()"},{"line_number":73,"context_line":"    VERSION \u003d \u00271.20\u0027"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_29e258d5","line":72,"range":{"start_line":72,"start_character":38,"end_line":72,"end_character":78},"in_reply_to":"9fdfeff1_dfd7ccbe","updated":"2019-02-27 03:46:48.000000000","message":"right, good to know the rules","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c04e85e8ae529713c3c03ee3789fced809e575e1","unresolved":false,"context_lines":[{"line_number":367,"context_line":"                                                     self.instance_uuid)"},{"line_number":368,"context_line":"        self.obj_reset_changes(fields\u003d[\u0027instance\u0027])"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def reset_fields_for_detached_root_bdm(self):"},{"line_number":371,"context_line":"        # This method is used in detach root volume case and related"},{"line_number":372,"context_line":"        # exception handling (rolling back when attaching a root volume"},{"line_number":373,"context_line":"        # and some error occurred). In these cases, we want to keep the"}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_7d181ed2","line":370,"range":{"start_line":370,"start_character":8,"end_line":370,"end_character":42},"updated":"2019-02-26 22:29:02.000000000","message":"We should probably have a guard in here like:\n\nif not self.is_root:\n    raise exception.ObjectActionError(action\u003d\u0027reset_fields_for_detached_root_bdm\u0027, reason\u003d\u0027can only reset fields for root BDM\u0027)","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"353f75da3af1dc3ea5ed6d48aaf902eb1eab8d9f","unresolved":false,"context_lines":[{"line_number":367,"context_line":"                                                     self.instance_uuid)"},{"line_number":368,"context_line":"        self.obj_reset_changes(fields\u003d[\u0027instance\u0027])"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def reset_fields_for_detached_root_bdm(self):"},{"line_number":371,"context_line":"        # This method is used in detach root volume case and related"},{"line_number":372,"context_line":"        # exception handling (rolling back when attaching a root volume"},{"line_number":373,"context_line":"        # and some error occurred). In these cases, we want to keep the"}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_29301855","line":370,"range":{"start_line":370,"start_character":8,"end_line":370,"end_character":42},"in_reply_to":"9fdfeff1_7d181ed2","updated":"2019-02-27 03:46:48.000000000","message":"good idea.","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c04e85e8ae529713c3c03ee3789fced809e575e1","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        # BDM record but reset some fields."},{"line_number":375,"context_line":"        self.volume_id \u003d None"},{"line_number":376,"context_line":"        self.attachment_id \u003d None"},{"line_number":377,"context_line":"        self.volume_size \u003d None"},{"line_number":378,"context_line":"        self.connection_info \u003d None"},{"line_number":379,"context_line":"        # How should we handling tag will be discuss in ML and updated latter"},{"line_number":380,"context_line":"        self.tag \u003d None"}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_7d2fbef5","line":377,"range":{"start_line":377,"start_character":8,"end_line":377,"end_character":31},"updated":"2019-02-26 22:29:02.000000000","message":"Hmm, are we going to update this when the new root volume is attached? We probably should but are you doing that?","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"353f75da3af1dc3ea5ed6d48aaf902eb1eab8d9f","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        # BDM record but reset some fields."},{"line_number":375,"context_line":"        self.volume_id \u003d None"},{"line_number":376,"context_line":"        self.attachment_id \u003d None"},{"line_number":377,"context_line":"        self.volume_size \u003d None"},{"line_number":378,"context_line":"        self.connection_info \u003d None"},{"line_number":379,"context_line":"        # How should we handling tag will be discuss in ML and updated latter"},{"line_number":380,"context_line":"        self.tag \u003d None"}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_891ee46d","line":377,"range":{"start_line":377,"start_character":8,"end_line":377,"end_character":31},"in_reply_to":"9fdfeff1_7d2fbef5","updated":"2019-02-27 03:46:48.000000000","message":"Yes, it has been done, but TBH I did not find out where, but the process works well, and when creating bdm records for normal attaches, the size field is also not set. I will keep looking.","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c04e85e8ae529713c3c03ee3789fced809e575e1","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        self.attachment_id \u003d None"},{"line_number":377,"context_line":"        self.volume_size \u003d None"},{"line_number":378,"context_line":"        self.connection_info \u003d None"},{"line_number":379,"context_line":"        # How should we handling tag will be discuss in ML and updated latter"},{"line_number":380,"context_line":"        self.tag \u003d None"},{"line_number":381,"context_line":"        self.volume_type \u003d None"},{"line_number":382,"context_line":"        self.image_id \u003d None"}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_7d0a5e8a","line":379,"range":{"start_line":379,"start_character":8,"end_line":379,"end_character":77},"updated":"2019-02-26 22:29:02.000000000","message":"It probably makes the most sense to just reset the tag to None like you have here.","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"353f75da3af1dc3ea5ed6d48aaf902eb1eab8d9f","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        self.attachment_id \u003d None"},{"line_number":377,"context_line":"        self.volume_size \u003d None"},{"line_number":378,"context_line":"        self.connection_info \u003d None"},{"line_number":379,"context_line":"        # How should we handling tag will be discuss in ML and updated latter"},{"line_number":380,"context_line":"        self.tag \u003d None"},{"line_number":381,"context_line":"        self.volume_type \u003d None"},{"line_number":382,"context_line":"        self.image_id \u003d None"}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_290fb839","line":379,"range":{"start_line":379,"start_character":8,"end_line":379,"end_character":77},"in_reply_to":"9fdfeff1_7d0a5e8a","updated":"2019-02-27 03:46:48.000000000","message":"Done","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c04e85e8ae529713c3c03ee3789fced809e575e1","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        self.connection_info \u003d None"},{"line_number":379,"context_line":"        # How should we handling tag will be discuss in ML and updated latter"},{"line_number":380,"context_line":"        self.tag \u003d None"},{"line_number":381,"context_line":"        self.volume_type \u003d None"},{"line_number":382,"context_line":"        self.image_id \u003d None"},{"line_number":383,"context_line":"        self.snapshot_id \u003d None"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"@base.NovaObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_9dee22b3","line":383,"range":{"start_line":381,"start_character":8,"end_line":383,"end_character":31},"updated":"2019-02-26 22:29:02.000000000","message":"Please add a comment about why we reset these fields to None even though they are not shown in the API. The reason is because the root volume could have been created by nova from an image or volume snapshot and when a new root volume is attached, these old values might no longer apply so we reset them for data consistency.","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"353f75da3af1dc3ea5ed6d48aaf902eb1eab8d9f","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        self.connection_info \u003d None"},{"line_number":379,"context_line":"        # How should we handling tag will be discuss in ML and updated latter"},{"line_number":380,"context_line":"        self.tag \u003d None"},{"line_number":381,"context_line":"        self.volume_type \u003d None"},{"line_number":382,"context_line":"        self.image_id \u003d None"},{"line_number":383,"context_line":"        self.snapshot_id \u003d None"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"@base.NovaObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_49147c4d","line":383,"range":{"start_line":381,"start_character":8,"end_line":383,"end_character":31},"in_reply_to":"9fdfeff1_9dee22b3","updated":"2019-02-27 03:46:48.000000000","message":"Done","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"87711df351177e421afcd745e8002ed19b452f64","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        # and some error occurred). In these cases, we want to keep the"},{"line_number":374,"context_line":"        # BDM record but reset some fields."},{"line_number":375,"context_line":"        if not self.is_root:"},{"line_number":376,"context_line":"            raise exception.ObjectActionError("},{"line_number":377,"context_line":"                action\u003d\u0027reset_fields_for_detached_root_bdm\u0027,"},{"line_number":378,"context_line":"                reason\u003d\u0027can only reset fields for root BDM\u0027)"},{"line_number":379,"context_line":"        self.volume_id \u003d None"}],"source_content_type":"text/x-python","patch_set":38,"id":"9fdfeff1_650f1739","line":376,"updated":"2019-02-27 15:03:38.000000000","message":"Add a simple unit test for this.","commit_id":"9c3d1aaad21d0acbb09cc0136eb286b0a8cf0249"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"cdb3ae51150e6169c752daa6e0d7f7c43d1ab4b0","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        # and some error occurred). In these cases, we want to keep the"},{"line_number":374,"context_line":"        # BDM record but reset some fields."},{"line_number":375,"context_line":"        if not self.is_root:"},{"line_number":376,"context_line":"            raise exception.ObjectActionError("},{"line_number":377,"context_line":"                action\u003d\u0027reset_fields_for_detached_root_bdm\u0027,"},{"line_number":378,"context_line":"                reason\u003d\u0027can only reset fields for root BDM\u0027)"},{"line_number":379,"context_line":"        self.volume_id \u003d None"}],"source_content_type":"text/x-python","patch_set":38,"id":"9fdfeff1_ef3af431","line":376,"in_reply_to":"9fdfeff1_650f1739","updated":"2019-02-28 02:02:49.000000000","message":"Done","commit_id":"9c3d1aaad21d0acbb09cc0136eb286b0a8cf0249"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1fac2aba54ada9c9d8c96142ceed4d1b418fa384","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        self.volume_id \u003d None"},{"line_number":380,"context_line":"        self.attachment_id \u003d None"},{"line_number":381,"context_line":"        self.volume_size \u003d None"},{"line_number":382,"context_line":"        self.connection_info \u003d None"},{"line_number":383,"context_line":"        self.tag \u003d None"},{"line_number":384,"context_line":"        # Though the below fields are not shown in the API we reset them"},{"line_number":385,"context_line":"        # because the root volume could have been created by nova from an"}],"source_content_type":"text/x-python","patch_set":40,"id":"9fdfeff1_24e315da","line":382,"range":{"start_line":382,"start_character":13,"end_line":382,"end_character":28},"updated":"2019-03-01 15:52:03.000000000","message":"If we\u0027re going to handle multiattach volumes when attaching the new root volume, we can\u0027t reset this either on detach because this is what contains the flag that tells us if this is a multiattach volume.","commit_id":"a5cde2373be5fbe82a9236d6367849790c313cff"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9dd744361b854fc9b3e4cf2123a651e2d6e9b21f","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        self.volume_id \u003d None"},{"line_number":380,"context_line":"        self.attachment_id \u003d None"},{"line_number":381,"context_line":"        self.volume_size \u003d None"},{"line_number":382,"context_line":"        self.connection_info \u003d None"},{"line_number":383,"context_line":"        self.tag \u003d None"},{"line_number":384,"context_line":"        # Though the below fields are not shown in the API we reset them"},{"line_number":385,"context_line":"        # because the root volume could have been created by nova from an"}],"source_content_type":"text/x-python","patch_set":40,"id":"9fdfeff1_d6a8a079","line":382,"range":{"start_line":382,"start_character":13,"end_line":382,"end_character":28},"in_reply_to":"9fdfeff1_24e315da","updated":"2019-03-04 11:02:11.000000000","message":"I don\u0027t quite get this one, how does wheter the old volume is a multi-attach volume or not has influence on the new volume? Again, I was doing all what the normal attach volume to shelved_offloaded instances does, and it seems it didn\u0027t contain this data either. I think what makes the root volume different is just the device name and boot_index, and other data like the connection_info has no difference with a normal volume?","commit_id":"a5cde2373be5fbe82a9236d6367849790c313cff"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"dc1503e36d10a0b11b610aec21db94811b382c6f","unresolved":false,"context_lines":[{"line_number":379,"context_line":"        self.volume_id \u003d None"},{"line_number":380,"context_line":"        self.attachment_id \u003d None"},{"line_number":381,"context_line":"        self.volume_size \u003d None"},{"line_number":382,"context_line":"        self.connection_info \u003d None"},{"line_number":383,"context_line":"        self.tag \u003d None"},{"line_number":384,"context_line":"        # Though the below fields are not shown in the API we reset them"},{"line_number":385,"context_line":"        # because the root volume could have been created by nova from an"}],"source_content_type":"text/x-python","patch_set":40,"id":"9fdfeff1_ea7a98ee","line":382,"range":{"start_line":382,"start_character":13,"end_line":382,"end_character":28},"in_reply_to":"9fdfeff1_d6a8a079","updated":"2019-03-04 11:41:52.000000000","message":"Later ..., got this now, it is similar to the tag case, we can do multi-attach if the previous one is multiattached","commit_id":"a5cde2373be5fbe82a9236d6367849790c313cff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1fac2aba54ada9c9d8c96142ceed4d1b418fa384","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        self.attachment_id \u003d None"},{"line_number":381,"context_line":"        self.volume_size \u003d None"},{"line_number":382,"context_line":"        self.connection_info \u003d None"},{"line_number":383,"context_line":"        self.tag \u003d None"},{"line_number":384,"context_line":"        # Though the below fields are not shown in the API we reset them"},{"line_number":385,"context_line":"        # because the root volume could have been created by nova from an"},{"line_number":386,"context_line":"        # image or volume snapshot and when a new root volume is attached,"}],"source_content_type":"text/x-python","patch_set":40,"id":"9fdfeff1_e4cbcd4f","line":383,"range":{"start_line":383,"start_character":8,"end_line":383,"end_character":23},"updated":"2019-03-01 15:52:03.000000000","message":"Per the ML thread I think we decided to no longer reset this on detach.","commit_id":"a5cde2373be5fbe82a9236d6367849790c313cff"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9dd744361b854fc9b3e4cf2123a651e2d6e9b21f","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        self.attachment_id \u003d None"},{"line_number":381,"context_line":"        self.volume_size \u003d None"},{"line_number":382,"context_line":"        self.connection_info \u003d None"},{"line_number":383,"context_line":"        self.tag \u003d None"},{"line_number":384,"context_line":"        # Though the below fields are not shown in the API we reset them"},{"line_number":385,"context_line":"        # because the root volume could have been created by nova from an"},{"line_number":386,"context_line":"        # image or volume snapshot and when a new root volume is attached,"}],"source_content_type":"text/x-python","patch_set":40,"id":"9fdfeff1_d6c5005e","line":383,"range":{"start_line":383,"start_character":8,"end_line":383,"end_character":23},"in_reply_to":"9fdfeff1_e4cbcd4f","updated":"2019-03-04 11:02:11.000000000","message":"Done","commit_id":"a5cde2373be5fbe82a9236d6367849790c313cff"}],"nova/objects/service.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c04e85e8ae529713c3c03ee3789fced809e575e1","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    # Version 37: prep_resize takes a RequestSpec object"},{"line_number":153,"context_line":"    {\u0027compute_rpc\u0027: \u00275.1\u0027},"},{"line_number":154,"context_line":"    # Version 38: Indicates that nova-compute supports attaching/detaching"},{"line_number":155,"context_line":"    # boot volume for a volume-backed server."},{"line_number":156,"context_line":"    {\u0027compute_rpc\u0027: \u00275.2\u0027},"},{"line_number":157,"context_line":")"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_fd3ace31","line":155,"range":{"start_line":155,"start_character":6,"end_line":155,"end_character":10},"updated":"2019-02-26 22:29:02.000000000","message":"s/boot/root/ because you can have more than one boot volume but only one root (boot_index\u003d0).","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"353f75da3af1dc3ea5ed6d48aaf902eb1eab8d9f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    # Version 37: prep_resize takes a RequestSpec object"},{"line_number":153,"context_line":"    {\u0027compute_rpc\u0027: \u00275.1\u0027},"},{"line_number":154,"context_line":"    # Version 38: Indicates that nova-compute supports attaching/detaching"},{"line_number":155,"context_line":"    # boot volume for a volume-backed server."},{"line_number":156,"context_line":"    {\u0027compute_rpc\u0027: \u00275.2\u0027},"},{"line_number":157,"context_line":")"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"9fdfeff1_090af424","line":155,"range":{"start_line":155,"start_character":6,"end_line":155,"end_character":10},"in_reply_to":"9fdfeff1_fd3ace31","updated":"2019-02-27 03:46:48.000000000","message":"Done","commit_id":"09cfe7f24dda036099cd48a5d71d158fb1dfd42b"}],"nova/tests/unit/compute/test_shelve.py":[{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"3f60cd81d91b020949e9cb53c0237279e94a3354","unresolved":false,"context_lines":[{"line_number":824,"context_line":""},{"line_number":825,"context_line":"        fake_spec \u003d objects.RequestSpec()"},{"line_number":826,"context_line":"        get_by_instance_uuid.return_value \u003d fake_spec"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"        with mock.patch.object(self.compute_api.compute_task_api,"},{"line_number":829,"context_line":"                               \u0027unshelve_instance\u0027) as unshelve:"},{"line_number":830,"context_line":"            self.compute_api.unshelve(self.context, instance)"}],"source_content_type":"text/x-python","patch_set":33,"id":"9fdfeff1_17b7a13c","line":827,"range":{"start_line":827,"start_character":0,"end_line":827,"end_character":0},"updated":"2019-02-25 02:16:38.000000000","message":"Irrelevent?","commit_id":"ed64e9749c3c1fcbc7bc6cda681002e521227228"}]}
