)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c0a391aa7249f92992ca1347383c9f2fba057e66","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"So, we need add a size check before we revert a volume to a"},{"line_number":19,"context_line":"snapshot. If the volume size is not equal to its latest"},{"line_number":20,"context_line":"snapshot size, it will be raise a HTTPConflict(409)."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Ib3cc95a10870822b9f597d66007699fb40908b61"},{"line_number":23,"context_line":"Closes-bug: #1798503"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f79a3b5_fb97aa38","line":20,"updated":"2018-10-19 12:06:28.000000000","message":"Actually, HTTPBadRequest is raised","commit_id":"07ebd2698843a7c290542944c17fce9f5261d822"}],"cinder/api/v3/volumes.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                               cascade\u003dcascade,"},{"line_number":78,"context_line":"                               force\u003dforce)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @common.process_general_filtering(\u0027volume\u0027)"},{"line_number":83,"context_line":"    def _process_volume_filtering(self, context\u003dNone, filters\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_92331762","line":80,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027http.client\u0027 has no \u0027ACCEPTED\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        return view_builder_v3.quick_summary(num_vols, int(sum_size),"},{"line_number":170,"context_line":"                                             all_distinct_metadata)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":173,"context_line":"    @wsgi.Controller.api_version(mv.VOLUME_REVERT)"},{"line_number":174,"context_line":"    @wsgi.action(\u0027revert\u0027)"},{"line_number":175,"context_line":"    def revert(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_3238033b","line":172,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027http.client\u0027 has no \u0027ACCEPTED\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"42bcb40657c39149a905bd5e24d714f0c24fdc83","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPConflict(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":197,"context_line":"                                                      \u0027v_id\u0027: volume.id})"},{"line_number":198,"context_line":"        try:"},{"line_number":199,"context_line":"            msg \u003d \u0027Reverting volume %(v_id)s to snapshot %(s_id)s.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_e4463b57","line":196,"range":{"start_line":196,"start_character":22,"end_line":196,"end_character":34},"updated":"2018-10-18 19:29:16.000000000","message":"Agree that this should be a exception.HTTPBadrequest.","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6185e9c5371e7a217af2733c344868581cef2cc3","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPConflict(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":197,"context_line":"                                                      \u0027v_id\u0027: volume.id})"},{"line_number":198,"context_line":"        try:"},{"line_number":199,"context_line":"            msg \u003d \u0027Reverting volume %(v_id)s to snapshot %(s_id)s.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_61bc68b5","line":196,"range":{"start_line":196,"start_character":22,"end_line":196,"end_character":34},"updated":"2018-10-18 11:59:47.000000000","message":"This doesn\u0027t seem like an appropriate HTTP response for something like this. But I see that is what we use elsewhere for exception.InvalidVolume, so I suppose this is at least consistent with how we\u0027ve handled other issues.","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"485bfe6a1ada09a4099f725a9019deddc3076660","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPConflict(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":197,"context_line":"                                                      \u0027v_id\u0027: volume.id})"},{"line_number":198,"context_line":"        try:"},{"line_number":199,"context_line":"            msg \u003d \u0027Reverting volume %(v_id)s to snapshot %(s_id)s.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f244c475","line":196,"range":{"start_line":196,"start_character":22,"end_line":196,"end_character":34},"in_reply_to":"3f79a3b5_61bc68b5","updated":"2018-10-18 13:58:36.000000000","message":"We use exc.HTTPBadRequest for exception.InvalidVolume in group_snapshots.py and groups.py. Seems better.","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"93de5de796aa4f1de09d47338b5a12de82e3d190","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPConflict(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":197,"context_line":"                                                      \u0027v_id\u0027: volume.id})"},{"line_number":198,"context_line":"        try:"},{"line_number":199,"context_line":"            msg \u003d \u0027Reverting volume %(v_id)s to snapshot %(s_id)s.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b982a5a5","line":196,"range":{"start_line":196,"start_character":22,"end_line":196,"end_character":34},"in_reply_to":"3f79a3b5_e4463b57","updated":"2018-10-19 02:28:06.000000000","message":"Yes, this 409 is from original spec. I agree 400 is better in here, and I will also do some fix on spec.\n\nAnd we can find the rules from:\nhttps://specs.openstack.org/openstack/api-wg/guidelines/http/response-codes.html","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"42bcb40657c39149a905bd5e24d714f0c24fdc83","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                           \u0027s_id\u0027: l_snap.id})"},{"line_number":202,"context_line":"            self.volume_api.revert_to_snapshot(context, volume, l_snap)"},{"line_number":203,"context_line":"        except (exception.InvalidVolume, exception.InvalidSnapshot) as e:"},{"line_number":204,"context_line":"            raise exc.HTTPConflict(explanation\u003dsix.text_type(e))"},{"line_number":205,"context_line":"        except exception.VolumeSizeExceedsAvailableQuota as e:"},{"line_number":206,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_a450430b","line":204,"range":{"start_line":204,"start_character":22,"end_line":204,"end_character":34},"updated":"2018-10-18 19:29:16.000000000","message":"Could also fix here.","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"93de5de796aa4f1de09d47338b5a12de82e3d190","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                           \u0027s_id\u0027: l_snap.id})"},{"line_number":202,"context_line":"            self.volume_api.revert_to_snapshot(context, volume, l_snap)"},{"line_number":203,"context_line":"        except (exception.InvalidVolume, exception.InvalidSnapshot) as e:"},{"line_number":204,"context_line":"            raise exc.HTTPConflict(explanation\u003dsix.text_type(e))"},{"line_number":205,"context_line":"        except exception.VolumeSizeExceedsAvailableQuota as e:"},{"line_number":206,"context_line":"            raise exc.HTTPForbidden(explanation\u003dsix.text_type(e))"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_64fea405","line":204,"range":{"start_line":204,"start_character":22,"end_line":204,"end_character":34},"in_reply_to":"3f79a3b5_a450430b","updated":"2018-10-19 02:28:06.000000000","message":"There are some other idea about this:\n1. If the volume is reverting we need return 409\n2. If the volume is other status, we need return 400\n3. If the snapshot is other status, we need return 400.\n\nBut it out of this patch, anyway we can discuss it and fix this in follow up.","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                            raise exc.HTTPNotFound(explanation\u003dexplanation)"},{"line_number":231,"context_line":"            return image_snapshot"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":234,"context_line":"    @validation.schema(volumes.create, mv.BASE_VERSION,"},{"line_number":235,"context_line":"                       mv.get_prior_version(mv.GROUP_VOLUME))"},{"line_number":236,"context_line":"    @validation.schema(volumes.create_volume_v313, mv.GROUP_VOLUME,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_52357f42","line":233,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027http.client\u0027 has no \u0027ACCEPTED\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        if req_volume_type:"},{"line_number":281,"context_line":"            # Not found exception will be handled at the wsgi level"},{"line_number":282,"context_line":"            kwargs[\u0027volume_type\u0027] \u003d ("},{"line_number":283,"context_line":"                objects.VolumeType.get_by_name_or_id(context, req_volume_type))"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        kwargs[\u0027metadata\u0027] \u003d volume.get(\u0027metadata\u0027, None)"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f2412ba9","line":283,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027VolumeType\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2d3351ffd0eaf851f0a88fce4b1c05e61e44ea55","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                    \"the latest one of volume %(v_id)s.\")"},{"line_number":191,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":192,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_55221156","line":193,"range":{"start_line":193,"start_character":23,"end_line":193,"end_character":25},"updated":"2018-10-22 04:54:10.000000000","message":"currently it is fairly obvious that the volume.size will be greater than snapshot.size but i think it will be better if \u0027\u003e\u0027 condition is used","commit_id":"73c93062fa22c424f1f2bfe767aab62c680b3d97"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"be567676d5e37d1763a74a3a02fc4ebb5fc8a6fd","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                    \"the latest one of volume %(v_id)s.\")"},{"line_number":191,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":192,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_43e49442","line":193,"range":{"start_line":193,"start_character":23,"end_line":193,"end_character":25},"in_reply_to":"3f79a3b5_0068d2f1","updated":"2018-10-22 13:26:48.000000000","message":"Even without shrink (which isn\u0027t going to happen, so we can stop talking about cases in the future where it will be) this is correct as !\u003d. For revert, the volume size cannot be larger than the snapshot size, so the only case we are concerned about is if they do not equal each other.","commit_id":"73c93062fa22c424f1f2bfe767aab62c680b3d97"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"a1dea4d2b149aa3a7a73f67307587de599d53772","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                    \"the latest one of volume %(v_id)s.\")"},{"line_number":191,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":192,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_a66c9633","line":193,"range":{"start_line":193,"start_character":23,"end_line":193,"end_character":25},"in_reply_to":"3f79a3b5_43e49442","updated":"2018-10-22 14:17:25.000000000","message":"Ok. Thanks for the explanatory discussion. LGTM now.","commit_id":"73c93062fa22c424f1f2bfe767aab62c680b3d97"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"83582ac5f37be3b985015486c1c70f35b4078df3","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                    \"the latest one of volume %(v_id)s.\")"},{"line_number":191,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":192,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_c03bbac6","line":193,"range":{"start_line":193,"start_character":23,"end_line":193,"end_character":25},"in_reply_to":"3f79a3b5_55221156","updated":"2018-10-22 12:44:55.000000000","message":"!\u003d is the proper operation here. We can not assume that the volume will be always bigger as we can add support for this in the future and a casual developer might not have that in mind.","commit_id":"73c93062fa22c424f1f2bfe767aab62c680b3d97"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"e8d42bf3f0303c05f3fc4a9b12a0d36dbaaffbb6","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                    \"the latest one of volume %(v_id)s.\")"},{"line_number":191,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":192,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_d2a5beb5","line":193,"range":{"start_line":193,"start_character":23,"end_line":193,"end_character":25},"in_reply_to":"3f79a3b5_a66c9633","updated":"2018-10-23 01:27:15.000000000","message":"Yes, and [1], the generic one also doesn\u0027t support not equal copy.\n\n[1] https://github.com/openstack/cinder/blob/2ec51c3/cinder/volume/manager.py#L2046","commit_id":"73c93062fa22c424f1f2bfe767aab62c680b3d97"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"406ea8272b8e73309c4a95bba07b5a674956e756","unresolved":false,"context_lines":[{"line_number":190,"context_line":"                    \"the latest one of volume %(v_id)s.\")"},{"line_number":191,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":192,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_0068d2f1","line":193,"range":{"start_line":193,"start_character":23,"end_line":193,"end_character":25},"in_reply_to":"3f79a3b5_c03bbac6","updated":"2018-10-22 13:23:27.000000000","message":"Ok. so if i understand correctly you\u0027re saying that this condition is suitable for the case when the shrink volume capability will be implemented.\nI have one more query, after implementing the shrink vol capability, we still won\u0027t be able to revert to a snapshot smaller than the volume?","commit_id":"73c93062fa22c424f1f2bfe767aab62c680b3d97"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"a636514a76610da8df3f144198a062beb7a03e99","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":197,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":198,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_e8c5893f","line":195,"updated":"2018-10-22 01:32:10.000000000","message":"-1. Minor: The volume size must be equal to the snapshot size. Be is lost.","commit_id":"73c93062fa22c424f1f2bfe767aab62c680b3d97"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2d3351ffd0eaf851f0a88fce4b1c05e61e44ea55","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":197,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":198,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_15e1f9fd","line":195,"range":{"start_line":195,"start_character":31,"end_line":195,"end_character":75},"updated":"2018-10-22 04:54:10.000000000","message":"IMO mentioning that a volume cannot shrink will be good here","commit_id":"73c93062fa22c424f1f2bfe767aab62c680b3d97"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"83582ac5f37be3b985015486c1c70f35b4078df3","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":197,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":198,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_00a0d2f2","line":195,"range":{"start_line":195,"start_character":31,"end_line":195,"end_character":75},"in_reply_to":"3f79a3b5_15e1f9fd","updated":"2018-10-22 12:44:55.000000000","message":"Disagree. That will only get the user confused.","commit_id":"73c93062fa22c424f1f2bfe767aab62c680b3d97"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"e8d42bf3f0303c05f3fc4a9b12a0d36dbaaffbb6","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":193,"context_line":"        if volume.size !\u003d l_snap.volume_size:"},{"line_number":194,"context_line":"            msg \u003d _(\"Can\u0027t revert volume %(v_id)s to its latest snapshot \""},{"line_number":195,"context_line":"                    \"%(s_id)s. The volume size must equal to snapshot size.\")"},{"line_number":196,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg % {\u0027s_id\u0027: snapshot_id,"},{"line_number":197,"context_line":"                                                        \u0027v_id\u0027: volume.id})"},{"line_number":198,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_52720e4c","line":195,"in_reply_to":"3f79a3b5_e8c5893f","updated":"2018-10-23 01:27:15.000000000","message":"@lisa, thanks, I will update typo.","commit_id":"73c93062fa22c424f1f2bfe767aab62c680b3d97"}],"cinder/tests/unit/api/v3/test_volumes.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":679,"context_line":"        res \u003d req.get_response(fakes.wsgi_app("},{"line_number":680,"context_line":"            fake_auth_context\u003dself.ctxt))"},{"line_number":681,"context_line":"        res_dict \u003d jsonutils.loads(res.body)"},{"line_number":682,"context_line":"        self.assertEqual(http_client.ACCEPTED, res.status_int)"},{"line_number":683,"context_line":"        self.assertIn(\u0027id\u0027, res_dict[\u0027volume\u0027])"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"    @ddt.data(\u0027fake_host\u0027, \u0027\u0027, 1234, \u0027          \u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_123f0723","line":682,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027http.client\u0027 has no \u0027ACCEPTED\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":793,"context_line":"            \u0027status\u0027: \u0027available\u0027,"},{"line_number":794,"context_line":"            \u0027size\u0027: size"},{"line_number":795,"context_line":"        }"},{"line_number":796,"context_line":"        volume \u003d objects.Volume(context\u003dself.ctxt, **vol)"},{"line_number":797,"context_line":"        volume.create()"},{"line_number":798,"context_line":"        return volume"},{"line_number":799,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b20df393","line":796,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":804,"context_line":"            \u0027volume_id\u0027: volume_id,"},{"line_number":805,"context_line":"            \u0027volume_size\u0027: volume_size"},{"line_number":806,"context_line":"        }"},{"line_number":807,"context_line":"        snapshot \u003d objects.Snapshot(context\u003dself.ctxt, **snap)"},{"line_number":808,"context_line":"        snapshot.create()"},{"line_number":809,"context_line":"        return snapshot"},{"line_number":810,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_d212efb3","line":807,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Snapshot\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":808,"context_line":"        snapshot.create()"},{"line_number":809,"context_line":"        return snapshot"},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    @mock.patch.object(objects.Volume, \u0027get_latest_snapshot\u0027)"},{"line_number":812,"context_line":"    @mock.patch.object(volume_api.API, \u0027get_volume\u0027)"},{"line_number":813,"context_line":"    def test_volume_revert_with_snapshot_not_found(self, mock_volume,"},{"line_number":814,"context_line":"                                                   mock_latest):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_72075b72","line":811,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":825,"context_line":"                          req, \u0027fake_id\u0027, {\u0027revert\u0027: {\u0027snapshot_id\u0027:"},{"line_number":826,"context_line":"                                                      \u0027fake_snapshot_id\u0027}})"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"    @mock.patch.object(objects.Volume, \u0027get_latest_snapshot\u0027)"},{"line_number":829,"context_line":"    @mock.patch.object(volume_api.API, \u0027get_volume\u0027)"},{"line_number":830,"context_line":"    def test_volume_revert_with_snapshot_not_match(self, mock_volume,"},{"line_number":831,"context_line":"                                                   mock_latest):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_920c7794","line":828,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":842,"context_line":"                          req, \u0027fake_id\u0027, {\u0027revert\u0027: {\u0027snapshot_id\u0027:"},{"line_number":843,"context_line":"                                                      \u0027fake_snapshot_id\u0027}})"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"    @mock.patch.object(objects.Volume, \u0027get_latest_snapshot\u0027)"},{"line_number":846,"context_line":"    @mock.patch(\u0027cinder.objects.base.\u0027"},{"line_number":847,"context_line":"                \u0027CinderPersistentObject.update_single_status_where\u0027)"},{"line_number":848,"context_line":"    @mock.patch.object(volume_api.API, \u0027get_volume\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_3221e3fe","line":845,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":873,"context_line":"                          req, fake_volume[\u0027id\u0027], {\u0027revert\u0027: {\u0027snapshot_id\u0027:"},{"line_number":874,"context_line":"                                                   fake_snapshot[\u0027id\u0027]}})"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"    @mock.patch.object(objects.Volume, \u0027get_latest_snapshot\u0027)"},{"line_number":877,"context_line":"    @mock.patch.object(volume_api.API, \u0027get_volume\u0027)"},{"line_number":878,"context_line":"    def test_volume_revert_with_not_equal_size(self, mock_volume,"},{"line_number":879,"context_line":"                                               mock_latest):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_521edfbc","line":876,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6185e9c5371e7a217af2733c344868581cef2cc3","unresolved":false,"context_lines":[{"line_number":890,"context_line":"        res \u003d self.assertRaises(webob.exc.HTTPConflict, self.controller.revert,"},{"line_number":891,"context_line":"                                req, fake_volume[\u0027id\u0027], {\u0027revert\u0027: {"},{"line_number":892,"context_line":"                                    \u0027snapshot_id\u0027: fake_snapshot[\u0027id\u0027]}})"},{"line_number":893,"context_line":"        self.assertIn(\"The volume size must equal to snapshot size.\","},{"line_number":894,"context_line":"                      six.text_type(res))"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"    def test_view_get_attachments(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_e1fe3869","line":893,"updated":"2018-10-18 11:59:47.000000000","message":"I generally prefer not asserting on specific text, just making sure the appropriate error is raised. Not a show stopper though. We can see if any others have strong opinions one way or the other.","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"485bfe6a1ada09a4099f725a9019deddc3076660","unresolved":false,"context_lines":[{"line_number":890,"context_line":"        res \u003d self.assertRaises(webob.exc.HTTPConflict, self.controller.revert,"},{"line_number":891,"context_line":"                                req, fake_volume[\u0027id\u0027], {\u0027revert\u0027: {"},{"line_number":892,"context_line":"                                    \u0027snapshot_id\u0027: fake_snapshot[\u0027id\u0027]}})"},{"line_number":893,"context_line":"        self.assertIn(\"The volume size must equal to snapshot size.\","},{"line_number":894,"context_line":"                      six.text_type(res))"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"    def test_view_get_attachments(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f2128461","line":893,"in_reply_to":"3f79a3b5_e1fe3869","updated":"2018-10-18 13:58:36.000000000","message":"Agree not need to assert text.","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"93de5de796aa4f1de09d47338b5a12de82e3d190","unresolved":false,"context_lines":[{"line_number":890,"context_line":"        res \u003d self.assertRaises(webob.exc.HTTPConflict, self.controller.revert,"},{"line_number":891,"context_line":"                                req, fake_volume[\u0027id\u0027], {\u0027revert\u0027: {"},{"line_number":892,"context_line":"                                    \u0027snapshot_id\u0027: fake_snapshot[\u0027id\u0027]}})"},{"line_number":893,"context_line":"        self.assertIn(\"The volume size must equal to snapshot size.\","},{"line_number":894,"context_line":"                      six.text_type(res))"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"    def test_view_get_attachments(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b9f385a0","line":893,"in_reply_to":"3f79a3b5_f2128461","updated":"2018-10-19 02:28:06.000000000","message":"The reason of I assert it is not to check this text can\u0027t be changed, just for checking it\u0027s a exception from the volume size check but not others.\n\nand it\u0027s ok to me remove it. : )","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":916,"context_line":"            \u0027attach_time\u0027: att_time,"},{"line_number":917,"context_line":"            \u0027attach_status\u0027: fields.VolumeAttachStatus.ATTACHED"},{"line_number":918,"context_line":"        }"},{"line_number":919,"context_line":"        attachment1 \u003d objects.VolumeAttachment(self.ctxt, **a1)"},{"line_number":920,"context_line":"        attachment2 \u003d objects.VolumeAttachment(self.ctxt, **a2)"},{"line_number":921,"context_line":"        atts \u003d {\u0027objects\u0027: [attachment1, attachment2]}"},{"line_number":922,"context_line":"        attachments \u003d objects.VolumeAttachmentList(self.ctxt, **atts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f21a8bc5","line":919,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027VolumeAttachment\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":917,"context_line":"            \u0027attach_status\u0027: fields.VolumeAttachStatus.ATTACHED"},{"line_number":918,"context_line":"        }"},{"line_number":919,"context_line":"        attachment1 \u003d objects.VolumeAttachment(self.ctxt, **a1)"},{"line_number":920,"context_line":"        attachment2 \u003d objects.VolumeAttachment(self.ctxt, **a2)"},{"line_number":921,"context_line":"        atts \u003d {\u0027objects\u0027: [attachment1, attachment2]}"},{"line_number":922,"context_line":"        attachments \u003d objects.VolumeAttachmentList(self.ctxt, **atts)"},{"line_number":923,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_121867cb","line":920,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027VolumeAttachment\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"69b17e580877fdc3ab2592c13c3a9db0924778b5","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        attachment1 \u003d objects.VolumeAttachment(self.ctxt, **a1)"},{"line_number":920,"context_line":"        attachment2 \u003d objects.VolumeAttachment(self.ctxt, **a2)"},{"line_number":921,"context_line":"        atts \u003d {\u0027objects\u0027: [attachment1, attachment2]}"},{"line_number":922,"context_line":"        attachments \u003d objects.VolumeAttachmentList(self.ctxt, **atts)"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"        fake_volume[\u0027volume_attachment\u0027] \u003d attachments"},{"line_number":925,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b272d317","line":922,"updated":"2018-10-18 08:33:22.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027VolumeAttachmentList\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"2a49b735960f743ff6d24a6da603020a769bba0c"}]}
