)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"14702a1188c836ceb56779972f7175975daea00d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2017-04-06 15:04:04 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add ability to extend \u0027in-use\u0027 volume"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Blueprint: extend-attached-volume"},{"line_number":10,"context_line":"Change-Id: I60c8ea9eb0bbcfe41f5f0a30ed8dc67bdcab3ebc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"df140735_9b70d474","line":8,"updated":"2017-05-30 20:45:15.000000000","message":"There should be a body to this commit message.","commit_id":"d5de17ba0b97b51a4f7c8fc36b9b3280691e42e8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0bb1faa970b2106d6e6cd497fed00230d36f9ba9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"the appropriate actions for the host and guest to detect the new volume size."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Blueprint: extend-attached-volume"},{"line_number":16,"context_line":"Co-Authored-By: TommyLike(tommylikehu@gmail.com)"},{"line_number":17,"context_line":"APIImpact"},{"line_number":18,"context_line":"Change-Id: I60c8ea9eb0bbcfe41f5f0a30ed8dc67bdcab3ebc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5f201791_b8b59ecf","line":16,"range":{"start_line":16,"start_character":16,"end_line":16,"end_character":48},"updated":"2017-06-23 18:56:28.000000000","message":"If you want this to be parsed properly, it should be the same as your git committer info:\n\nTommyLike \u003ctommylikehu@gmail.com\u003e","commit_id":"808aa3ac492e6a63442c5cfcf507ff444dedeee8"}],"cinder/api/contrib/volume_actions.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0bb1faa970b2106d6e6cd497fed00230d36f9ba9","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dsix.text_type(error))"},{"line_number":304,"context_line":"        return {\u0027os-volume_upload_image\u0027: response}"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":307,"context_line":"    @wsgi.action(\u0027os-extend\u0027)"},{"line_number":308,"context_line":"    def _extend(self, req, id, body):"},{"line_number":309,"context_line":"        \"\"\"Extend size of volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_38c18e2f","line":306,"updated":"2017-06-23 18:56:28.000000000","message":"Isn\u0027t this an unrelated change?","commit_id":"808aa3ac492e6a63442c5cfcf507ff444dedeee8"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bf678771ca9f3c07b2813a1dfa0b2e01ec281c6e","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        except exception.InvalidVolume as error:"},{"line_number":322,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003derror.msg)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    @wsgi.action(\u0027os-update_readonly_flag\u0027)"},{"line_number":327,"context_line":"    def _volume_readonly_update(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_93e5bade","side":"PARENT","line":324,"range":{"start_line":324,"start_character":8,"end_line":324,"end_character":62},"updated":"2017-07-06 17:33:31.000000000","message":"Is this not needed any more?","commit_id":"af77fe9dbc7bcfff6462ac93b1415cb8458089f0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"465ad506951b36ff0d6fdb4aedf800f471f3570c","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        except exception.InvalidVolume as error:"},{"line_number":322,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003derror.msg)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    @wsgi.action(\u0027os-update_readonly_flag\u0027)"},{"line_number":327,"context_line":"    def _volume_readonly_update(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_b6a0a4f5","side":"PARENT","line":324,"range":{"start_line":324,"start_character":8,"end_line":324,"end_character":62},"in_reply_to":"3f1d235d_93e5bade","updated":"2017-07-06 17:38:24.000000000","message":"It\u0027s moved up to a decorator now:\n\n@wsgi.response(http_client.ACCEPTED)","commit_id":"af77fe9dbc7bcfff6462ac93b1415cb8458089f0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1bca06da000f04748e01998669ceeeff4a5c6238","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        except exception.InvalidVolume as error:"},{"line_number":322,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003derror.msg)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    @wsgi.action(\u0027os-update_readonly_flag\u0027)"},{"line_number":327,"context_line":"    def _volume_readonly_update(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_36c3748b","side":"PARENT","line":324,"range":{"start_line":324,"start_character":8,"end_line":324,"end_character":62},"in_reply_to":"3f1d235d_b6a0a4f5","updated":"2017-07-06 17:40:55.000000000","message":"Got it.  Thanks.","commit_id":"af77fe9dbc7bcfff6462ac93b1415cb8458089f0"}],"cinder/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0bb1faa970b2106d6e6cd497fed00230d36f9ba9","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"3.41"},{"line_number":343,"context_line":"----"},{"line_number":344,"context_line":"  Add ability to extend \u0027in-use\u0027 volume."}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f201791_b8ea3ea9","line":344,"updated":"2017-06-23 18:56:28.000000000","message":"This is pretty sparse. I\u0027d at least note that this will not be supported in all clouds since whether or not it works is dependent on several factors, including volume type, backing hypervisor for the related server instance, and the version of the nova-compute service that the server instance is running on.","commit_id":"808aa3ac492e6a63442c5cfcf507ff444dedeee8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7fd11141d1981c338d174afd45bf0fa50825e062","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"3.41"},{"line_number":343,"context_line":"----"},{"line_number":344,"context_line":"  Add ability to extend \u0027in-use\u0027 volume, this feature is depend on the"},{"line_number":345,"context_line":"  version of nova-compute service as well as several external factors,"},{"line_number":346,"context_line":"  user should be aware of the whole environment before using this feature."}],"source_content_type":"text/x-rst","patch_set":9,"id":"5f201791_33c4fb5e","line":344,"range":{"start_line":344,"start_character":39,"end_line":344,"end_character":45},"updated":"2017-06-26 05:46:29.000000000","message":". This","commit_id":"13d31875e46e8318e765c2d576efd01813bc7559"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7fd11141d1981c338d174afd45bf0fa50825e062","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"3.41"},{"line_number":343,"context_line":"----"},{"line_number":344,"context_line":"  Add ability to extend \u0027in-use\u0027 volume, this feature is depend on the"},{"line_number":345,"context_line":"  version of nova-compute service as well as several external factors,"},{"line_number":346,"context_line":"  user should be aware of the whole environment before using this feature."}],"source_content_type":"text/x-rst","patch_set":9,"id":"5f201791_73cef382","line":344,"range":{"start_line":344,"start_character":57,"end_line":344,"end_character":63},"updated":"2017-06-26 05:46:29.000000000","message":"dependent","commit_id":"13d31875e46e8318e765c2d576efd01813bc7559"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"a80c3b704f1b3fdd96da405e6bcd368d80a7cadc","unresolved":false,"context_lines":[{"line_number":349,"context_line":"  3. only iscsi and fibre channel volume types are supported on the"},{"line_number":350,"context_line":"     nova side currently."},{"line_number":351,"context_line":"  Administrator can disable this ability by updating the"},{"line_number":352,"context_line":"  \u0027volume:extend_attached_volume\u0027 policy rule."}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f201791_1d48c959","line":352,"range":{"start_line":352,"start_character":2,"end_line":352,"end_character":3},"updated":"2017-06-27 03:56:20.000000000","message":"double back ticks","commit_id":"0b1a54a52bdd64a01f6630171d45646dadadd231"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"a80c3b704f1b3fdd96da405e6bcd368d80a7cadc","unresolved":false,"context_lines":[{"line_number":349,"context_line":"  3. only iscsi and fibre channel volume types are supported on the"},{"line_number":350,"context_line":"     nova side currently."},{"line_number":351,"context_line":"  Administrator can disable this ability by updating the"},{"line_number":352,"context_line":"  \u0027volume:extend_attached_volume\u0027 policy rule."}],"source_content_type":"text/x-rst","patch_set":13,"id":"5f201791_9d6df9cd","line":352,"range":{"start_line":352,"start_character":32,"end_line":352,"end_character":33},"updated":"2017-06-27 03:56:20.000000000","message":"here too","commit_id":"0b1a54a52bdd64a01f6630171d45646dadadd231"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bc81705344bb8385f38b2faaed0cc9881e4d11b7","unresolved":false,"context_lines":[{"line_number":344,"context_line":"  Add ability to extend \u0027in-use\u0027 volume. User should be aware of the"},{"line_number":345,"context_line":"  whole environment before using this feature because it\u0027s dependent"},{"line_number":346,"context_line":"  on several external factors below:"},{"line_number":347,"context_line":"  1. nova-compute version - needs to be the latest for Pike."},{"line_number":348,"context_line":"  2. only the libvirt compute driver supports this currently."},{"line_number":349,"context_line":"  3. only iscsi and fibre channel volume types are supported on the"},{"line_number":350,"context_line":"     nova side currently."}],"source_content_type":"text/x-rst","patch_set":14,"id":"5f201791_fd516437","line":347,"updated":"2017-06-28 02:06:23.000000000","message":"Put a blank line before the numbered list for this to render properly in rst.\n\nSee: http://docs-draft.openstack.org/87/454287/14/check/gate-cinder-docs-ubuntu-xenial/0981a0f//doc/build/html/devref/api_microversion_history.html?highlight\u003drest%20api%20version%20history#id40","commit_id":"8a34f04c385b63af121d6f13ce861a04ddb5425b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bc81705344bb8385f38b2faaed0cc9881e4d11b7","unresolved":false,"context_lines":[{"line_number":348,"context_line":"  2. only the libvirt compute driver supports this currently."},{"line_number":349,"context_line":"  3. only iscsi and fibre channel volume types are supported on the"},{"line_number":350,"context_line":"     nova side currently."},{"line_number":351,"context_line":"  Administrator can disable this ability by updating the"},{"line_number":352,"context_line":"  ``volume:extend_attached_volume`` policy rule."}],"source_content_type":"text/x-rst","patch_set":14,"id":"5f201791_bd476c77","line":351,"updated":"2017-06-28 02:06:23.000000000","message":"Put a blank line before this sentence.","commit_id":"8a34f04c385b63af121d6f13ce861a04ddb5425b"}],"cinder/compute/nova.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"fcd5d2fa5b1323fef7cd752f411993bc878a2c7b","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        except request_exceptions.Timeout:"},{"line_number":310,"context_line":"            raise exception.APITimeout(service\u003d\u0027Nova\u0027)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def extend_volume(self, context, server_id, volume_id):"},{"line_number":313,"context_line":"        event \u003d self._get_volume_extended_event(server_id, volume_id)"},{"line_number":314,"context_line":"        self._send_events(context, [event])"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_d6481288","line":314,"range":{"start_line":312,"start_character":4,"end_line":314,"end_character":43},"updated":"2017-04-10 11:39:19.000000000","message":"As we could have multiply attachments, why don\u0027t use volume_ids here?","commit_id":"d5de17ba0b97b51a4f7c8fc36b9b3280691e42e8"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"df0934bdf0a5dc246fe0e19b4a1a0b2a9ff5029b","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        except request_exceptions.Timeout:"},{"line_number":310,"context_line":"            raise exception.APITimeout(service\u003d\u0027Nova\u0027)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def extend_volume(self, context, server_id, volume_id):"},{"line_number":313,"context_line":"        event \u003d self._get_volume_extended_event(server_id, volume_id)"},{"line_number":314,"context_line":"        self._send_events(context, [event])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_959f984f","line":314,"range":{"start_line":312,"start_character":4,"end_line":314,"end_character":43},"in_reply_to":"bff0334d_be7c2b83","updated":"2017-04-24 16:10:12.000000000","message":"Done. I see that all other calls act on single volume, server or attachment. I don\u0027t fully agree with having server_ids here for consistency reasons but that\u0027s not a big deal in the end.","commit_id":"d5de17ba0b97b51a4f7c8fc36b9b3280691e42e8"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"5f05ec60ccf8d5031435893b10c4c0c40d57c441","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        except request_exceptions.Timeout:"},{"line_number":310,"context_line":"            raise exception.APITimeout(service\u003d\u0027Nova\u0027)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def extend_volume(self, context, server_id, volume_id):"},{"line_number":313,"context_line":"        event \u003d self._get_volume_extended_event(server_id, volume_id)"},{"line_number":314,"context_line":"        self._send_events(context, [event])"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_be7c2b83","line":314,"range":{"start_line":312,"start_character":4,"end_line":314,"end_character":43},"in_reply_to":"bff0334d_cced1bf1","updated":"2017-04-11 02:26:17.000000000","message":"yes, you are right, should be \u0027server_ids\u0027, I mean we could define the method like:\n\ndef extend_volume(self, context, server_ids, volume_id)","commit_id":"d5de17ba0b97b51a4f7c8fc36b9b3280691e42e8"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"c5739615dca02fa19e72a4f535d1c149c901e881","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        except request_exceptions.Timeout:"},{"line_number":310,"context_line":"            raise exception.APITimeout(service\u003d\u0027Nova\u0027)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def extend_volume(self, context, server_id, volume_id):"},{"line_number":313,"context_line":"        event \u003d self._get_volume_extended_event(server_id, volume_id)"},{"line_number":314,"context_line":"        self._send_events(context, [event])"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_cced1bf1","line":314,"range":{"start_line":312,"start_character":4,"end_line":314,"end_character":43},"in_reply_to":"bff0334d_d6481288","updated":"2017-04-10 16:24:13.000000000","message":"There is only a single volume being extended at a time. You might be thinking about attachment_ids.\n\nWith that in mind, does your comment still apply? If so, what do you suggest we do instead?","commit_id":"d5de17ba0b97b51a4f7c8fc36b9b3280691e42e8"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5d65b2e23967584f894052b4952f9d1bacaefe8e","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        try:"},{"line_number":247,"context_line":"            response \u003d nova.server_external_events.create(events)"},{"line_number":248,"context_line":"        except nova_exceptions.NotFound:"},{"line_number":249,"context_line":"            LOG.debug(\u0027Nova returned NotFound for events: %s\u0027, events)"},{"line_number":250,"context_line":"        except Exception:"},{"line_number":251,"context_line":"            LOG.exception(_(\u0027Failed to notify nova on events: %s\u0027), events)"},{"line_number":252,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_007c43b3","line":249,"range":{"start_line":249,"start_character":16,"end_line":249,"end_character":21},"updated":"2017-05-31 09:07:58.000000000","message":"Is Debug appropriate here?  Is LOG.warning maybe better?","commit_id":"117c25c688604d1040f2bbee7db4b2cf579e7927"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"c53db38a3c59c20747a4a42fc24ba97cbae2a852","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        try:"},{"line_number":247,"context_line":"            response \u003d nova.server_external_events.create(events)"},{"line_number":248,"context_line":"        except nova_exceptions.NotFound:"},{"line_number":249,"context_line":"            LOG.debug(\u0027Nova returned NotFound for events: %s\u0027, events)"},{"line_number":250,"context_line":"        except Exception:"},{"line_number":251,"context_line":"            LOG.exception(_(\u0027Failed to notify nova on events: %s\u0027), events)"},{"line_number":252,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_043550f7","line":249,"range":{"start_line":249,"start_character":16,"end_line":249,"end_character":21},"in_reply_to":"df140735_007c43b3","updated":"2017-06-14 08:00:23.000000000","message":"Done","commit_id":"117c25c688604d1040f2bbee7db4b2cf579e7927"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5d65b2e23967584f894052b4952f9d1bacaefe8e","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                    response_error \u003d True"},{"line_number":262,"context_line":"                    continue"},{"line_number":263,"context_line":"                if code !\u003d 200:"},{"line_number":264,"context_line":"                    msg \u003d \u0027Nova event: %s returned with failed status\u0027"},{"line_number":265,"context_line":"                    LOG.warning(msg, event)"},{"line_number":266,"context_line":"                else:"},{"line_number":267,"context_line":"                    LOG.info(\u0027Nova event response: %s\u0027, event)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_a03b57e9","line":264,"range":{"start_line":264,"start_character":68,"end_line":264,"end_character":70},"updated":"2017-05-31 09:07:58.000000000","message":"Can we end with \u0027.\u0027 here please.","commit_id":"117c25c688604d1040f2bbee7db4b2cf579e7927"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"c53db38a3c59c20747a4a42fc24ba97cbae2a852","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                    response_error \u003d True"},{"line_number":262,"context_line":"                    continue"},{"line_number":263,"context_line":"                if code !\u003d 200:"},{"line_number":264,"context_line":"                    msg \u003d \u0027Nova event: %s returned with failed status\u0027"},{"line_number":265,"context_line":"                    LOG.warning(msg, event)"},{"line_number":266,"context_line":"                else:"},{"line_number":267,"context_line":"                    LOG.info(\u0027Nova event response: %s\u0027, event)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_e43b74e8","line":264,"range":{"start_line":264,"start_character":68,"end_line":264,"end_character":70},"in_reply_to":"df140735_a03b57e9","updated":"2017-06-14 08:00:23.000000000","message":"Done","commit_id":"117c25c688604d1040f2bbee7db4b2cf579e7927"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"a80c3b704f1b3fdd96da405e6bcd368d80a7cadc","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            response_error \u003d False"},{"line_number":186,"context_line":"            for event in response:"},{"line_number":187,"context_line":"                try:"},{"line_number":188,"context_line":"                    code \u003d event[\u0027code\u0027]"},{"line_number":189,"context_line":"                except KeyError:"},{"line_number":190,"context_line":"                    response_error \u003d True"},{"line_number":191,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f201791_9da299fb","line":188,"range":{"start_line":188,"start_character":20,"end_line":188,"end_character":40},"updated":"2017-06-27 03:56:20.000000000","message":"just use\n  code \u003d event.get(\u0027code\u0027)\n\nand check the ``code``, you can avoid try/except here\nit will make much more sense than using try/except here","commit_id":"0b1a54a52bdd64a01f6630171d45646dadadd231"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f1e82d42641097cb0798d1bb38f0e30a387e8f9c","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"NOVA_API_VERSION \u003d \"2.1\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"nova_extensions \u003d [ext for ext in"},{"line_number":89,"context_line":"                   nova_client.discover_extensions(NOVA_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_649ba165","line":86,"updated":"2017-07-05 20:24:00.000000000","message":"This is going to be wrong. The \"volume-extended\" event type won\u0027t be supported on the compute side until microversion 2.50, so you need to create the novaclient for the volume-extended request using 2.50.\n\nhttps://review.openstack.org/#/c/454322/25/nova/api/openstack/compute/schemas/server_external_events.py","commit_id":"e252d0db3d2b513cd71c320865a929b6fc54daf5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f98432c538d4af94765d4321d0e0a9433a8591a0","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            raise exception.APITimeout(service\u003d\u0027Nova\u0027)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def extend_volume(self, context, server_ids, volume_id):"},{"line_number":243,"context_line":"        api_version \u003d \u00272.50\u0027"},{"line_number":244,"context_line":"        events \u003d [self._get_volume_extended_event(server_id, volume_id)"},{"line_number":245,"context_line":"                  for server_id in server_ids]"},{"line_number":246,"context_line":"        self._send_events(context, events, api_version\u003dapi_version)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f1a1f67_0b7a6823","line":243,"range":{"start_line":243,"start_character":8,"end_line":243,"end_character":28},"updated":"2017-07-12 13:51:25.000000000","message":"This is going to change, the nova 2.50 microversion was taken by another patch.","commit_id":"2ab29f883ce3f4cc36420ada31c43f463b35e15e"}],"cinder/tests/unit/compute/test_nova.py":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"14702a1188c836ceb56779972f7175975daea00d","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        )"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def test_extend_volume(self):"},{"line_number":195,"context_line":"        with mock.patch.object(nova, \u0027novaclient\u0027) as mock_novaclient, \\"},{"line_number":196,"context_line":"                mock.patch.object(self.novaclient.server_external_events,"},{"line_number":197,"context_line":"                                  \u0027create\u0027) as \\"},{"line_number":198,"context_line":"                mock_create_event:"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_5bffdca9","line":195,"range":{"start_line":195,"start_character":70,"end_line":195,"end_character":72},"updated":"2017-05-30 20:45:15.000000000","message":"Is there a way to do this without the use of \u0027\\\u0027?","commit_id":"d5de17ba0b97b51a4f7c8fc36b9b3280691e42e8"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"14702a1188c836ceb56779972f7175975daea00d","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    def test_extend_volume(self):"},{"line_number":195,"context_line":"        with mock.patch.object(nova, \u0027novaclient\u0027) as mock_novaclient, \\"},{"line_number":196,"context_line":"                mock.patch.object(self.novaclient.server_external_events,"},{"line_number":197,"context_line":"                                  \u0027create\u0027) as \\"},{"line_number":198,"context_line":"                mock_create_event:"},{"line_number":199,"context_line":"            mock_novaclient.return_value \u003d self.novaclient"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_1b33a4ad","line":197,"range":{"start_line":197,"start_character":46,"end_line":197,"end_character":48},"updated":"2017-05-30 20:45:15.000000000","message":"ditto above","commit_id":"d5de17ba0b97b51a4f7c8fc36b9b3280691e42e8"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"d27598d25f312bbe2dd3470cb3f373b059cf1291","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def test_extend_volume(self):"},{"line_number":195,"context_line":"        server_ids \u003d [\u0027server-id-1\u0027, \u0027server-id-2\u0027]"},{"line_number":196,"context_line":"        with mock.patch.object(nova, \u0027novaclient\u0027) as mock_novaclient, \\"},{"line_number":197,"context_line":"                mock.patch.object(self.novaclient.server_external_events,"},{"line_number":198,"context_line":"                                  \u0027create\u0027) as mock_create_event:"},{"line_number":199,"context_line":"            mock_novaclient.return_value \u003d self.novaclient"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_fb7d906e","line":196,"range":{"start_line":196,"start_character":70,"end_line":196,"end_character":72},"updated":"2017-05-30 20:46:22.000000000","message":"Is there a way to do with without the \u0027\\\u0027?","commit_id":"117c25c688604d1040f2bbee7db4b2cf579e7927"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"c53db38a3c59c20747a4a42fc24ba97cbae2a852","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def test_extend_volume(self):"},{"line_number":195,"context_line":"        server_ids \u003d [\u0027server-id-1\u0027, \u0027server-id-2\u0027]"},{"line_number":196,"context_line":"        with mock.patch.object(nova, \u0027novaclient\u0027) as mock_novaclient, \\"},{"line_number":197,"context_line":"                mock.patch.object(self.novaclient.server_external_events,"},{"line_number":198,"context_line":"                                  \u0027create\u0027) as mock_create_event:"},{"line_number":199,"context_line":"            mock_novaclient.return_value \u003d self.novaclient"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_3f185973","line":196,"range":{"start_line":196,"start_character":70,"end_line":196,"end_character":72},"in_reply_to":"df140735_fb7d906e","updated":"2017-06-14 08:00:23.000000000","message":"It\u0027s easier to understand the logic with `\\` here, so most of the mock sentences in cinder are seperated with \u0027\\\u0027","commit_id":"117c25c688604d1040f2bbee7db4b2cf579e7927"}],"cinder/volume/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c3da11080226d4ab1004d73c24d4be0b101587ee","unresolved":false,"context_lines":[{"line_number":1269,"context_line":"    @wrap_check_policy"},{"line_number":1270,"context_line":"    def extend(self, context, volume, new_size):"},{"line_number":1271,"context_line":"        value \u003d {\u0027status\u0027: \u0027extending\u0027}"},{"line_number":1272,"context_line":"        expected \u003d {\u0027status\u0027: (\u0027available\u0027, \u0027in-use\u0027)}"},{"line_number":1273,"context_line":"        orig_status \u003d {\u0027status\u0027: volume.status}"},{"line_number":1274,"context_line":""},{"line_number":1275,"context_line":"        def _roll_back_status():"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_29bc1568","line":1272,"range":{"start_line":1272,"start_character":44,"end_line":1272,"end_character":52},"updated":"2017-06-20 15:07:21.000000000","message":"This is new API behavior and therefore you need a microversion for this, otherwise how do I as an end user know if this Cinder deployment can support even attempting to extend the size of an attached volume without dealing with an error?\n\nAlso, I think you should provide a specific policy rule for the attached extend scenario because (1) if the instance the volume is attached to is running on an Ocata compute which doesn\u0027t have the code for handling this, it\u0027s not going to work, so an operator probably wants to disable this API until their nova deployment is upgraded to Pike, and (2) not all compute drivers or volume types are going to be supported for this initially, so again an operator running a xen/hyperv/vmware/powervm and/or all rbd shop may want to disable this API via policy on the Cinder side.","commit_id":"a9d68ce2dbcec7b0a4301e5a307dece69de6c96f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0bb1faa970b2106d6e6cd497fed00230d36f9ba9","unresolved":false,"context_lines":[{"line_number":1286,"context_line":"                 resource\u003dvolume)"},{"line_number":1287,"context_line":"        return response"},{"line_number":1288,"context_line":""},{"line_number":1289,"context_line":"    @wrap_check_policy"},{"line_number":1290,"context_line":"    def extend(self, context, volume, new_size, support_attached\u003dFalse):"},{"line_number":1291,"context_line":"        value \u003d {\u0027status\u0027: \u0027extending\u0027}"},{"line_number":1292,"context_line":"        if support_attached:"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_b8035e73","line":1289,"range":{"start_line":1289,"start_character":5,"end_line":1289,"end_character":22},"updated":"2017-06-23 18:56:28.000000000","message":"As noted in an earlier patch set, there should probably be a specific policy rule for extending an in-use volume, which you either need to check explicitly in this code if support_attached is True, or create an extend_in_use method since the wrap_check_policy decorator works off the name of the function it\u0027s wrapping. I would think an explicit check is simpler, otherwise you\u0027d have to refactor some of this code.","commit_id":"808aa3ac492e6a63442c5cfcf507ff444dedeee8"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"02836b7e4ad8252aa2d1f0a5dfa36038317b05ea","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"                 resource\u003dvolume)"},{"line_number":1290,"context_line":"        return response"},{"line_number":1291,"context_line":""},{"line_number":1292,"context_line":"    def _extend(self, context, volume, new_size, attached\u003dFalse):"},{"line_number":1293,"context_line":"        value \u003d {\u0027status\u0027: \u0027extending\u0027}"},{"line_number":1294,"context_line":"        if attached:"},{"line_number":1295,"context_line":"            expected \u003d {\u0027status\u0027: \u0027in-use\u0027}"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_b0654cb7","line":1292,"range":{"start_line":1292,"start_character":4,"end_line":1292,"end_character":65},"updated":"2017-07-06 16:42:27.000000000","message":"We\u0027re going to need something to deal with reserved here.  We won\u0027t need to treat it as attached (ie make the update calls to nova) but we will need to allow that case, most likely add it to the else expected case.","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"421e663c773a3c43c4b1249f6472514ca2c19f04","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"                 resource\u003dvolume)"},{"line_number":1290,"context_line":"        return response"},{"line_number":1291,"context_line":""},{"line_number":1292,"context_line":"    def _extend(self, context, volume, new_size, attached\u003dFalse):"},{"line_number":1293,"context_line":"        value \u003d {\u0027status\u0027: \u0027extending\u0027}"},{"line_number":1294,"context_line":"        if attached:"},{"line_number":1295,"context_line":"            expected \u003d {\u0027status\u0027: \u0027in-use\u0027}"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_82e626e8","line":1292,"range":{"start_line":1292,"start_character":4,"end_line":1292,"end_character":65},"in_reply_to":"3f1d235d_25c8d871","updated":"2017-07-10 21:40:31.000000000","message":"If I understand the request correctly, the \"expected\" dict below should have \u0027reserved\u0027 in it, somewhere, either for being able to extend an attached volume or being able to extend an available volume, is that correct?\n\nToday if I try and extend a reserved volume, it would fail because of the existing check at https://review.openstack.org/#/c/454287/21/cinder/volume/api.py@a1295\n\nIf we changed that here, it would be an API behavior change, correct? Which means it would have to be part of this microversion.\n\nSo does that mean you\u0027re asking that we allow extending a reserved volume, attached or not (I guess it wouldn\u0027t really be \u0027attached\u0027, it would be in the process of being attached)? If we don\u0027t want to support extending the size of a reserved volume, then I don\u0027t see how there is anything to do here.\n\n*or* are you just asking that we put a comment in here saying you can\u0027t extend the size of a \u0027reserved\u0027 volume?","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"e2d3a38e892b01f4583f0fc367303b6e431ede0c","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"                 resource\u003dvolume)"},{"line_number":1290,"context_line":"        return response"},{"line_number":1291,"context_line":""},{"line_number":1292,"context_line":"    def _extend(self, context, volume, new_size, attached\u003dFalse):"},{"line_number":1293,"context_line":"        value \u003d {\u0027status\u0027: \u0027extending\u0027}"},{"line_number":1294,"context_line":"        if attached:"},{"line_number":1295,"context_line":"            expected \u003d {\u0027status\u0027: \u0027in-use\u0027}"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_d6b73cd8","line":1292,"range":{"start_line":1292,"start_character":4,"end_line":1292,"end_character":65},"in_reply_to":"3f1d235d_82e626e8","updated":"2017-07-11 02:26:34.000000000","message":"Right, so today if you tried to extend and the volume was in the reserved state (shelved instance or whatever) the extend call would fail.  There is enough info in the exception mesg to figure that out, but the question is do we just want to add \"reserved\" to the expected/allowed cases?  I don\u0027t think there\u0027s a  risk to allowing it.","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5b70d36f22d4eb11af783dbec3d597f98c53d35b","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"                 resource\u003dvolume)"},{"line_number":1290,"context_line":"        return response"},{"line_number":1291,"context_line":""},{"line_number":1292,"context_line":"    def _extend(self, context, volume, new_size, attached\u003dFalse):"},{"line_number":1293,"context_line":"        value \u003d {\u0027status\u0027: \u0027extending\u0027}"},{"line_number":1294,"context_line":"        if attached:"},{"line_number":1295,"context_line":"            expected \u003d {\u0027status\u0027: \u0027in-use\u0027}"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_58b468d1","line":1292,"range":{"start_line":1292,"start_character":4,"end_line":1292,"end_character":65},"in_reply_to":"3f1d235d_988c4036","updated":"2017-07-11 12:52:38.000000000","message":"Is there some use case I\u0027m missing where not being able to extend a reserved volume is a problem? Is \u0027reserved\u0027 going to be different for a v2 vs v3.27 volume that is getting attached?","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b319d80af419185a54f5af504b66062b132d94ba","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"                 resource\u003dvolume)"},{"line_number":1290,"context_line":"        return response"},{"line_number":1291,"context_line":""},{"line_number":1292,"context_line":"    def _extend(self, context, volume, new_size, attached\u003dFalse):"},{"line_number":1293,"context_line":"        value \u003d {\u0027status\u0027: \u0027extending\u0027}"},{"line_number":1294,"context_line":"        if attached:"},{"line_number":1295,"context_line":"            expected \u003d {\u0027status\u0027: \u0027in-use\u0027}"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_d008c892","line":1292,"range":{"start_line":1292,"start_character":4,"end_line":1292,"end_character":65},"in_reply_to":"3f1d235d_b0654cb7","updated":"2017-07-06 16:50:45.000000000","message":"Do you *need* to accept reserved here? Things get a bit racy if you do, because the volume could be reserved when you request to extend it but then attached once it\u0027s done getting extended. It could work, and the volume manager code is already checking attachments to see if the volume status should go back to in-use or available and uses that to determine if it should call nova. Maybe doesn\u0027t hurt, but it does expose the operation to some more races.","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"f325be9e15462682bfff171fc073250701eec88f","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"                 resource\u003dvolume)"},{"line_number":1290,"context_line":"        return response"},{"line_number":1291,"context_line":""},{"line_number":1292,"context_line":"    def _extend(self, context, volume, new_size, attached\u003dFalse):"},{"line_number":1293,"context_line":"        value \u003d {\u0027status\u0027: \u0027extending\u0027}"},{"line_number":1294,"context_line":"        if attached:"},{"line_number":1295,"context_line":"            expected \u003d {\u0027status\u0027: \u0027in-use\u0027}"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_25c8d871","line":1292,"range":{"start_line":1292,"start_character":4,"end_line":1292,"end_character":65},"in_reply_to":"3f1d235d_d008c892","updated":"2017-07-06 20:48:05.000000000","message":"yeah, I\u0027m not necessarily stating we have to support extend in the reserved case, but just that we\u0027re explicit either way.  I\u0027m fine with avoiding races and not allowing it, I\u0027m also fine if folks want to allow it.  I just want it to be explicit and be sure it\u0027s documented.","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ad8b6227d94a6defb77f39f7ed1376545da032b8","unresolved":false,"context_lines":[{"line_number":1289,"context_line":"                 resource\u003dvolume)"},{"line_number":1290,"context_line":"        return response"},{"line_number":1291,"context_line":""},{"line_number":1292,"context_line":"    def _extend(self, context, volume, new_size, attached\u003dFalse):"},{"line_number":1293,"context_line":"        value \u003d {\u0027status\u0027: \u0027extending\u0027}"},{"line_number":1294,"context_line":"        if attached:"},{"line_number":1295,"context_line":"            expected \u003d {\u0027status\u0027: \u0027in-use\u0027}"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_988c4036","line":1292,"range":{"start_line":1292,"start_character":4,"end_line":1292,"end_character":65},"in_reply_to":"3f1d235d_d6b73cd8","updated":"2017-07-11 12:51:31.000000000","message":"I don\u0027t think so, no. I don\u0027t think we should add support for extending a reserved volume. For one thing, it\u0027s close to the end of the cycle and we don\u0027t have a great way to test that in a non-racy way, which is the problem with extending a reserved volume in the first place.","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"02836b7e4ad8252aa2d1f0a5dfa36038317b05ea","unresolved":false,"context_lines":[{"line_number":1390,"context_line":"    def extend(self, context, volume, new_size):"},{"line_number":1391,"context_line":"        self._extend(context, volume, new_size, attached\u003dFalse)"},{"line_number":1392,"context_line":""},{"line_number":1393,"context_line":"    # NOTE(tommylikehu): New method is added here so that administrator"},{"line_number":1394,"context_line":"    # can enable/disable this ability by editing the policy file if the"},{"line_number":1395,"context_line":"    # cloud environment doesn\u0027t allow this operation."},{"line_number":1396,"context_line":"    @wrap_check_policy"},{"line_number":1397,"context_line":"    def extend_attached_volume(self, context, volume, new_size):"},{"line_number":1398,"context_line":"        self._extend(context, volume, new_size, attached\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_b0d78c4b","line":1395,"range":{"start_line":1393,"start_character":3,"end_line":1395,"end_character":53},"updated":"2017-07-06 16:42:27.000000000","message":"appreciate the comment, wish there was a better way to go about this but this works","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"f325be9e15462682bfff171fc073250701eec88f","unresolved":false,"context_lines":[{"line_number":1390,"context_line":"    def extend(self, context, volume, new_size):"},{"line_number":1391,"context_line":"        self._extend(context, volume, new_size, attached\u003dFalse)"},{"line_number":1392,"context_line":""},{"line_number":1393,"context_line":"    # NOTE(tommylikehu): New method is added here so that administrator"},{"line_number":1394,"context_line":"    # can enable/disable this ability by editing the policy file if the"},{"line_number":1395,"context_line":"    # cloud environment doesn\u0027t allow this operation."},{"line_number":1396,"context_line":"    @wrap_check_policy"},{"line_number":1397,"context_line":"    def extend_attached_volume(self, context, volume, new_size):"},{"line_number":1398,"context_line":"        self._extend(context, volume, new_size, attached\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_65a5b0a1","line":1395,"range":{"start_line":1393,"start_character":3,"end_line":1395,"end_character":53},"in_reply_to":"3f1d235d_908130c6","updated":"2017-07-06 20:48:05.000000000","message":"Yeah, to be clear; the part I don\u0027t like is the two methods extend and extend_attached_volume.  Sort of like the way I loathe \"detach\" and \"force-detach\".  I don\u0027t  have a good alternative to suggest, but our API is bloated and sucky as it is.","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f6c3cb74bdab50ce83dbd9229e0d8f2185c189cb","unresolved":false,"context_lines":[{"line_number":1390,"context_line":"    def extend(self, context, volume, new_size):"},{"line_number":1391,"context_line":"        self._extend(context, volume, new_size, attached\u003dFalse)"},{"line_number":1392,"context_line":""},{"line_number":1393,"context_line":"    # NOTE(tommylikehu): New method is added here so that administrator"},{"line_number":1394,"context_line":"    # can enable/disable this ability by editing the policy file if the"},{"line_number":1395,"context_line":"    # cloud environment doesn\u0027t allow this operation."},{"line_number":1396,"context_line":"    @wrap_check_policy"},{"line_number":1397,"context_line":"    def extend_attached_volume(self, context, volume, new_size):"},{"line_number":1398,"context_line":"        self._extend(context, volume, new_size, attached\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_908130c6","line":1395,"range":{"start_line":1393,"start_character":3,"end_line":1395,"end_character":53},"in_reply_to":"3f1d235d_b0d78c4b","updated":"2017-07-06 16:52:47.000000000","message":"I\u0027m sure you can check the policy rules explicitly in the REST API controller code before this, but I\u0027m not sure if Cinder does that anywhere today. If/when cinder does policy in code, it also gets easier to do that, e.g. stuff like this:\n\nhttps://github.com/openstack/nova/blob/e2d0442b5eea1371367ad3378e6701f425b92afe/nova/api/openstack/compute/volumes.py#L325","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"}],"cinder/volume/manager.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"fcd5d2fa5b1323fef7cd752f411993bc878a2c7b","unresolved":false,"context_lines":[{"line_number":2197,"context_line":""},{"line_number":2198,"context_line":"        if orig_volume_status \u003d\u003d \u0027in-use\u0027:"},{"line_number":2199,"context_line":"            nova_api \u003d compute.API()"},{"line_number":2200,"context_line":"            for attachment in attachments:"},{"line_number":2201,"context_line":"                instance_uuid \u003d attachment.instance_uuid"},{"line_number":2202,"context_line":"                nova_api.extend_volume(context, instance_uuid, volume.id)"},{"line_number":2203,"context_line":""},{"line_number":2204,"context_line":"        pool \u003d vol_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":2205,"context_line":"        if pool is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_9623aabd","line":2202,"range":{"start_line":2200,"start_character":10,"end_line":2202,"end_character":73},"updated":"2017-04-10 11:39:19.000000000","message":"What should we do if some of the extend_volume API fail?","commit_id":"d5de17ba0b97b51a4f7c8fc36b9b3280691e42e8"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"c5739615dca02fa19e72a4f535d1c149c901e881","unresolved":false,"context_lines":[{"line_number":2197,"context_line":""},{"line_number":2198,"context_line":"        if orig_volume_status \u003d\u003d \u0027in-use\u0027:"},{"line_number":2199,"context_line":"            nova_api \u003d compute.API()"},{"line_number":2200,"context_line":"            for attachment in attachments:"},{"line_number":2201,"context_line":"                instance_uuid \u003d attachment.instance_uuid"},{"line_number":2202,"context_line":"                nova_api.extend_volume(context, instance_uuid, volume.id)"},{"line_number":2203,"context_line":""},{"line_number":2204,"context_line":"        pool \u003d vol_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":2205,"context_line":"        if pool is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_ccff5ba9","line":2202,"range":{"start_line":2200,"start_character":10,"end_line":2202,"end_character":73},"in_reply_to":"bff0334d_9623aabd","updated":"2017-04-10 16:24:13.000000000","message":"What do you suggest we do? Should we cumulate API call results and log on failure? Raise error at the API? Change volume status? Or attachment status? (I will need to learn/read about that new attachment concept)\n\nIf Cinder fails to contact Nova but the volume successfully extends, is it still considered a failure from the POV of Cinder? The solution would be to call Nova API again without extending the volume again.","commit_id":"d5de17ba0b97b51a4f7c8fc36b9b3280691e42e8"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"5f05ec60ccf8d5031435893b10c4c0c40d57c441","unresolved":false,"context_lines":[{"line_number":2197,"context_line":""},{"line_number":2198,"context_line":"        if orig_volume_status \u003d\u003d \u0027in-use\u0027:"},{"line_number":2199,"context_line":"            nova_api \u003d compute.API()"},{"line_number":2200,"context_line":"            for attachment in attachments:"},{"line_number":2201,"context_line":"                instance_uuid \u003d attachment.instance_uuid"},{"line_number":2202,"context_line":"                nova_api.extend_volume(context, instance_uuid, volume.id)"},{"line_number":2203,"context_line":""},{"line_number":2204,"context_line":"        pool \u003d vol_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":2205,"context_line":"        if pool is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_3e681bb7","line":2202,"range":{"start_line":2200,"start_character":10,"end_line":2202,"end_character":73},"in_reply_to":"bff0334d_ccff5ba9","updated":"2017-04-11 02:26:17.000000000","message":"I am ok if we just log out the error messages, personally think maybe this needs more discussion from nova side on how to deal if succeed in cinder, but failed in nova\u0027s extend process.","commit_id":"d5de17ba0b97b51a4f7c8fc36b9b3280691e42e8"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5d65b2e23967584f894052b4952f9d1bacaefe8e","unresolved":false,"context_lines":[{"line_number":2186,"context_line":"        QUOTAS.commit(context, reservations, project_id\u003dproject_id)"},{"line_number":2187,"context_line":""},{"line_number":2188,"context_line":"        attachments \u003d volume.volume_attachment"},{"line_number":2189,"context_line":"        LOG.info(attachments)"},{"line_number":2190,"context_line":"        if not attachments:"},{"line_number":2191,"context_line":"            orig_volume_status \u003d \u0027available\u0027"},{"line_number":2192,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_c32bf57f","line":2189,"range":{"start_line":2189,"start_character":8,"end_line":2189,"end_character":29},"updated":"2017-05-31 09:07:58.000000000","message":"This log message looks like it was left here for debug purposes.  Can you remove please or add some text so that there is context around it?  Thanks!","commit_id":"117c25c688604d1040f2bbee7db4b2cf579e7927"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"c53db38a3c59c20747a4a42fc24ba97cbae2a852","unresolved":false,"context_lines":[{"line_number":2186,"context_line":"        QUOTAS.commit(context, reservations, project_id\u003dproject_id)"},{"line_number":2187,"context_line":""},{"line_number":2188,"context_line":"        attachments \u003d volume.volume_attachment"},{"line_number":2189,"context_line":"        LOG.info(attachments)"},{"line_number":2190,"context_line":"        if not attachments:"},{"line_number":2191,"context_line":"            orig_volume_status \u003d \u0027available\u0027"},{"line_number":2192,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_448ea8d0","line":2189,"range":{"start_line":2189,"start_character":8,"end_line":2189,"end_character":29},"in_reply_to":"df140735_c32bf57f","updated":"2017-06-14 08:00:23.000000000","message":"Done","commit_id":"117c25c688604d1040f2bbee7db4b2cf579e7927"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"e8e7cd0c28bee2f296efbce9cb993afdb09c27ca","unresolved":false,"context_lines":[{"line_number":2503,"context_line":"            nova_api \u003d compute.API()"},{"line_number":2504,"context_line":"            instance_uuids \u003d [attachment.instance_uuid"},{"line_number":2505,"context_line":"                              for attachment in attachments]"},{"line_number":2506,"context_line":"            nova_api.extend_volume(context, instance_uuids, volume.id)"},{"line_number":2507,"context_line":""},{"line_number":2508,"context_line":"        pool \u003d vol_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":2509,"context_line":"        if pool is None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_3f922758","line":2506,"updated":"2017-07-06 19:22:02.000000000","message":"Maybe dumb question... but if cinder isn\u0027t being used by nova, what happens here? Does this blow up?","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"710e9998c1772d64a8cf089ad5f98c7b76ebc2aa","unresolved":false,"context_lines":[{"line_number":2503,"context_line":"            nova_api \u003d compute.API()"},{"line_number":2504,"context_line":"            instance_uuids \u003d [attachment.instance_uuid"},{"line_number":2505,"context_line":"                              for attachment in attachments]"},{"line_number":2506,"context_line":"            nova_api.extend_volume(context, instance_uuids, volume.id)"},{"line_number":2507,"context_line":""},{"line_number":2508,"context_line":"        pool \u003d vol_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":2509,"context_line":"        if pool is None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_6fb563cd","line":2506,"in_reply_to":"3f1d235d_3f6a2719","updated":"2017-07-07 23:29:23.000000000","message":"Beats me, but I guess you can run Cinder standalone w/o Nova and attach things to volumes, which would presumably put them in-use.","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"c92166aace2bf41564384cc2fd7b4aa6a1a7ccbc","unresolved":false,"context_lines":[{"line_number":2503,"context_line":"            nova_api \u003d compute.API()"},{"line_number":2504,"context_line":"            instance_uuids \u003d [attachment.instance_uuid"},{"line_number":2505,"context_line":"                              for attachment in attachments]"},{"line_number":2506,"context_line":"            nova_api.extend_volume(context, instance_uuids, volume.id)"},{"line_number":2507,"context_line":""},{"line_number":2508,"context_line":"        pool \u003d vol_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":2509,"context_line":"        if pool is None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_3f6a2719","line":2506,"in_reply_to":"3f1d235d_3f922758","updated":"2017-07-07 12:25:19.000000000","message":"Then the status should not be \u0027in-use\u0027 and this branch shouldn\u0027t be active, no?","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"f325be9e15462682bfff171fc073250701eec88f","unresolved":false,"context_lines":[{"line_number":2503,"context_line":"            nova_api \u003d compute.API()"},{"line_number":2504,"context_line":"            instance_uuids \u003d [attachment.instance_uuid"},{"line_number":2505,"context_line":"                              for attachment in attachments]"},{"line_number":2506,"context_line":"            nova_api.extend_volume(context, instance_uuids, volume.id)"},{"line_number":2507,"context_line":""},{"line_number":2508,"context_line":"        pool \u003d vol_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":2509,"context_line":"        if pool is None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_65d37005","line":2506,"in_reply_to":"3f1d235d_3f922758","updated":"2017-07-06 20:48:05.000000000","message":"Yup, we probably need to consider a configurable compute driver.  There are a few places we already have this problem in stand-alone but in most cases the calls don\u0027t make a ton of sense anyway, but we will need to address this going forward.  I don\u0027t think we should require anything of this patch but we should probably open a bug and fix it going forward at some point.","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fc40160c2bb2b1d2dc392d4fa49abd7e456180b5","unresolved":false,"context_lines":[{"line_number":2503,"context_line":"            nova_api \u003d compute.API()"},{"line_number":2504,"context_line":"            instance_uuids \u003d [attachment.instance_uuid"},{"line_number":2505,"context_line":"                              for attachment in attachments]"},{"line_number":2506,"context_line":"            nova_api.extend_volume(context, instance_uuids, volume.id)"},{"line_number":2507,"context_line":""},{"line_number":2508,"context_line":"        pool \u003d vol_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":2509,"context_line":"        if pool is None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_9ce25ed4","line":2506,"in_reply_to":"3f1d235d_65d37005","updated":"2017-07-07 01:33:05.000000000","message":"What happens if you try to attach a volume to an instance that isn\u0027t nova? Does it just get tracked as some resource uuid, like an Ironic baremetal node?\n\nFWIW, this code won\u0027t blow up - the code is handling the response checking from nova and if nova returns a 500 it just logs an error. I already caught this in testing with nova-api returning a 500 earlier today. Cinder was fine and continued along.","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d2e8b6f5d3b72bf1367c8b48d8a57e7bffc98b76","unresolved":false,"context_lines":[{"line_number":2503,"context_line":"            nova_api \u003d compute.API()"},{"line_number":2504,"context_line":"            instance_uuids \u003d [attachment.instance_uuid"},{"line_number":2505,"context_line":"                              for attachment in attachments]"},{"line_number":2506,"context_line":"            nova_api.extend_volume(context, instance_uuids, volume.id)"},{"line_number":2507,"context_line":""},{"line_number":2508,"context_line":"        pool \u003d vol_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":2509,"context_line":"        if pool is None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_dcec56bc","line":2506,"in_reply_to":"3f1d235d_9ce25ed4","updated":"2017-07-07 01:34:58.000000000","message":"I take this back. If there is no compute endpoint in the service catalog, ksa will likely raise an EndpointNotFound and that\u0027s not handled, so it would fail here yeah.","commit_id":"8430e2e27c3bd59347e5bb8574938c00127531db"}],"releasenotes/notes/support-extend-inuse-volume-9e4atf8912qaye99.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0bb1faa970b2106d6e6cd497fed00230d36f9ba9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added ability to extend \u0027in-use\u0027 volume"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5f201791_983f8224","line":3,"updated":"2017-06-23 18:56:28.000000000","message":"Same with the REST API version history doc, this is very sparse. Also, since there should be a separate dedicated policy rule for this, you should note the name of the policy rule for operators to be able to disable this if their cloud does not support it.","commit_id":"808aa3ac492e6a63442c5cfcf507ff444dedeee8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7fd11141d1981c338d174afd45bf0fa50825e062","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add ability to extend \u0027in-use\u0027 volume, this feature is depend on the"},{"line_number":4,"context_line":"    version of nova-compute service as well as several external factors,"},{"line_number":5,"context_line":"    user should be aware of the whole environment before using this feature."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"5f201791_f3956334","line":5,"range":{"start_line":3,"start_character":4,"end_line":5,"end_character":76},"updated":"2017-06-26 05:46:29.000000000","message":"Same comments as in the rest api version history doc. I\u0027d also mention that this API can be disabled via the ``volume:extend_attached_volume`` policy rule.\n\nBesides saying \"several external factors\", I think we should at least mention:\n\n1. nova-compute version - needs to be the latest for Pike\n2. only the libvirt compute driver supports this currently\n3. only iscsi and fibre_channel volume types are supported on the nova side currently","commit_id":"13d31875e46e8318e765c2d576efd01813bc7559"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"a80c3b704f1b3fdd96da405e6bcd368d80a7cadc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    * only iscsi and fibre channel volume types are supported on the nova side currently."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    Administrator can disable this ability by updating the"},{"line_number":13,"context_line":"    \u0027volume:extend_attached_volume\u0027 policy rule."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5f201791_fd8bcd64","line":13,"range":{"start_line":13,"start_character":4,"end_line":13,"end_character":5},"updated":"2017-06-27 03:56:20.000000000","message":"double back ticks here","commit_id":"0b1a54a52bdd64a01f6630171d45646dadadd231"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"a80c3b704f1b3fdd96da405e6bcd368d80a7cadc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    * only iscsi and fibre channel volume types are supported on the nova side currently."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    Administrator can disable this ability by updating the"},{"line_number":13,"context_line":"    \u0027volume:extend_attached_volume\u0027 policy rule."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5f201791_5dde416d","line":13,"range":{"start_line":13,"start_character":34,"end_line":13,"end_character":35},"updated":"2017-06-27 03:56:20.000000000","message":"here too","commit_id":"0b1a54a52bdd64a01f6630171d45646dadadd231"}]}
