)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"73c1ec2442fa59a24cced848b2e57840f1f63538","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"\"create flavor_extraspecs\" v2 API does not validate the data type of a"},{"line_number":10,"context_line":"request body. If invalid parameter is passed, an internal error happens."},{"line_number":11,"context_line":"If many invalid request come, a log file would be occupied with Traceback."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The API of v3 validates it, but it does not validate the lengths of both"},{"line_number":14,"context_line":"key and value of extra_specs. extra_scpecs are stored into instance_type"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAT3%2F%2F9pM%3D","line":11,"updated":"2013-12-26 08:00:08.000000000","message":"s/request/requests/g  s/Traceback/traceback/g","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"73c1ec2442fa59a24cced848b2e57840f1f63538","unresolved":false,"context_lines":[{"line_number":13,"context_line":"The API of v3 validates it, but it does not validate the lengths of both"},{"line_number":14,"context_line":"key and value of extra_specs. extra_scpecs are stored into instance_type"},{"line_number":15,"context_line":"_extra_scpecs table, and the key and value are defined as String(255)."},{"line_number":16,"context_line":"The API should validate request body based on the defined lengths."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This patch adds some validations for avoiding the above internal error."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAT3%2F%2F9pI%3D","line":16,"updated":"2013-12-26 08:00:08.000000000","message":"s/lengths/length/g","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"eefb626661f054735b0ba3783a9fd23c6c0e8c49","unresolved":false,"context_lines":[{"line_number":12,"context_line":"with traceback."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"The API of v3 validates it, but it does not validate the lengths of"},{"line_number":15,"context_line":"both key and value of extra_specs. extra_scpecs are stored into"},{"line_number":16,"context_line":"instance_type_extra_scpecs table, and the key and value are defined"},{"line_number":17,"context_line":"as String(255). The API should validate request body based on the"},{"line_number":18,"context_line":"defined length."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAT3%2F%2F5sU%3D","line":15,"updated":"2013-12-27 14:10:43.000000000","message":"typo: scpecs -\u003e specs","commit_id":"c613c318ff4c3ba06eb4c822918719105da3f22c"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6fe5236e11d8b7f05a215f6a866981eff3c788e0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"with traceback."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"The API of v3 validates it, but it does not validate the lengths of"},{"line_number":15,"context_line":"both key and value of extra_specs. extra_scpecs are stored into"},{"line_number":16,"context_line":"instance_type_extra_scpecs table, and the key and value are defined"},{"line_number":17,"context_line":"as String(255). The API should validate request body based on the"},{"line_number":18,"context_line":"defined length."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAT3%2F%2F5qI%3D","line":15,"in_reply_to":"AAAAT3%2F%2F5sU%3D","updated":"2013-12-27 14:23:41.000000000","message":"Nice catch, will fix this.","commit_id":"c613c318ff4c3ba06eb4c822918719105da3f22c"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"eefb626661f054735b0ba3783a9fd23c6c0e8c49","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"The API of v3 validates it, but it does not validate the lengths of"},{"line_number":15,"context_line":"both key and value of extra_specs. extra_scpecs are stored into"},{"line_number":16,"context_line":"instance_type_extra_scpecs table, and the key and value are defined"},{"line_number":17,"context_line":"as String(255). The API should validate request body based on the"},{"line_number":18,"context_line":"defined length."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAT3%2F%2F5sM%3D","line":16,"updated":"2013-12-27 14:10:43.000000000","message":"and here too","commit_id":"c613c318ff4c3ba06eb4c822918719105da3f22c"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6fe5236e11d8b7f05a215f6a866981eff3c788e0","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"The API of v3 validates it, but it does not validate the lengths of"},{"line_number":15,"context_line":"both key and value of extra_specs. extra_scpecs are stored into"},{"line_number":16,"context_line":"instance_type_extra_scpecs table, and the key and value are defined"},{"line_number":17,"context_line":"as String(255). The API should validate request body based on the"},{"line_number":18,"context_line":"defined length."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAT3%2F%2F5p4%3D","line":16,"in_reply_to":"AAAAT3%2F%2F5sM%3D","updated":"2013-12-27 14:23:41.000000000","message":"thanks for here also.","commit_id":"c613c318ff4c3ba06eb4c822918719105da3f22c"}],"nova/api/openstack/compute/contrib/flavorextraspecs.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"73c1ec2442fa59a24cced848b2e57840f1f63538","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from webob import exc"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import six"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from nova.api.openstack import extensions"},{"line_number":25,"context_line":"from nova.api.openstack import wsgi"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F9os%3D","line":22,"updated":"2013-12-26 08:00:08.000000000","message":"six and webob should be put together as they are both third party imports","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"73c1ec2442fa59a24cced848b2e57840f1f63538","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":81,"context_line":"            if len(v) \u003e 255:"},{"line_number":82,"context_line":"                msg \u003d _(\"extra_specs value greater than 255 characters\")"},{"line_number":83,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @wsgi.serializers(xml\u003dExtraSpecsTemplate)"},{"line_number":86,"context_line":"    def index(self, req, flavor_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F9n8%3D","line":83,"updated":"2013-12-26 08:00:08.000000000","message":"The above logic can be replaced by https://github.com/openstack/nova/blob/master/nova/utils.py#L945","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8c75e1bc122566308184fad0654eea4b94e12690","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":81,"context_line":"            if len(v) \u003e 255:"},{"line_number":82,"context_line":"                msg \u003d _(\"extra_specs value greater than 255 characters\")"},{"line_number":83,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @wsgi.serializers(xml\u003dExtraSpecsTemplate)"},{"line_number":86,"context_line":"    def index(self, req, flavor_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F7I0%3D","line":83,"in_reply_to":"AAAAT3%2F%2F9n8%3D","updated":"2013-12-27 02:35:06.000000000","message":"Good idea, thanks so much!\n\nwill apply it to the next patch.","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"73c1ec2442fa59a24cced848b2e57840f1f63538","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def create(self, req, flavor_id, body):"},{"line_number":94,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":95,"context_line":"        authorize(context, action\u003d\u0027create\u0027)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        self._check_body(body)"},{"line_number":98,"context_line":"        specs \u003d body.get(\u0027extra_specs\u0027)"},{"line_number":99,"context_line":"        self._check_extra_specs(specs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F9oY%3D","line":96,"updated":"2013-12-26 08:00:08.000000000","message":"It is better do not touch unrelated code to keep patch clean","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8c75e1bc122566308184fad0654eea4b94e12690","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def create(self, req, flavor_id, body):"},{"line_number":94,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":95,"context_line":"        authorize(context, action\u003d\u0027create\u0027)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        self._check_body(body)"},{"line_number":98,"context_line":"        specs \u003d body.get(\u0027extra_specs\u0027)"},{"line_number":99,"context_line":"        self._check_extra_specs(specs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F7Hg%3D","line":96,"in_reply_to":"AAAAT3%2F%2F9oY%3D","updated":"2013-12-27 02:35:06.000000000","message":"Done","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"73c1ec2442fa59a24cced848b2e57840f1f63538","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    def update(self, req, flavor_id, id, body):"},{"line_number":108,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":109,"context_line":"        authorize(context, action\u003d\u0027update\u0027)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        self._check_body(body)"},{"line_number":112,"context_line":"        if id not in body:"},{"line_number":113,"context_line":"            expl \u003d _(\u0027Request body and URI mismatch\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F9og%3D","line":110,"updated":"2013-12-26 08:00:08.000000000","message":"It is better do not touch unrelated code to keep patch clean","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8c75e1bc122566308184fad0654eea4b94e12690","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    def update(self, req, flavor_id, id, body):"},{"line_number":108,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":109,"context_line":"        authorize(context, action\u003d\u0027update\u0027)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        self._check_body(body)"},{"line_number":112,"context_line":"        if id not in body:"},{"line_number":113,"context_line":"            expl \u003d _(\u0027Request body and URI mismatch\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F7Hc%3D","line":110,"in_reply_to":"AAAAT3%2F%2F9og%3D","updated":"2013-12-27 02:35:06.000000000","message":"Done","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"eb5ae127f57e56ba824adf31efba27005ff2d770","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self._check_extra_specs(specs)"},{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            db.flavor_extra_specs_update_or_create(context, flavor_id, specs)"},{"line_number":91,"context_line":"        except exception.MetadataLimitExceeded as error:"},{"line_number":92,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.format_message())"},{"line_number":93,"context_line":"        return body"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FiiA%3D","line":91,"updated":"2014-01-12 06:38:05.000000000","message":"So not your fault, but I don\u0027t think this exception can get raised","commit_id":"2ef7fedd4ca2f042ab6ba75e8498f998bad8e5bf"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"eee46f34d3601ac9ca1ae7e69d055e436de8561d","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self._check_extra_specs(specs)"},{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            db.flavor_extra_specs_update_or_create(context, flavor_id, specs)"},{"line_number":91,"context_line":"        except exception.MetadataLimitExceeded as error:"},{"line_number":92,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.format_message())"},{"line_number":93,"context_line":"        return body"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FZsQ%3D","line":91,"in_reply_to":"AAAAUH%2F%2FiEE%3D","updated":"2014-01-14 05:26:31.000000000","message":"Hi Jay,\n\nI don\u0027t think this patch should depend on 66187 because of different purpose and this patch does not contain any technical dependency. I know if 66187 is merged soon, this patch merger would fail if it does not depend on.\n\nBut I\u0027d like to make this patch independent because of the scope.\n\nAnyway, 66187 is nice.","commit_id":"2ef7fedd4ca2f042ab6ba75e8498f998bad8e5bf"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"b6aac92e6c2d37fe6efb5c3b74bd331e725b15c1","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self._check_extra_specs(specs)"},{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            db.flavor_extra_specs_update_or_create(context, flavor_id, specs)"},{"line_number":91,"context_line":"        except exception.MetadataLimitExceeded as error:"},{"line_number":92,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.format_message())"},{"line_number":93,"context_line":"        return body"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FiEE%3D","line":91,"in_reply_to":"AAAAUH%2F%2FiiA%3D","updated":"2014-01-12 11:08:57.000000000","message":"I have uploaded a patch to resolve this: https://review.openstack.org/#/c/66187/1\n\n@Ken\u0027ichi, perhaps you can update your patch based on 66187","commit_id":"2ef7fedd4ca2f042ab6ba75e8498f998bad8e5bf"}],"nova/api/openstack/compute/plugins/v3/flavors_extraspecs.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"73c1ec2442fa59a24cced848b2e57840f1f63538","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import webob"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from nova.api.openstack import extensions"},{"line_number":23,"context_line":"from nova.api.openstack import wsgi"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F9oo%3D","line":20,"updated":"2013-12-26 08:00:08.000000000","message":"six and webob should be put together as they are both third party imports","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"73c1ec2442fa59a24cced848b2e57840f1f63538","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":83,"context_line":"            if len(v) \u003e 255:"},{"line_number":84,"context_line":"                msg \u003d _(\"extra_specs value greater than 255 characters\")"},{"line_number":85,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @extensions.expected_errors(())"},{"line_number":88,"context_line":"    @wsgi.serializers(xml\u003dExtraSpecsTemplate)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F9oI%3D","line":85,"updated":"2013-12-26 08:00:08.000000000","message":"The above logic can be replaced by https://github.com/openstack/nova/blob/master/nova/utils.py#L945","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8c75e1bc122566308184fad0654eea4b94e12690","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":83,"context_line":"            if len(v) \u003e 255:"},{"line_number":84,"context_line":"                msg \u003d _(\"extra_specs value greater than 255 characters\")"},{"line_number":85,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @extensions.expected_errors(())"},{"line_number":88,"context_line":"    @wsgi.serializers(xml\u003dExtraSpecsTemplate)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F7Gk%3D","line":85,"in_reply_to":"AAAAT3%2F%2F9oI%3D","updated":"2013-12-27 02:35:06.000000000","message":"Done","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"73c1ec2442fa59a24cced848b2e57840f1f63538","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def create(self, req, flavor_id, body):"},{"line_number":99,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":100,"context_line":"        self.authorize(context, action\u003d\u0027create\u0027)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self._check_body(body)"},{"line_number":103,"context_line":"        specs \u003d body.get(\u0027extra_specs\u0027, {})"},{"line_number":104,"context_line":"        self._check_extra_specs(specs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F9oE%3D","line":101,"updated":"2013-12-26 08:00:08.000000000","message":"It is better do not touch unrelated code to keep patch clean","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8c75e1bc122566308184fad0654eea4b94e12690","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def create(self, req, flavor_id, body):"},{"line_number":99,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":100,"context_line":"        self.authorize(context, action\u003d\u0027create\u0027)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self._check_body(body)"},{"line_number":103,"context_line":"        specs \u003d body.get(\u0027extra_specs\u0027, {})"},{"line_number":104,"context_line":"        self._check_extra_specs(specs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F7Gc%3D","line":101,"in_reply_to":"AAAAT3%2F%2F9oE%3D","updated":"2013-12-27 02:35:06.000000000","message":"Done","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"73c1ec2442fa59a24cced848b2e57840f1f63538","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    def update(self, req, flavor_id, id, body):"},{"line_number":117,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":118,"context_line":"        self.authorize(context, action\u003d\u0027update\u0027)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        self._check_body(body)"},{"line_number":121,"context_line":"        if id not in body:"},{"line_number":122,"context_line":"            expl \u003d _(\u0027Request body and URI mismatch\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F9oA%3D","line":119,"updated":"2013-12-26 08:00:08.000000000","message":"It is better do not touch unrelated code to keep patch clean","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8c75e1bc122566308184fad0654eea4b94e12690","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    def update(self, req, flavor_id, id, body):"},{"line_number":117,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":118,"context_line":"        self.authorize(context, action\u003d\u0027update\u0027)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        self._check_body(body)"},{"line_number":121,"context_line":"        if id not in body:"},{"line_number":122,"context_line":"            expl \u003d _(\u0027Request body and URI mismatch\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F7GY%3D","line":119,"in_reply_to":"AAAAT3%2F%2F9oA%3D","updated":"2013-12-27 02:35:06.000000000","message":"Done","commit_id":"fc5a82a1f8aefad2234629ba83112b3158b61de8"}],"nova/api/openstack/compute/schemas/v3/flavors_extraspecs.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"0bcf50c89d7d60d2fe081e685eeb42cd2686953f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"        \u0027extra_specs\u0027: {"},{"line_number":19,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":20,"context_line":"            \u0027patternProperties\u0027: {"},{"line_number":21,"context_line":"                \u0027^[a-zA-Z0-9-_:. ]{1,255}$\u0027: {"},{"line_number":22,"context_line":"                    \u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 255,"},{"line_number":23,"context_line":"                },"},{"line_number":24,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ae5cdf2_eedf9836","line":21,"updated":"2014-06-25 02:28:48.000000000","message":"Can we have a common regexp definition for this?","commit_id":"424435fd4e23f721b154758fd23644f153c195a4"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7f9d48db3d664207b700c7f21d908b16f44947fb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"        \u0027extra_specs\u0027: {"},{"line_number":19,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":20,"context_line":"            \u0027patternProperties\u0027: {"},{"line_number":21,"context_line":"                \u0027^[a-zA-Z0-9-_:. ]{1,255}$\u0027: {"},{"line_number":22,"context_line":"                    \u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 255,"},{"line_number":23,"context_line":"                },"},{"line_number":24,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ae5cdf2_a79a1360","line":21,"in_reply_to":"1ae5cdf2_eedf9836","updated":"2014-06-25 05:08:10.000000000","message":"That seems a nice idea, thanks.\n\nI will apply it on the next patch.","commit_id":"424435fd4e23f721b154758fd23644f153c195a4"}],"nova/api/openstack/compute/schemas/v3/flavors_extraspecs_schema.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"eb5ae127f57e56ba824adf31efba27005ff2d770","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            \u0027patternProperties\u0027: {"},{"line_number":23,"context_line":"                \u0027^[a-zA-Z0-9-_:.]{1,255}$\u0027: {"},{"line_number":24,"context_line":"                    \u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 255,"},{"line_number":25,"context_line":"                    \u0027pattern\u0027: \u0027^[a-zA-Z0-9-_:.]*$\u0027"},{"line_number":26,"context_line":"                },"},{"line_number":27,"context_line":"            },"},{"line_number":28,"context_line":"            \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2Fiac%3D","line":25,"updated":"2014-01-12 06:38:05.000000000","message":"Are the values of extra_specs really restricted to this pattern? I don\u0027t see where we are restricted by this.","commit_id":"2ef7fedd4ca2f042ab6ba75e8498f998bad8e5bf"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9aa2eb38cc8eecb0ad2be9c251a661e7ce0ae352","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            \u0027patternProperties\u0027: {"},{"line_number":23,"context_line":"                \u0027^[a-zA-Z0-9-_:.]{1,255}$\u0027: {"},{"line_number":24,"context_line":"                    \u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 255,"},{"line_number":25,"context_line":"                    \u0027pattern\u0027: \u0027^[a-zA-Z0-9-_:.]*$\u0027"},{"line_number":26,"context_line":"                },"},{"line_number":27,"context_line":"            },"},{"line_number":28,"context_line":"            \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2BMYY%3D","line":25,"in_reply_to":"AAAAUH%2F%2FZt0%3D","updated":"2014-01-29 07:51:06.000000000","message":"Hi Chris,\n\nNow we have some schema patches which include similar type, and the other patches don\u0027t have this pattern checking, so I have removed this pattern from the latest patch for consistency.\n\nCan you review the latest patch again?\n\nThanks.","commit_id":"2ef7fedd4ca2f042ab6ba75e8498f998bad8e5bf"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"09912cd6450514125102f3ffb9b9ff63d209eb1f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            \u0027patternProperties\u0027: {"},{"line_number":23,"context_line":"                \u0027^[a-zA-Z0-9-_:.]{1,255}$\u0027: {"},{"line_number":24,"context_line":"                    \u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 255,"},{"line_number":25,"context_line":"                    \u0027pattern\u0027: \u0027^[a-zA-Z0-9-_:.]*$\u0027"},{"line_number":26,"context_line":"                },"},{"line_number":27,"context_line":"            },"},{"line_number":28,"context_line":"            \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FZt0%3D","line":25,"in_reply_to":"AAAAUH%2F%2Fiac%3D","updated":"2014-01-14 05:18:03.000000000","message":"You are right. This pattern has been added by this patch, that does not exist now.\n\nI read the documentations related to flavor_extraspec, they show some use cases:\n\n {key}\u003d{value}\n quota:cpu_quota\u003d10000\n quota:cpu_period\u003d20000\n quota:inbound_average\u003d10240\n quota:outbound_average --value 10240\n disk_write_bytes_sec\u003d10485760\n cpU_type\u003ditanium\n\nThis pattern covers them and float number.\n\nAs you know, Tempest team is creating negative test generator.\nI guess the generator would pass UTF-8 characters(non-ascii) as invalid parameters and expect that Nova returns BadRequest response.\n\nSo this patch adds this pattern what I think it would be usable and strict.\n\nWe(community) added many validation code to current APIs(v1.1, v2), but it was sometimes difficult to apply them because of API compatibility.\nI think it would be easy to make validation lazy, but not easy to make strict after v3 API is released.\nThen, I tried to make strict validation as the first step.\n\nThis is just one idea, how about this?\n\n* http://docs.openstack.org/admin-guide-cloud/content/ch_introduction-to-openstack-compute.html\n* https://wiki.openstack.org/wiki/FlavorKeys","commit_id":"2ef7fedd4ca2f042ab6ba75e8498f998bad8e5bf"}],"nova/tests/test_api_validation.py":[{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"cb63ea07d407487b46e2ac0fb3fc039c17d73cfd","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        detail \u003d (\"Additional properties are not allowed (\u00270123456789a\u0027 was\""},{"line_number":181,"context_line":"                  \" unexpected)\")"},{"line_number":182,"context_line":"        self.check_validation_error(self.post, body\u003d{\u00270123456789a\u0027: \u0027bar\u0027},"},{"line_number":183,"context_line":"                                    expected_detail\u003ddetail)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"class StringTestCase(APIValidationTestCase):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F%2FcQ%3D","line":183,"updated":"2014-01-04 16:03:21.000000000","message":"should add a test for TypeError, when pass non string value to patternProperties parameter","commit_id":"aa125caeb40dd334133152037b5b624e8fa69a5f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8f5486e296954d3811f650bc3eb74234b5319e35","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        detail \u003d (\"Additional properties are not allowed (\u00270123456789a\u0027 was\""},{"line_number":181,"context_line":"                  \" unexpected)\")"},{"line_number":182,"context_line":"        self.check_validation_error(self.post, body\u003d{\u00270123456789a\u0027: \u0027bar\u0027},"},{"line_number":183,"context_line":"                                    expected_detail\u003ddetail)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"class StringTestCase(APIValidationTestCase):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F%2BiM%3D","line":183,"in_reply_to":"AAAAUH%2F%2F%2FcQ%3D","updated":"2014-01-05 19:54:43.000000000","message":"@Ivan: Thank you for reviewing, good point.\nI will add the test.","commit_id":"aa125caeb40dd334133152037b5b624e8fa69a5f"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"bca91933c99573173f26a6b596c5565d8a007257","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_validate_patternProperties(self):"},{"line_number":168,"context_line":"        self.assertEqual(self.post(body\u003d{\u0027foo\u0027: \u0027bar\u0027}),"},{"line_number":169,"context_line":"                         \u0027Validation succeeded.\u0027)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def test_validate_patternProperties_fails(self):"},{"line_number":172,"context_line":"        detail \u003d \"Additional properties are not allowed (\u0027__\u0027 was unexpected)\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2F%2Ba0%3D","line":169,"updated":"2014-01-05 23:44:55.000000000","message":"assertEqual(expected, observed).\n\nhttps://launchpad.net/bugs/1259292","commit_id":"3d30325bf0e3490da0baf9709d8ba7a26d2c470e"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6e94a807f0164335bd3be2c5bebda125f419c752","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def test_validate_patternProperties(self):"},{"line_number":168,"context_line":"        self.assertEqual(self.post(body\u003d{\u0027foo\u0027: \u0027bar\u0027}),"},{"line_number":169,"context_line":"                         \u0027Validation succeeded.\u0027)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def test_validate_patternProperties_fails(self):"},{"line_number":172,"context_line":"        detail \u003d \"Additional properties are not allowed (\u0027__\u0027 was unexpected)\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2F%2BW8%3D","line":169,"in_reply_to":"AAAAUH%2F%2F%2Ba0%3D","updated":"2014-01-06 00:12:09.000000000","message":"Hi Jay,\n\nThanks for reviewing, I see.\nI will fix the test which is added by this patch.","commit_id":"3d30325bf0e3490da0baf9709d8ba7a26d2c470e"}]}
