)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"7d6e09c9f7bb42826e66b332163c13fa75ea3e71","unresolved":false,"context_lines":[{"line_number":20,"context_line":"values are: \u00270\u0027, \u00271\u0027, \u0027f\u0027, \u0027false\u0027, \u0027n\u0027, \u0027no\u0027, \u0027off\u0027, \u0027on\u0027, \u0027t\u0027, \u0027true\u0027,"},{"line_number":21,"context_line":"\u0027y\u0027, \u0027yes\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"ApiImpact: 400 BadRequest response will be returned in case invalid force"},{"line_number":24,"context_line":"value is provided during volume upload to image, earlier it was ignored."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Closes-Bug: 1460575"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_9d35a947","line":23,"updated":"2015-06-16 07:12:09.000000000","message":"APIImpact, not sure whether it matters.","commit_id":"5c0c27d4b7b6e95ab1053f00d03e5543a6c326aa"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"7d6d16351afba0f8bba061c5aa910cbb601465c7","unresolved":false,"context_lines":[{"line_number":20,"context_line":"values are: \u00270\u0027, \u00271\u0027, \u0027f\u0027, \u0027false\u0027, \u0027n\u0027, \u0027no\u0027, \u0027off\u0027, \u0027on\u0027, \u0027t\u0027, \u0027true\u0027,"},{"line_number":21,"context_line":"\u0027y\u0027, \u0027yes\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"ApiImpact: 400 BadRequest response will be returned in case invalid force"},{"line_number":24,"context_line":"value is provided during volume upload to image, earlier it was ignored."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Closes-Bug: 1460575"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_1a0f1f38","line":23,"in_reply_to":"fa32b979_5aae0782","updated":"2015-06-17 10:16:45.000000000","message":":)\n\nSorry, I was not clear enough. I think it should be APIImpact instead of ApiImpact (as per the gerrit commit message guidelines).","commit_id":"5c0c27d4b7b6e95ab1053f00d03e5543a6c326aa"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"56162eb14486d0b9242d12f4a1ace0316afbba4f","unresolved":false,"context_lines":[{"line_number":20,"context_line":"values are: \u00270\u0027, \u00271\u0027, \u0027f\u0027, \u0027false\u0027, \u0027n\u0027, \u0027no\u0027, \u0027off\u0027, \u0027on\u0027, \u0027t\u0027, \u0027true\u0027,"},{"line_number":21,"context_line":"\u0027y\u0027, \u0027yes\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"ApiImpact: 400 BadRequest response will be returned in case invalid force"},{"line_number":24,"context_line":"value is provided during volume upload to image, earlier it was ignored."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Closes-Bug: 1460575"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_5aae0782","line":23,"in_reply_to":"fa32b979_9d35a947","updated":"2015-06-17 10:07:00.000000000","message":"Added ApiImpact because:\n\nEarlier strict\u003dFalse was passed to strutils.bool_from_string method in _volume_upload_image method, which would not raise ValueError even if invalid force value is passed and in that case except ValueError block become unreachable.\n\nAfter passing strict\u003dTrue, ValueError is raised from bool_from_string if invalid force value is passed.","commit_id":"5c0c27d4b7b6e95ab1053f00d03e5543a6c326aa"}],"cinder/api/contrib/admin_actions.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bb31cf46f10615a9031fe37c20100461270b3362","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        except KeyError:"},{"line_number":222,"context_line":"            raise exc.HTTPBadRequest(explanation\u003d_(\"Must specify \u0027host\u0027\"))"},{"line_number":223,"context_line":"        force_host_copy \u003d params.get(\u0027force_host_copy\u0027, False)"},{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            force_host_copy \u003d strutils.bool_from_string(force_host_copy,"},{"line_number":226,"context_line":"                                                        strict\u003dTrue)"},{"line_number":227,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_dc3ec8b7","line":224,"updated":"2015-06-02 15:14:38.000000000","message":"This looks like unrelated code, bad rebase?","commit_id":"f581b6474f599e33d891525dd3fd27595c20ee0d"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"f69344d09eb1f416afeee4a523741caef27debf6","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        except KeyError:"},{"line_number":222,"context_line":"            raise exc.HTTPBadRequest(explanation\u003d_(\"Must specify \u0027host\u0027\"))"},{"line_number":223,"context_line":"        force_host_copy \u003d params.get(\u0027force_host_copy\u0027, False)"},{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            force_host_copy \u003d strutils.bool_from_string(force_host_copy,"},{"line_number":226,"context_line":"                                                        strict\u003dTrue)"},{"line_number":227,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_35770a3c","line":224,"in_reply_to":"5afe65bd_dc3ec8b7","updated":"2015-06-03 10:54:03.000000000","message":"I think bool_from_string will convert its argument to String if it\u0027s not. So if the input is a boolean, say, True, then it will convert to string \u0027True\u0027 and again convert it back to boolean True. I think the if..else is removed because of the in-built conversion in bool_from_string. But, IMO, you should revert this change because the current code is more readable. It\u0027s  confusing why you are passing a boolean (default value returned in line 223) to bool_from_string. Also, you are not replaicing is_valid_boolstr with bool_from_string here as mentioned in the commit message.","commit_id":"f581b6474f599e33d891525dd3fd27595c20ee0d"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"8e86d65eb1b2156c478dc6a6d5f223ab5b13c4c6","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            force_host_copy \u003d strutils.bool_from_string(force_host_copy,"},{"line_number":227,"context_line":"                                                        strict\u003dTrue)"},{"line_number":228,"context_line":"        except ValueError:"},{"line_number":229,"context_line":"            msg \u003d (_(\"Invalid value \u0027%s\u0027 for force_host_copy.\") %"},{"line_number":230,"context_line":"                   force_host_copy)"},{"line_number":231,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":232,"context_line":"        self.volume_api.migrate_volume(context, volume, host, force_host_copy)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afb71cf_98ab9a1d","line":229,"updated":"2015-06-08 08:53:41.000000000","message":"Please specify correct value, bool or string, in error msg, and elsewhere through the code.","commit_id":"686487895e787a5060f2cf1d83a299cacccaadbf"}],"cinder/api/contrib/volume_actions.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"f69344d09eb1f416afeee4a523741caef27debf6","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        force \u003d params.get(\u0027force\u0027, False)"},{"line_number":269,"context_line":"        if isinstance(force, basestring):"},{"line_number":270,"context_line":"            try:"},{"line_number":271,"context_line":"                force \u003d strutils.bool_from_string(force, strict\u003dFalse)"},{"line_number":272,"context_line":"            except ValueError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_d507967f","side":"PARENT","line":269,"updated":"2015-06-03 10:54:03.000000000","message":"Same comment.","commit_id":"102f6cfff238506f76dd92eff25df4d2b3a0a6b9"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"0cf76a064d180dd62516b859592de9a3bf019488","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            msg \u003d _(\"No image_name was specified in request.\")"},{"line_number":266,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        force \u003d params.get(\u0027force\u0027, \u0027False\u0027)"},{"line_number":269,"context_line":"        try:"},{"line_number":270,"context_line":"            force \u003d strutils.bool_from_string(force, strict\u003dTrue)"},{"line_number":271,"context_line":"        except ValueError as error:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_36dcf617","line":268,"updated":"2015-06-11 19:21:28.000000000","message":"I think it is ok in this case from an API perspective to now raise a badrequest on a bad value here because there may be cases where someone thinks they are forcing but it is actually not.","commit_id":"f549639edb9e0f05a9150f0eb819b1d16a2e85ee"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"7d6e09c9f7bb42826e66b332163c13fa75ea3e71","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        try:"},{"line_number":270,"context_line":"            force \u003d strutils.bool_from_string(force, strict\u003dTrue)"},{"line_number":271,"context_line":"        except ValueError as error:"},{"line_number":272,"context_line":"            msg \u003d _(\"Invalid value for force: \u0027%s\u0027\") % error.message"},{"line_number":273,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_fdcab519","line":272,"updated":"2015-06-16 07:12:09.000000000","message":"force -\u003e \u0027force\u0027","commit_id":"5c0c27d4b7b6e95ab1053f00d03e5543a6c326aa"}],"cinder/api/v2/snapshots.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"7d6e09c9f7bb42826e66b332163c13fa75ea3e71","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        try:"},{"line_number":200,"context_line":"            force \u003d strutils.bool_from_string(force, strict\u003dTrue)"},{"line_number":201,"context_line":"        except ValueError as error:"},{"line_number":202,"context_line":"            msg \u003d _(\"Invalid value for force: \u0027%s\u0027\") % error.message"},{"line_number":203,"context_line":"            raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        if force:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_7dd785bf","line":202,"updated":"2015-06-16 07:12:09.000000000","message":"\u0027force\u0027","commit_id":"5c0c27d4b7b6e95ab1053f00d03e5543a6c326aa"}],"cinder/tests/unit/api/contrib/test_admin_actions.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"7d6e09c9f7bb42826e66b332163c13fa75ea3e71","unresolved":false,"context_lines":[{"line_number":849,"context_line":"        self._migrate_volume_exec(ctx, volume, host, expected_status,"},{"line_number":850,"context_line":"                                  force_host_copy\u003d\u0027foo\u0027)"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"    def test_migrate_volume_bad_force_host_copy2(self):"},{"line_number":853,"context_line":"        expected_status \u003d 400"},{"line_number":854,"context_line":"        host \u003d \u0027test2\u0027"},{"line_number":855,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_7dfea539","side":"PARENT","line":852,"updated":"2015-06-16 07:12:09.000000000","message":"It\u0027s using int instead of string, I think you should retain this test.","commit_id":"3cd5f2cfd919b9e13946ef7c072954bd96ab15f1"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"284802a1659f7eb722f8c34c1b722366d92196cb","unresolved":false,"context_lines":[{"line_number":849,"context_line":"        self._migrate_volume_exec(ctx, volume, host, expected_status,"},{"line_number":850,"context_line":"                                  force_host_copy\u003d\u0027foo\u0027)"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"    def test_migrate_volume_bad_force_host_copy2(self):"},{"line_number":853,"context_line":"        expected_status \u003d 400"},{"line_number":854,"context_line":"        host \u003d \u0027test2\u0027"},{"line_number":855,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_d5ef48e7","side":"PARENT","line":852,"in_reply_to":"fa32b979_1516104c","updated":"2015-06-17 10:27:19.000000000","message":"In that case, migrate_volume doesn\u0027t raise error, please check implementation of bool_from_string method [1].\n\n[1] https://github.com/openstack/oslo.utils/blob/master/oslo_utils/strutils.py#L109\n\nThe expected_status will not be 400 instead it will be 202 and there is already  test named test_migrate_volume_success to check 202 status.","commit_id":"3cd5f2cfd919b9e13946ef7c072954bd96ab15f1"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"56162eb14486d0b9242d12f4a1ace0316afbba4f","unresolved":false,"context_lines":[{"line_number":849,"context_line":"        self._migrate_volume_exec(ctx, volume, host, expected_status,"},{"line_number":850,"context_line":"                                  force_host_copy\u003d\u0027foo\u0027)"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"    def test_migrate_volume_bad_force_host_copy2(self):"},{"line_number":853,"context_line":"        expected_status \u003d 400"},{"line_number":854,"context_line":"        host \u003d \u0027test2\u0027"},{"line_number":855,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_da18d720","side":"PARENT","line":852,"in_reply_to":"fa32b979_7dfea539","updated":"2015-06-17 10:07:00.000000000","message":"There is no need to retain this test because migrate_volume method doesn\u0027t raise HTTPBadRequest error now with int value for force_host_copy parameter.","commit_id":"3cd5f2cfd919b9e13946ef7c072954bd96ab15f1"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"7d6d16351afba0f8bba061c5aa910cbb601465c7","unresolved":false,"context_lines":[{"line_number":849,"context_line":"        self._migrate_volume_exec(ctx, volume, host, expected_status,"},{"line_number":850,"context_line":"                                  force_host_copy\u003d\u0027foo\u0027)"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"    def test_migrate_volume_bad_force_host_copy2(self):"},{"line_number":853,"context_line":"        expected_status \u003d 400"},{"line_number":854,"context_line":"        host \u003d \u0027test2\u0027"},{"line_number":855,"context_line":"        ctx \u003d context.RequestContext(\u0027admin\u0027, \u0027fake\u0027, True)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_1516104c","side":"PARENT","line":852,"in_reply_to":"fa32b979_da18d720","updated":"2015-06-17 10:16:45.000000000","message":"So what happens if it is int?","commit_id":"3cd5f2cfd919b9e13946ef7c072954bd96ab15f1"}]}
