)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"676f14f1938cdc91c52d8c490091b7ff68d7e50d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alessandro Pilotti \u003capilotti@cloudbasesolutions.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-01 21:10:40 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"SMBFS: Lock on a per-volume basis"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I37be14e7525406e0ad568f6228c1303998c5235f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baa041b7_9b23dc05","line":7,"updated":"2015-04-01 18:14:06.000000000","message":"Please add an explanation of the change, a justification of the change and a bug reference.","commit_id":"3f244254c409d5f12194b835bbbedbb27e8c46ef"}],"cinder/volume/drivers/smbfs.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7440de7c1d80eb1ea86591a5dc6427c4a46ba203","unresolved":false,"context_lines":[{"line_number":72,"context_line":"lock_tag \u003d \u0027smbfs\u0027"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def locked_volume_id_operation(f, external\u003dFalse):"},{"line_number":76,"context_line":"    \"\"\"Lock decorator for volume operations."},{"line_number":77,"context_line":"       Takes a named lock prior to executing the operation. The lock is named"},{"line_number":78,"context_line":"       with the id of the volume. This lock can then be used"}],"source_content_type":"text/x-python","patch_set":8,"id":"baa041b7_ad9086ed","line":75,"updated":"2015-04-02 14:08:09.000000000","message":"We should move these methods into remotefs.py, but that can be a separate effort.","commit_id":"6146ef6ab4dbfc3eb462980b75a9a267c0b1af27"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"82be8c33b4bbc0104090ad16c6b26d2ee0585d7a","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def locked_volume_id_operation(f, external\u003dFalse):"},{"line_number":76,"context_line":"    \"\"\"Lock decorator for volume operations."},{"line_number":77,"context_line":"       Takes a named lock prior to executing the operation. The lock is named"},{"line_number":78,"context_line":"       with the id of the volume. This lock can then be used"},{"line_number":79,"context_line":"       by other operations to avoid operation conflicts on shared volumes."}],"source_content_type":"text/x-python","patch_set":8,"id":"baa041b7_66c183e4","line":76,"updated":"2015-04-02 12:00:34.000000000","message":"I think you need a blank line here.","commit_id":"6146ef6ab4dbfc3eb462980b75a9a267c0b1af27"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7440de7c1d80eb1ea86591a5dc6427c4a46ba203","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def locked_volume_id_operation(f, external\u003dFalse):"},{"line_number":76,"context_line":"    \"\"\"Lock decorator for volume operations."},{"line_number":77,"context_line":"       Takes a named lock prior to executing the operation. The lock is named"},{"line_number":78,"context_line":"       with the id of the volume. This lock can then be used"},{"line_number":79,"context_line":"       by other operations to avoid operation conflicts on shared volumes."}],"source_content_type":"text/x-python","patch_set":8,"id":"baa041b7_6d1dde72","line":76,"in_reply_to":"baa041b7_66c183e4","updated":"2015-04-02 14:08:09.000000000","message":"Yes, please follow standard formatting.","commit_id":"6146ef6ab4dbfc3eb462980b75a9a267c0b1af27"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"a78ea0e4e2b8a68dc150a11ff9ce3ae04ac9b63f","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def locked_volume_id_snapshot_operation(f, external\u003dFalse):"},{"line_number":94,"context_line":"    \"\"\"Lock decorator for volume operations that use snapshot objects."},{"line_number":95,"context_line":"       Takes a named lock prior to executing the operation. The lock is named"},{"line_number":96,"context_line":"       with the id of the volume. This lock can then be used"},{"line_number":97,"context_line":"       by other operations to avoid operation conflicts on shared volumes."}],"source_content_type":"text/x-python","patch_set":8,"id":"baa041b7_35f6f18f","line":94,"updated":"2015-04-02 17:42:24.000000000","message":"Same comment here.","commit_id":"6146ef6ab4dbfc3eb462980b75a9a267c0b1af27"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"ced02f13ac5fe121b3b6453e204ad826dde9e604","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                                              \u0027extend volume %s to %sG.\u0027"},{"line_number":513,"context_line":"                                              % (volume[\u0027id\u0027], size_gb))"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"},{"line_number":516,"context_line":"        return self._copy_volume_to_image_with_lock("},{"line_number":517,"context_line":"            volume, context, image_service, image_meta)"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baa041b7_9fc5cc3d","line":515,"updated":"2015-04-03 04:48:31.000000000","message":"I recommend that @locked_volume_id_operation plus in this function head.","commit_id":"6146ef6ab4dbfc3eb462980b75a9a267c0b1af27"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"009014c51e8eb839d8dfacec73ff24701baf017e","unresolved":false,"context_lines":[{"line_number":517,"context_line":"            volume, context, image_service, image_meta)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    @locked_volume_id_operation"},{"line_number":520,"context_line":"    def _copy_volume_to_image_with_lock(self, volume, context,"},{"line_number":521,"context_line":"                                        image_service, image_meta):"},{"line_number":522,"context_line":"        return self._copy_volume_to_image("},{"line_number":523,"context_line":"            context, volume, image_service, image_meta)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baa041b7_bbf699d5","line":520,"updated":"2015-04-01 21:23:41.000000000","message":"Is there a reason to swap the order of (..context, volume) ?\nIt doesn\u0027t matter here, since it\u0027s only called in copy_volume_to_image(), but it is different from all the other functions that use context, and there are many.\nSorry if I\u0027m being pedantic, but it seems better to keep it the same.","commit_id":"6146ef6ab4dbfc3eb462980b75a9a267c0b1af27"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"1aaa1ef9329f10ed935993499a8948a3afd9463a","unresolved":false,"context_lines":[{"line_number":517,"context_line":"            volume, context, image_service, image_meta)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    @locked_volume_id_operation"},{"line_number":520,"context_line":"    def _copy_volume_to_image_with_lock(self, volume, context,"},{"line_number":521,"context_line":"                                        image_service, image_meta):"},{"line_number":522,"context_line":"        return self._copy_volume_to_image("},{"line_number":523,"context_line":"            context, volume, image_service, image_meta)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baa041b7_a1ce6a58","line":520,"in_reply_to":"baa041b7_21d81a53","updated":"2015-04-01 22:28:28.000000000","message":"Sorry, I missed that. Makes sense.","commit_id":"6146ef6ab4dbfc3eb462980b75a9a267c0b1af27"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"a42f4ae18f20b8cc9c9d3d95343b179554661cb9","unresolved":false,"context_lines":[{"line_number":517,"context_line":"            volume, context, image_service, image_meta)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    @locked_volume_id_operation"},{"line_number":520,"context_line":"    def _copy_volume_to_image_with_lock(self, volume, context,"},{"line_number":521,"context_line":"                                        image_service, image_meta):"},{"line_number":522,"context_line":"        return self._copy_volume_to_image("},{"line_number":523,"context_line":"            context, volume, image_service, image_meta)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baa041b7_21d81a53","line":520,"in_reply_to":"baa041b7_bbf699d5","updated":"2015-04-01 22:22:22.000000000","message":"The decorator expects the volume as second argument after self.\n\nLook here for reference: f16c121697b4f2efcb4f7074658c1f3412e61465","commit_id":"6146ef6ab4dbfc3eb462980b75a9a267c0b1af27"}]}
