)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e169e53e40a2d1abd72bc4b18fbbcf771996b5c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add instance action record for attach/detach/swap volumes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We currently didn\u0027t record attach/detach/swap instance"},{"line_number":10,"context_line":"actions. This is useful for auditing and debuging."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch adds attach/detach/swap actions."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ff82abbf_b9bba5e3","line":9,"range":{"start_line":9,"start_character":13,"end_line":9,"end_character":19},"updated":"2017-11-20 17:35:47.000000000","message":"don\u0027t","commit_id":"6cad511239b8e7bfc405f04bf2843a292098fca0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e169e53e40a2d1abd72bc4b18fbbcf771996b5c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add instance action record for attach/detach/swap volumes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We currently didn\u0027t record attach/detach/swap instance"},{"line_number":10,"context_line":"actions. This is useful for auditing and debuging."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch adds attach/detach/swap actions."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ff82abbf_19edf1ee","line":9,"range":{"start_line":9,"start_character":46,"end_line":9,"end_character":54},"updated":"2017-11-20 17:35:47.000000000","message":"s/instance/volume instance/","commit_id":"6cad511239b8e7bfc405f04bf2843a292098fca0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"722ae8d86750da3e7738b4cd1ab517ed906e3d5c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add instance action record for attach/detach/swap volumes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We currently didn\u0027t record attach/detach/swap instance"},{"line_number":10,"context_line":"actions. This is useful for auditing and debuging."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch adds attach/detach/swap actions."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ff82abbf_dfc4adf7","line":9,"range":{"start_line":9,"start_character":13,"end_line":9,"end_character":19},"updated":"2017-11-27 21:13:54.000000000","message":"don\u0027t","commit_id":"a7bee38792b5c46b55ad600516424c4a2fc2329d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"722ae8d86750da3e7738b4cd1ab517ed906e3d5c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add instance action record for attach/detach/swap volumes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We currently didn\u0027t record attach/detach/swap instance"},{"line_number":10,"context_line":"actions. This is useful for auditing and debuging."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch adds attach/detach/swap actions."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ff82abbf_7fb5617d","line":9,"range":{"start_line":9,"start_character":46,"end_line":9,"end_character":54},"updated":"2017-11-27 21:13:54.000000000","message":"s/instance/volume instance/","commit_id":"a7bee38792b5c46b55ad600516424c4a2fc2329d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"722ae8d86750da3e7738b4cd1ab517ed906e3d5c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add instance action record for attach/detach/swap volumes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We currently didn\u0027t record attach/detach/swap instance"},{"line_number":10,"context_line":"actions. This is useful for auditing and debuging."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch adds attach/detach/swap actions."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ff82abbf_bf644923","line":10,"range":{"start_line":10,"start_character":41,"end_line":10,"end_character":49},"updated":"2017-11-27 21:13:54.000000000","message":"debugging","commit_id":"a7bee38792b5c46b55ad600516424c4a2fc2329d"}],"nova/compute/api.py":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"5a5e2c53e9fe7cb4c7428d2eb50abb8e39df3cdf","unresolved":false,"context_lines":[{"line_number":3678,"context_line":"            msg \u003d _(\"New volume must be the same size or larger.\")"},{"line_number":3679,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":3680,"context_line":""},{"line_number":3681,"context_line":"        self._record_action_start("},{"line_number":3682,"context_line":"            context, instance, instance_actions.SWAP_VOLUME)"},{"line_number":3683,"context_line":""},{"line_number":3684,"context_line":"        self.volume_api.check_availability_zone(context, new_volume,"},{"line_number":3685,"context_line":"                                                instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_0c2cdb45","line":3682,"range":{"start_line":3681,"start_character":0,"end_line":3682,"end_character":60},"updated":"2017-11-09 09:50:47.000000000","message":"Does it has some rules on action start position? I guess the position is somewhere we actually do something.\n\nSo, I think we record it after checking would be more reasonable?","commit_id":"bdc263a69bcfb8353baefd89993dde95f9c0f402"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"505681bf17fde40bd02f102b9518497d4fc22110","unresolved":false,"context_lines":[{"line_number":3678,"context_line":"            msg \u003d _(\"New volume must be the same size or larger.\")"},{"line_number":3679,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":3680,"context_line":""},{"line_number":3681,"context_line":"        self._record_action_start("},{"line_number":3682,"context_line":"            context, instance, instance_actions.SWAP_VOLUME)"},{"line_number":3683,"context_line":""},{"line_number":3684,"context_line":"        self.volume_api.check_availability_zone(context, new_volume,"},{"line_number":3685,"context_line":"                                                instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_2e7e39e4","line":3682,"range":{"start_line":3681,"start_character":0,"end_line":3682,"end_character":60},"in_reply_to":"1f485f77_0c2cdb45","updated":"2017-11-13 09:09:03.000000000","message":"Done","commit_id":"bdc263a69bcfb8353baefd89993dde95f9c0f402"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f44c3fe3b7e9df711517fd8c211a1b149abc34d","unresolved":false,"context_lines":[{"line_number":3601,"context_line":"                # the compute manager to check that it supports device tagging."},{"line_number":3602,"context_line":"                # In fact, we don\u0027t even know which computer manager the"},{"line_number":3603,"context_line":"                # instance will eventually end up on when it\u0027s unshelved."},{"line_number":3604,"context_line":"                raise exception.VolumeTaggedAttachToShelvedNotSupported()"},{"line_number":3605,"context_line":"            return self._attach_volume_shelved_offloaded(context,"},{"line_number":3606,"context_line":"                                                         instance,"},{"line_number":3607,"context_line":"                                                         volume_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_a5f790d3","line":3604,"updated":"2017-11-15 22:06:19.000000000","message":"Do you want to record an action for something that can blow up here? Seems wrong. I think we generally want to record the action before we start doing some actual work, which is usually before we perform an RPC cast/call to the compute.","commit_id":"90944edd9bc3b3623fd0b150ef2945cc7ee78df4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"7acf534f2e7aa9cc9e42a72bfe63bbc37fdd0dbc","unresolved":false,"context_lines":[{"line_number":3601,"context_line":"                # the compute manager to check that it supports device tagging."},{"line_number":3602,"context_line":"                # In fact, we don\u0027t even know which computer manager the"},{"line_number":3603,"context_line":"                # instance will eventually end up on when it\u0027s unshelved."},{"line_number":3604,"context_line":"                raise exception.VolumeTaggedAttachToShelvedNotSupported()"},{"line_number":3605,"context_line":"            return self._attach_volume_shelved_offloaded(context,"},{"line_number":3606,"context_line":"                                                         instance,"},{"line_number":3607,"context_line":"                                                         volume_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_d916f155","line":3604,"in_reply_to":"1f485f77_a5f790d3","updated":"2017-11-16 02:02:30.000000000","message":"I was trying to avoid adding duplicated code for attach_volume and attach_volume_shelved_offloaded, so I put it in a more general place. BTW, do we want to differ the instance_actions for ATTACH_VOLUME and ATTACH_VOLUME_SHELVED_OFFLOADED?","commit_id":"90944edd9bc3b3623fd0b150ef2945cc7ee78df4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5570518eaa54ac09a7665db8f4dbb28e20735643","unresolved":false,"context_lines":[{"line_number":3601,"context_line":"                # the compute manager to check that it supports device tagging."},{"line_number":3602,"context_line":"                # In fact, we don\u0027t even know which computer manager the"},{"line_number":3603,"context_line":"                # instance will eventually end up on when it\u0027s unshelved."},{"line_number":3604,"context_line":"                raise exception.VolumeTaggedAttachToShelvedNotSupported()"},{"line_number":3605,"context_line":"            return self._attach_volume_shelved_offloaded(context,"},{"line_number":3606,"context_line":"                                                         instance,"},{"line_number":3607,"context_line":"                                                         volume_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_3433cc16","line":3604,"in_reply_to":"1f485f77_d916f155","updated":"2017-11-16 02:48:28.000000000","message":"\u003e BTW, do we want to differ the instance_actions for ATTACH_VOLUME and ATTACH_VOLUME_SHELVED_OFFLOADED?\n\nNo, the API to get here is the same either way so distinguishing based on the shelved offloaded status would be confusing.","commit_id":"90944edd9bc3b3623fd0b150ef2945cc7ee78df4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f44c3fe3b7e9df711517fd8c211a1b149abc34d","unresolved":false,"context_lines":[{"line_number":3677,"context_line":"        if int(new_volume[\u0027size\u0027]) \u003c int(old_volume[\u0027size\u0027]):"},{"line_number":3678,"context_line":"            msg \u003d _(\"New volume must be the same size or larger.\")"},{"line_number":3679,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":3680,"context_line":""},{"line_number":3681,"context_line":"        self.volume_api.check_availability_zone(context, new_volume,"},{"line_number":3682,"context_line":"                                                instance\u003dinstance)"},{"line_number":3683,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_45be9cd5","line":3680,"updated":"2017-11-15 22:06:19.000000000","message":"unrelated whitespace change","commit_id":"90944edd9bc3b3623fd0b150ef2945cc7ee78df4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"7acf534f2e7aa9cc9e42a72bfe63bbc37fdd0dbc","unresolved":false,"context_lines":[{"line_number":3677,"context_line":"        if int(new_volume[\u0027size\u0027]) \u003c int(old_volume[\u0027size\u0027]):"},{"line_number":3678,"context_line":"            msg \u003d _(\"New volume must be the same size or larger.\")"},{"line_number":3679,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":3680,"context_line":""},{"line_number":3681,"context_line":"        self.volume_api.check_availability_zone(context, new_volume,"},{"line_number":3682,"context_line":"                                                instance\u003dinstance)"},{"line_number":3683,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_1406901e","line":3680,"in_reply_to":"1f485f77_45be9cd5","updated":"2017-11-16 02:02:30.000000000","message":"Done","commit_id":"90944edd9bc3b3623fd0b150ef2945cc7ee78df4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f44c3fe3b7e9df711517fd8c211a1b149abc34d","unresolved":false,"context_lines":[{"line_number":3705,"context_line":"                context, new_volume[\u0027id\u0027], instance.uuid)[\u0027id\u0027]"},{"line_number":3706,"context_line":""},{"line_number":3707,"context_line":"        try:"},{"line_number":3708,"context_line":"            self.compute_rpcapi.swap_volume("},{"line_number":3709,"context_line":"                    context, instance\u003dinstance,"},{"line_number":3710,"context_line":"                    old_volume_id\u003dold_volume[\u0027id\u0027],"},{"line_number":3711,"context_line":"                    new_volume_id\u003dnew_volume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_c5d16c25","line":3708,"updated":"2017-11-15 22:06:19.000000000","message":"I think you want to record the action before we get here, to know everything above worked. And then we use the action record to track the asynchronous work in the compute service.","commit_id":"90944edd9bc3b3623fd0b150ef2945cc7ee78df4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"7acf534f2e7aa9cc9e42a72bfe63bbc37fdd0dbc","unresolved":false,"context_lines":[{"line_number":3705,"context_line":"                context, new_volume[\u0027id\u0027], instance.uuid)[\u0027id\u0027]"},{"line_number":3706,"context_line":""},{"line_number":3707,"context_line":"        try:"},{"line_number":3708,"context_line":"            self.compute_rpcapi.swap_volume("},{"line_number":3709,"context_line":"                    context, instance\u003dinstance,"},{"line_number":3710,"context_line":"                    old_volume_id\u003dold_volume[\u0027id\u0027],"},{"line_number":3711,"context_line":"                    new_volume_id\u003dnew_volume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_f406541c","line":3708,"in_reply_to":"1f485f77_c5d16c25","updated":"2017-11-16 02:02:30.000000000","message":"Done","commit_id":"90944edd9bc3b3623fd0b150ef2945cc7ee78df4"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"3b28c40c17ba0df762f2b995f26988a56e7a7c85","unresolved":false,"context_lines":[{"line_number":3687,"context_line":"    def detach_volume(self, context, instance, volume):"},{"line_number":3688,"context_line":"        \"\"\"Detach a volume from an instance.\"\"\""},{"line_number":3689,"context_line":"        if instance.vm_state \u003d\u003d vm_states.SHELVED_OFFLOADED:"},{"line_number":3690,"context_line":"            self._record_action_start("},{"line_number":3691,"context_line":"                context, instance,"},{"line_number":3692,"context_line":"                instance_actions.DETACH_VOLUME_SHELVED_OFFLOADED)"},{"line_number":3693,"context_line":"            self._detach_volume_shelved_offloaded(context, instance, volume)"},{"line_number":3694,"context_line":"        else:"},{"line_number":3695,"context_line":"            self._detach_volume(context, instance, volume)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_e7058347","line":3692,"range":{"start_line":3690,"start_character":12,"end_line":3692,"end_character":65},"updated":"2017-11-16 07:44:36.000000000","message":"you might want to move to _detach_volume_shelved_offloaded\nto make code consistent so that we can avoid if it\u0027s a invalidInput to record an action","commit_id":"3916895f22e68a49010d6f62a9495df70789a46e"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4972a06b969f409f365e85f4c5bb2348bea167aa","unresolved":false,"context_lines":[{"line_number":3687,"context_line":"    def detach_volume(self, context, instance, volume):"},{"line_number":3688,"context_line":"        \"\"\"Detach a volume from an instance.\"\"\""},{"line_number":3689,"context_line":"        if instance.vm_state \u003d\u003d vm_states.SHELVED_OFFLOADED:"},{"line_number":3690,"context_line":"            self._record_action_start("},{"line_number":3691,"context_line":"                context, instance,"},{"line_number":3692,"context_line":"                instance_actions.DETACH_VOLUME_SHELVED_OFFLOADED)"},{"line_number":3693,"context_line":"            self._detach_volume_shelved_offloaded(context, instance, volume)"},{"line_number":3694,"context_line":"        else:"},{"line_number":3695,"context_line":"            self._detach_volume(context, instance, volume)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f485f77_fb6e17c7","line":3692,"range":{"start_line":3690,"start_character":12,"end_line":3692,"end_character":65},"in_reply_to":"1f485f77_e7058347","updated":"2017-11-17 08:10:38.000000000","message":"I was trying to add the wrap_instance_event method here so an event can be added, but it seems hard to find the perfect place for it.","commit_id":"3916895f22e68a49010d6f62a9495df70789a46e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c9759a149bb024c28c55e3243646b3ab42657c5","unresolved":false,"context_lines":[{"line_number":3576,"context_line":""},{"line_number":3577,"context_line":"        return volume_bdm.device_name"},{"line_number":3578,"context_line":""},{"line_number":3579,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"},{"line_number":3580,"context_line":"    def _attach_volume_shelved_offloaded(self, context, instance, volume_id,"},{"line_number":3581,"context_line":"                                         device, disk_bus, device_type):"},{"line_number":3582,"context_line":"        \"\"\"Attach an existing volume to an instance in shelved offloaded state."}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_bb62df08","line":3579,"range":{"start_line":3579,"start_character":0,"end_line":3579,"end_character":42},"updated":"2017-11-17 08:41:25.000000000","message":"can you add some test or cover this in some existing test to capture events are triggered for this method.","commit_id":"b4b78789fc25f93b4518b9941fcab19df71a738e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c9759a149bb024c28c55e3243646b3ab42657c5","unresolved":false,"context_lines":[{"line_number":3629,"context_line":"                # In fact, we don\u0027t even know which computer manager the"},{"line_number":3630,"context_line":"                # instance will eventually end up on when it\u0027s unshelved."},{"line_number":3631,"context_line":"                raise exception.VolumeTaggedAttachToShelvedNotSupported()"},{"line_number":3632,"context_line":"            self._record_action_start("},{"line_number":3633,"context_line":"                context, instance,"},{"line_number":3634,"context_line":"                instance_actions.ATTACH_VOLUME)"},{"line_number":3635,"context_line":"            return self._attach_volume_shelved_offloaded(context,"},{"line_number":3636,"context_line":"                                                         instance,"},{"line_number":3637,"context_line":"                                                         volume_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_3b2eeffa","line":3634,"range":{"start_line":3632,"start_character":0,"end_line":3634,"end_character":47},"updated":"2017-11-17 08:41:25.000000000","message":"i think it is much better to record this just before L3598","commit_id":"b4b78789fc25f93b4518b9941fcab19df71a738e"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6c3662bdb6890e509e398477b36ae42ee65e19ff","unresolved":false,"context_lines":[{"line_number":3629,"context_line":"                # In fact, we don\u0027t even know which computer manager the"},{"line_number":3630,"context_line":"                # instance will eventually end up on when it\u0027s unshelved."},{"line_number":3631,"context_line":"                raise exception.VolumeTaggedAttachToShelvedNotSupported()"},{"line_number":3632,"context_line":"            self._record_action_start("},{"line_number":3633,"context_line":"                context, instance,"},{"line_number":3634,"context_line":"                instance_actions.ATTACH_VOLUME)"},{"line_number":3635,"context_line":"            return self._attach_volume_shelved_offloaded(context,"},{"line_number":3636,"context_line":"                                                         instance,"},{"line_number":3637,"context_line":"                                                         volume_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_d6f9a44d","line":3634,"range":{"start_line":3632,"start_character":0,"end_line":3634,"end_character":47},"in_reply_to":"1f485f77_3b2eeffa","updated":"2017-11-20 08:11:43.000000000","message":"IMO, adding it here makes more sense for wrap_instance_event added in line 3579, as we will record compute_attach_volume_shelved_offloaded.","commit_id":"b4b78789fc25f93b4518b9941fcab19df71a738e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c9759a149bb024c28c55e3243646b3ab42657c5","unresolved":false,"context_lines":[{"line_number":3656,"context_line":"        attachment_id \u003d None"},{"line_number":3657,"context_line":"        if attachments and instance.uuid in attachments:"},{"line_number":3658,"context_line":"            attachment_id \u003d attachments[instance.uuid][\u0027attachment_id\u0027]"},{"line_number":3659,"context_line":"        self._record_action_start("},{"line_number":3660,"context_line":"            context, instance, instance_actions.DETACH_VOLUME)"},{"line_number":3661,"context_line":"        self.compute_rpcapi.detach_volume(context, instance\u003dinstance,"},{"line_number":3662,"context_line":"                volume_id\u003dvolume[\u0027id\u0027], attachment_id\u003dattachment_id)"},{"line_number":3663,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_3b982f1a","line":3660,"range":{"start_line":3659,"start_character":0,"end_line":3660,"end_character":62},"updated":"2017-11-17 08:41:25.000000000","message":"or how about recording this before L3689 only as from there itself we will set status to detaching on cinder side and start the detach on driver. \n\nI think i need more opinion on this.","commit_id":"b4b78789fc25f93b4518b9941fcab19df71a738e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c9759a149bb024c28c55e3243646b3ab42657c5","unresolved":false,"context_lines":[{"line_number":3661,"context_line":"        self.compute_rpcapi.detach_volume(context, instance\u003dinstance,"},{"line_number":3662,"context_line":"                volume_id\u003dvolume[\u0027id\u0027], attachment_id\u003dattachment_id)"},{"line_number":3663,"context_line":""},{"line_number":3664,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"},{"line_number":3665,"context_line":"    def _detach_volume_shelved_offloaded(self, context, instance, volume):"},{"line_number":3666,"context_line":"        \"\"\"Detach a volume from an instance in shelved offloaded state."},{"line_number":3667,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_9b5de348","line":3664,"range":{"start_line":3664,"start_character":0,"end_line":3664,"end_character":42},"updated":"2017-11-17 08:41:25.000000000","message":"ditto","commit_id":"b4b78789fc25f93b4518b9941fcab19df71a738e"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"11c63d10d355215aa72955205abc7c30365d47ca","unresolved":false,"context_lines":[{"line_number":3687,"context_line":"    def detach_volume(self, context, instance, volume):"},{"line_number":3688,"context_line":"        \"\"\"Detach a volume from an instance.\"\"\""},{"line_number":3689,"context_line":"        if instance.vm_state \u003d\u003d vm_states.SHELVED_OFFLOADED:"},{"line_number":3690,"context_line":"            self._record_action_start("},{"line_number":3691,"context_line":"                context, instance,"},{"line_number":3692,"context_line":"                instance_actions.DETACH_VOLUME)"},{"line_number":3693,"context_line":"            self._detach_volume_shelved_offloaded(context, instance, volume)"},{"line_number":3694,"context_line":"        else:"},{"line_number":3695,"context_line":"            self._detach_volume(context, instance, volume)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_57602e33","line":3692,"range":{"start_line":3690,"start_character":11,"end_line":3692,"end_character":47},"updated":"2017-11-20 09:31:39.000000000","message":"if you record here,\nand if line 3677 failed, you will have a record,\nwhile if you just do _detach_volume instead\nand some exception in 3654, you will not have a action as it\u0027s in line 3659-3660\n\nthis will make logic inconsistent....","commit_id":"864f439fdb2c06fb39f9d5a4397511b66e018767"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3f955a93a64259f92e64f1b39ab87f3613ab91d4","unresolved":false,"context_lines":[{"line_number":3687,"context_line":"    def detach_volume(self, context, instance, volume):"},{"line_number":3688,"context_line":"        \"\"\"Detach a volume from an instance.\"\"\""},{"line_number":3689,"context_line":"        if instance.vm_state \u003d\u003d vm_states.SHELVED_OFFLOADED:"},{"line_number":3690,"context_line":"            self._record_action_start("},{"line_number":3691,"context_line":"                context, instance,"},{"line_number":3692,"context_line":"                instance_actions.DETACH_VOLUME)"},{"line_number":3693,"context_line":"            self._detach_volume_shelved_offloaded(context, instance, volume)"},{"line_number":3694,"context_line":"        else:"},{"line_number":3695,"context_line":"            self._detach_volume(context, instance, volume)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_89b77ad9","line":3692,"range":{"start_line":3690,"start_character":11,"end_line":3692,"end_character":47},"in_reply_to":"ff82abbf_57602e33","updated":"2017-11-20 09:57:23.000000000","message":"But I cannot find a better place to put @warp_instance_event, any suggestions?","commit_id":"864f439fdb2c06fb39f9d5a4397511b66e018767"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e169e53e40a2d1abd72bc4b18fbbcf771996b5c","unresolved":false,"context_lines":[{"line_number":1989,"context_line":"                          {\u0027connector_host\u0027: connector.get(\u0027host\u0027),"},{"line_number":1990,"context_line":"                           \u0027instance_host\u0027: instance.host}, instance\u003dinstance)"},{"line_number":1991,"context_line":""},{"line_number":1992,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"},{"line_number":1993,"context_line":"    def _local_cleanup_bdm_volumes(self, bdms, instance, context):"},{"line_number":1994,"context_line":"        \"\"\"The method deletes the bdm records and, if a bdm is a volume, call"},{"line_number":1995,"context_line":"        the terminate connection and the detach volume via the Volume API."}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_7983dd05","line":1992,"updated":"2017-11-20 17:35:47.000000000","message":"This is going to look weird, and result in an event with name \"compute__local_cleanup_bdm_volumes\" which leaks too much internal information, and would be subject to change if we renamed this method at some point.\n\nWe should probably put an inner method in _detach_volume_shelved_offloaded called \"detach_volume\" which has the decorator and then have that inner method call _detach_volume_shelved_offloaded. The prefix would arguably be wrong too, since we\u0027re not doing the detach in the compute, but rather the API, so prefix should probably be \u0027api\u0027.\n\nYou could alternatively do what conductor does here for unshelve:\n\nhttps://github.com/openstack/nova/blob/984dd8ad6add4523d93c7ce5a666a32233e02e34/nova/conductor/manager.py#L646","commit_id":"6cad511239b8e7bfc405f04bf2843a292098fca0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"8f84c602755d48a0a1ac6e436c8de4f3acd8ba5a","unresolved":false,"context_lines":[{"line_number":1989,"context_line":"                          {\u0027connector_host\u0027: connector.get(\u0027host\u0027),"},{"line_number":1990,"context_line":"                           \u0027instance_host\u0027: instance.host}, instance\u003dinstance)"},{"line_number":1991,"context_line":""},{"line_number":1992,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"},{"line_number":1993,"context_line":"    def _local_cleanup_bdm_volumes(self, bdms, instance, context):"},{"line_number":1994,"context_line":"        \"\"\"The method deletes the bdm records and, if a bdm is a volume, call"},{"line_number":1995,"context_line":"        the terminate connection and the detach volume via the Volume API."}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_7e73b581","line":1992,"in_reply_to":"ff82abbf_7983dd05","updated":"2017-11-21 03:56:04.000000000","message":"Thanks alot, this bothered me for a while, I have been trying to find a better location for this decorator.","commit_id":"6cad511239b8e7bfc405f04bf2843a292098fca0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"722ae8d86750da3e7738b4cd1ab517ed906e3d5c","unresolved":false,"context_lines":[{"line_number":3650,"context_line":"        attachment_id \u003d None"},{"line_number":3651,"context_line":"        if attachments and instance.uuid in attachments:"},{"line_number":3652,"context_line":"            attachment_id \u003d attachments[instance.uuid][\u0027attachment_id\u0027]"},{"line_number":3653,"context_line":"        self._record_action_start("},{"line_number":3654,"context_line":"            context, instance, instance_actions.DETACH_VOLUME)"},{"line_number":3655,"context_line":"        self.compute_rpcapi.detach_volume(context, instance\u003dinstance,"},{"line_number":3656,"context_line":"                volume_id\u003dvolume[\u0027id\u0027], attachment_id\u003dattachment_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff82abbf_422680d0","line":3653,"range":{"start_line":3653,"start_character":13,"end_line":3653,"end_character":33},"updated":"2017-11-27 21:13:54.000000000","message":"Do we have anything asserting this is called?","commit_id":"a7bee38792b5c46b55ad600516424c4a2fc2329d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"722ae8d86750da3e7738b4cd1ab517ed906e3d5c","unresolved":false,"context_lines":[{"line_number":3665,"context_line":"        volume api delete as well."},{"line_number":3666,"context_line":"        \"\"\""},{"line_number":3667,"context_line":"        @wrap_instance_event(prefix\u003d\u0027api\u0027)"},{"line_number":3668,"context_line":"        def detach_volume(self, context, instance, bdm):"},{"line_number":3669,"context_line":"            self._local_cleanup_bdm_volumes(bdms\u003dbdm, instance\u003dinstance,"},{"line_number":3670,"context_line":"                                            context\u003dcontext)"},{"line_number":3671,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ff82abbf_428a00bf","line":3668,"range":{"start_line":3668,"start_character":51,"end_line":3668,"end_character":54},"updated":"2017-11-27 21:13:54.000000000","message":"bdms (plural)","commit_id":"a7bee38792b5c46b55ad600516424c4a2fc2329d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"722ae8d86750da3e7738b4cd1ab517ed906e3d5c","unresolved":false,"context_lines":[{"line_number":3666,"context_line":"        \"\"\""},{"line_number":3667,"context_line":"        @wrap_instance_event(prefix\u003d\u0027api\u0027)"},{"line_number":3668,"context_line":"        def detach_volume(self, context, instance, bdm):"},{"line_number":3669,"context_line":"            self._local_cleanup_bdm_volumes(bdms\u003dbdm, instance\u003dinstance,"},{"line_number":3670,"context_line":"                                            context\u003dcontext)"},{"line_number":3671,"context_line":""},{"line_number":3672,"context_line":"        try:"},{"line_number":3673,"context_line":"            self.volume_api.begin_detaching(context, volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff82abbf_228d7cd2","line":3670,"range":{"start_line":3669,"start_character":44,"end_line":3670,"end_character":59},"updated":"2017-11-27 21:13:54.000000000","message":"nit: why do we need to use kwargs here?","commit_id":"a7bee38792b5c46b55ad600516424c4a2fc2329d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"722ae8d86750da3e7738b4cd1ab517ed906e3d5c","unresolved":false,"context_lines":[{"line_number":3675,"context_line":"            raise exception.InvalidVolume(reason\u003dexc.format_message())"},{"line_number":3676,"context_line":"        bdms \u003d [objects.BlockDeviceMapping.get_by_volume_id("},{"line_number":3677,"context_line":"                context, volume[\u0027id\u0027], instance.uuid)]"},{"line_number":3678,"context_line":"        self._record_action_start("},{"line_number":3679,"context_line":"            context, instance,"},{"line_number":3680,"context_line":"            instance_actions.DETACH_VOLUME)"},{"line_number":3681,"context_line":"        detach_volume(self, context, instance, bdms)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff82abbf_823808ee","line":3678,"range":{"start_line":3678,"start_character":13,"end_line":3678,"end_character":33},"updated":"2017-11-27 21:13:54.000000000","message":"Do we have anything asserting this is called?","commit_id":"a7bee38792b5c46b55ad600516424c4a2fc2329d"}],"nova/compute/manager.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c9759a149bb024c28c55e3243646b3ab42657c5","unresolved":false,"context_lines":[{"line_number":5064,"context_line":"        return do_reserve()"},{"line_number":5065,"context_line":""},{"line_number":5066,"context_line":"    @wrap_exception()"},{"line_number":5067,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"},{"line_number":5068,"context_line":"    @wrap_instance_fault"},{"line_number":5069,"context_line":"    def attach_volume(self, context, instance, bdm):"},{"line_number":5070,"context_line":"        \"\"\"Attach a volume to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_bb79bfc8","line":5067,"range":{"start_line":5067,"start_character":0,"end_line":5067,"end_character":42},"updated":"2017-11-17 08:41:25.000000000","message":"need some tests to capture these in https://github.com/openstack/nova/blob/66a2b50a3eec089999be2d127dc5f58a4d6bb1f4/nova/tests/unit/compute/test_compute_mgr.py","commit_id":"b4b78789fc25f93b4518b9941fcab19df71a738e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c9759a149bb024c28c55e3243646b3ab42657c5","unresolved":false,"context_lines":[{"line_number":5207,"context_line":"                                instance\u003dinstance)"},{"line_number":5208,"context_line":""},{"line_number":5209,"context_line":"    @wrap_exception()"},{"line_number":5210,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"},{"line_number":5211,"context_line":"    @wrap_instance_fault"},{"line_number":5212,"context_line":"    def detach_volume(self, context, volume_id, instance, attachment_id\u003dNone):"},{"line_number":5213,"context_line":"        \"\"\"Detach a volume from an instance."}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_5b7acbb9","line":5210,"range":{"start_line":5210,"start_character":0,"end_line":5210,"end_character":42},"updated":"2017-11-17 08:41:25.000000000","message":"ditto","commit_id":"b4b78789fc25f93b4518b9941fcab19df71a738e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c9759a149bb024c28c55e3243646b3ab42657c5","unresolved":false,"context_lines":[{"line_number":5372,"context_line":"        return (comp_ret, new_cinfo)"},{"line_number":5373,"context_line":""},{"line_number":5374,"context_line":"    @wrap_exception()"},{"line_number":5375,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"},{"line_number":5376,"context_line":"    @wrap_instance_fault"},{"line_number":5377,"context_line":"    def swap_volume(self, context, old_volume_id, new_volume_id, instance,"},{"line_number":5378,"context_line":"                    new_attachment_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_3b4f0f94","line":5375,"range":{"start_line":5375,"start_character":0,"end_line":5375,"end_character":42},"updated":"2017-11-17 08:41:25.000000000","message":"ditto","commit_id":"b4b78789fc25f93b4518b9941fcab19df71a738e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"63a66ecac48ba1998fd35f82698992daf4993dc0","unresolved":false,"context_lines":[{"line_number":5064,"context_line":"        return do_reserve()"},{"line_number":5065,"context_line":""},{"line_number":5066,"context_line":"    @wrap_exception()"},{"line_number":5067,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"},{"line_number":5068,"context_line":"    @wrap_instance_fault"},{"line_number":5069,"context_line":"    def attach_volume(self, context, instance, bdm):"},{"line_number":5070,"context_line":"        \"\"\"Attach a volume to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_d97d49e8","line":5067,"updated":"2017-11-20 17:39:33.000000000","message":"Need to add assertions to test_compute_mgr tests (or test_compute?) that the EventReporter is being called for these methods.","commit_id":"6cad511239b8e7bfc405f04bf2843a292098fca0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"8f84c602755d48a0a1ac6e436c8de4f3acd8ba5a","unresolved":false,"context_lines":[{"line_number":5064,"context_line":"        return do_reserve()"},{"line_number":5065,"context_line":""},{"line_number":5066,"context_line":"    @wrap_exception()"},{"line_number":5067,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"},{"line_number":5068,"context_line":"    @wrap_instance_fault"},{"line_number":5069,"context_line":"    def attach_volume(self, context, instance, bdm):"},{"line_number":5070,"context_line":"        \"\"\"Attach a volume to an instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_be0e1de3","line":5067,"in_reply_to":"ff82abbf_d97d49e8","updated":"2017-11-21 03:56:04.000000000","message":"sure, will add it.","commit_id":"6cad511239b8e7bfc405f04bf2843a292098fca0"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":19853,"name":"Nguyen Hung Phuong","email":"phuongnh@vn.fujitsu.com","username":"phuongnh"},"change_message_id":"874e01a5e38818c2d843c5b9ff10c78293f399b7","unresolved":false,"context_lines":[{"line_number":5316,"context_line":"        self.assertRaises(exception.VolumeTaggedAttachNotSupported,"},{"line_number":5317,"context_line":"                          self.compute_api.attach_volume, self.context,"},{"line_number":5318,"context_line":"                          instance, volume[\u0027id\u0027], tag\u003d\u0027foo\u0027)"},{"line_number":5319,"context_line":"        mock_record.assert_called_once_with("},{"line_number":5320,"context_line":"            self.context, instance, instance_actions.ATTACH_VOLUME)"},{"line_number":5321,"context_line":""},{"line_number":5322,"context_line":"    def test_create_with_networks_max_count_none(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_297a65b9","line":5319,"range":{"start_line":5319,"start_character":8,"end_line":5319,"end_character":19},"updated":"2017-11-02 08:51:22.000000000","message":"mock_attach ?","commit_id":"3468bcb1af617ff268f293c240d809d0ffc6ff10"}],"nova/volume/cinder.py":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"d0f19da4212779ef8c87fdb43bca7880262d6eec","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        cinderclient(context).volumes.roll_detaching(volume_id)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    @translate_volume_exception"},{"line_number":377,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"},{"line_number":378,"context_line":"    def attach(self, context, volume_id, instance_uuid, mountpoint, mode\u003d\u0027rw\u0027):"},{"line_number":379,"context_line":"        cinderclient(context).volumes.attach(volume_id, instance_uuid,"},{"line_number":380,"context_line":"                                             mountpoint, mode\u003dmode)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_42406708","line":377,"range":{"start_line":377,"start_character":5,"end_line":377,"end_character":24},"updated":"2017-11-20 11:55:33.000000000","message":"from nova.compute.utils import wrap_instance_event","commit_id":"6cad511239b8e7bfc405f04bf2843a292098fca0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e169e53e40a2d1abd72bc4b18fbbcf771996b5c","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        cinderclient(context).volumes.roll_detaching(volume_id)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    @translate_volume_exception"},{"line_number":377,"context_line":"    @wrap_instance_event(prefix\u003d\u0027compute\u0027)"},{"line_number":378,"context_line":"    def attach(self, context, volume_id, instance_uuid, mountpoint, mode\u003d\u0027rw\u0027):"},{"line_number":379,"context_line":"        cinderclient(context).volumes.attach(volume_id, instance_uuid,"},{"line_number":380,"context_line":"                                             mountpoint, mode\u003dmode)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_79e67deb","line":377,"range":{"start_line":377,"start_character":5,"end_line":377,"end_character":24},"in_reply_to":"ff82abbf_42406708","updated":"2017-11-20 17:35:47.000000000","message":"Why is this even needed? This seems like a mistake.","commit_id":"6cad511239b8e7bfc405f04bf2843a292098fca0"}],"releasenotes/notes/fill-instance-action-record-gaps-14b36eba313d6d87.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f338666c965259ea3ce856c29c19ce9084241d7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"    The following instance action records has been added:"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ff82abbf_d92f89f4","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":7},"updated":"2017-11-20 17:36:42.000000000","message":"This shouldn\u0027t be an upgrade note, it\u0027s a new feature.","commit_id":"6cad511239b8e7bfc405f04bf2843a292098fca0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3e169e53e40a2d1abd72bc4b18fbbcf771996b5c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"     * Attaching/detaching interfaces."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"     * Attaching/detaching volumes."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"     * Swap volume."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ff82abbf_99eb41af","line":11,"range":{"start_line":9,"start_character":5,"end_line":11,"end_character":19},"updated":"2017-11-20 17:35:47.000000000","message":"List these out using the actual instance action record names:\n\n* attach_volume\n* detach_volume\n* swap_volume","commit_id":"6cad511239b8e7bfc405f04bf2843a292098fca0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"8f84c602755d48a0a1ac6e436c8de4f3acd8ba5a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"     * Attaching/detaching interfaces."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"     * Attaching/detaching volumes."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"     * Swap volume."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ff82abbf_7ef895c3","line":11,"range":{"start_line":9,"start_character":5,"end_line":11,"end_character":19},"in_reply_to":"ff82abbf_99eb41af","updated":"2017-11-21 03:56:04.000000000","message":"OK","commit_id":"6cad511239b8e7bfc405f04bf2843a292098fca0"}]}
