)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c576ca9f30d8a89504e01d49b931abd76b7d2ddc","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Enable support for API-based extra spec validation. Since most of the"},{"line_number":10,"context_line":"hard work has been done in previous patches, all that\u0027s necessary here"},{"line_number":11,"context_line":"is to wire up the microversion handling and turn things on."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Part of blueprint flavor-extra-spec-validators"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: If67f0d924ea372746a6dc440ea7bdc655e4f0bea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"df33271e_3f11fe54","line":12,"updated":"2020-04-06 10:46:10.000000000","message":"Holding a procedural -1 until we clarify a consensus on two problems I see :\n- if some key was forgotten to be added, it\u0027s reasonable to provide a change for adding it to the right module, and this change is acceptable to be backported thus not breaking the Stable Policy rules.\n- if a new key is provided by a new change in a later release, we all agree with the fact that even if it would look like that we break interoperability between clouds (since API behaviours would change on the same microversion in between a Ussuri cloud and say a Victoria cloud) but since flavors are only defined by operators, we\u0027re OK with this and just leave a big fat documentation explaining the risks to enable strict enforcement and the best practices for managing flavors.","commit_id":"d9943344088ac113e007c230e70b93c3ae3a2c59"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"74b094f28fc3010c304e51ae3e721bca264d613c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Enable support for API-based extra spec validation. Since most of the"},{"line_number":10,"context_line":"hard work has been done in previous patches, all that\u0027s necessary here"},{"line_number":11,"context_line":"is to wire up the microversion handling and turn things on."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Part of blueprint flavor-extra-spec-validators"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: If67f0d924ea372746a6dc440ea7bdc655e4f0bea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"df33271e_1ff4face","line":12,"in_reply_to":"df33271e_1f651ae2","updated":"2020-04-06 11:11:50.000000000","message":"\u003e \u003e Holding a procedural -1 until we clarify a consensus on two\n \u003e \u003e problems I see :\n \u003e \u003e - if some key was forgotten to be added, it\u0027s reasonable to\n \u003e provide\n \u003e \u003e a change for adding it to the right module, and this change is\n \u003e \u003e acceptable to be backported thus not breaking the Stable Policy\n \u003e \u003e rules.\n \u003e \n \u003e +1, Our current test coverage passes. I don\u0027t see any immediate way\n \u003e to add a generic test that could give us more coverage. So I don\u0027t\n \u003e see how can we prevent such break. We have to go out with this\n \u003e feature and see if we missed something that has no current specific\n \u003e test coverage in tree. Then fix things with bugfixes.\n \u003e \n\nYeah, just TBC I\u0027m talking about the Stable policy rules [1]  that prevent backporting API changes. \nThis being said, we, us as the Nova project team, accept on backporting API changes that fix problems [2]\nI just wonder whether we should document it cleanier.\n\n[1] https://docs.openstack.org/project-team-guide/stable-branches.html#review-guidelines\n\n[2] https://docs.openstack.org/nova/latest/contributor/microversions.html#when-do-i-need-a-new-microversion\n\n \u003e \u003e - if a new key is provided by a new change in a later release, we\n \u003e \u003e all agree with the fact that even if it would look like that we\n \u003e \u003e break interoperability between clouds (since API behaviours would\n \u003e \u003e change on the same microversion in between a Ussuri cloud and say\n \u003e a\n \u003e \u003e Victoria cloud) but since flavors are only defined by operators,\n \u003e \u003e we\u0027re OK with this and just leave a big fat documentation\n \u003e \u003e explaining the risks to enable strict enforcement and the best\n \u003e \u003e practices for managing flavors.\n \u003e \n \u003e Can we have an example for adding new in-tree extra spec? For\n \u003e example a new NUMA specific key (we have a bunch already). If that\n \u003e feature does not need any other API change then in the past we\n \u003e allowed to merged it without a microversion bump. Now we say we\n \u003e want to have strict extra spec validation in our API so we merge\n \u003e this commit. This means extra spec become a part of the API\n \u003e contract. For me it seems logical that adding a new in-tree key\n \u003e would require a microversion bump.\n\nYeah, I agree. 2.86 would be the base microversion for enforcing extraspec validation, but a new key asked by a filter in a later release would consenquently require a new microversion, hence be described on a spec.\nMaybe we should also amend our contributor doc to mention it in [3]\n\n[3] https://docs.openstack.org/nova/latest/contributor/process.html#when-do-i-need-a-blueprint-vs-a-spec","commit_id":"d9943344088ac113e007c230e70b93c3ae3a2c59"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"41fe6e22180a6cb9dc07adda3d467965424ee666","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Enable support for API-based extra spec validation. Since most of the"},{"line_number":10,"context_line":"hard work has been done in previous patches, all that\u0027s necessary here"},{"line_number":11,"context_line":"is to wire up the microversion handling and turn things on."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Part of blueprint flavor-extra-spec-validators"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: If67f0d924ea372746a6dc440ea7bdc655e4f0bea"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"df33271e_1f651ae2","line":12,"in_reply_to":"df33271e_3f11fe54","updated":"2020-04-06 10:54:27.000000000","message":"\u003e Holding a procedural -1 until we clarify a consensus on two\n \u003e problems I see :\n \u003e - if some key was forgotten to be added, it\u0027s reasonable to provide\n \u003e a change for adding it to the right module, and this change is\n \u003e acceptable to be backported thus not breaking the Stable Policy\n \u003e rules.\n\n+1, Our current test coverage passes. I don\u0027t see any immediate way to add a generic test that could give us more coverage. So I don\u0027t see how can we prevent such break. We have to go out with this feature and see if we missed something that has no current specific test coverage in tree. Then fix things with bugfixes.\n\n \u003e - if a new key is provided by a new change in a later release, we\n \u003e all agree with the fact that even if it would look like that we\n \u003e break interoperability between clouds (since API behaviours would\n \u003e change on the same microversion in between a Ussuri cloud and say a\n \u003e Victoria cloud) but since flavors are only defined by operators,\n \u003e we\u0027re OK with this and just leave a big fat documentation\n \u003e explaining the risks to enable strict enforcement and the best\n \u003e practices for managing flavors.\n\nCan we have an example for adding new in-tree extra spec? For example a new NUMA specific key (we have a bunch already). If that feature does not need any other API change then in the past we allowed to merged it without a microversion bump. Now we say we want to have strict extra spec validation in our API so we merge this commit. This means extra spec become a part of the API contract. For me it seems logical that adding a new in-tree key would require a microversion bump.","commit_id":"d9943344088ac113e007c230e70b93c3ae3a2c59"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4c11fe29fb594ecb11da82475cec393d18ce4e75","unresolved":false,"context_lines":[{"line_number":241,"context_line":"# minimum version of the API supported."},{"line_number":242,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":243,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":244,"context_line":"_MIN_API_VERSION \u003d \u00272.1\u0027"},{"line_number":245,"context_line":"_MAX_API_VERSION \u003d \u00272.86\u0027"},{"line_number":246,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"# Almost all proxy APIs which are related to network, images and baremetal"}],"source_content_type":"text/x-python","patch_set":17,"id":"df33271e_ba3193ef","line":245,"range":{"start_line":244,"start_character":19,"end_line":245,"end_character":25},"updated":"2020-04-06 18:01:05.000000000","message":"nit unrelated quote change :P","commit_id":"b5aa5a187eb3f86b902659210ec637a8c4935cbe"}],"nova/api/openstack/compute/flavors_extraspecs.py":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    # NOTE(gmann): Here should be 201 instead of 200 by v2.1"},{"line_number":73,"context_line":"    # +microversions because the flavor extra specs has been created"},{"line_number":74,"context_line":"    # completely when returning a response."},{"line_number":75,"context_line":"    @wsgi.Controller.api_version(\u00272.85\u0027)"},{"line_number":76,"context_line":"    @wsgi.expected_errors((400, 404, 409))"},{"line_number":77,"context_line":"    @validation.schema(flavors_extraspecs.create)"},{"line_number":78,"context_line":"    @validation.query_schema(flavors_extraspecs.create_query_schema_v285)"},{"line_number":79,"context_line":"    def create(self, req, flavor_id, body):"},{"line_number":80,"context_line":"        return self._create(req, flavor_id, body)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027, \u00272.84\u0027)  # noqa"},{"line_number":83,"context_line":"    @wsgi.expected_errors((400, 404, 409))"},{"line_number":84,"context_line":"    @validation.schema(flavors_extraspecs.create)"},{"line_number":85,"context_line":"    def create(self, req, flavor_id, body):"},{"line_number":86,"context_line":"        return self._create(req, flavor_id, body)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _create(self, req, flavor_id, body):"},{"line_number":89,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_760cd5eb","line":86,"range":{"start_line":75,"start_character":0,"end_line":86,"end_character":49},"updated":"2020-03-31 11:17:23.000000000","message":"They have the same request parameters, and why does it cannot be verified by validation.query_schema in one api interface?","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a74d3b9a0072a1b0183c8b62c27664f514d2c3b4","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    # NOTE(gmann): Here should be 201 instead of 200 by v2.1"},{"line_number":73,"context_line":"    # +microversions because the flavor extra specs has been created"},{"line_number":74,"context_line":"    # completely when returning a response."},{"line_number":75,"context_line":"    @wsgi.Controller.api_version(\u00272.85\u0027)"},{"line_number":76,"context_line":"    @wsgi.expected_errors((400, 404, 409))"},{"line_number":77,"context_line":"    @validation.schema(flavors_extraspecs.create)"},{"line_number":78,"context_line":"    @validation.query_schema(flavors_extraspecs.create_query_schema_v285)"},{"line_number":79,"context_line":"    def create(self, req, flavor_id, body):"},{"line_number":80,"context_line":"        return self._create(req, flavor_id, body)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027, \u00272.84\u0027)  # noqa"},{"line_number":83,"context_line":"    @wsgi.expected_errors((400, 404, 409))"},{"line_number":84,"context_line":"    @validation.schema(flavors_extraspecs.create)"},{"line_number":85,"context_line":"    def create(self, req, flavor_id, body):"},{"line_number":86,"context_line":"        return self._create(req, flavor_id, body)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _create(self, req, flavor_id, body):"},{"line_number":89,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_00c37739","line":86,"range":{"start_line":75,"start_character":0,"end_line":86,"end_character":49},"in_reply_to":"df33271e_760cd5eb","updated":"2020-03-31 14:38:56.000000000","message":"Because we had no validation of query args before. If I add that, it would be an API change.","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    @wsgi.expected_errors((400, 404, 409))"},{"line_number":106,"context_line":"    @validation.schema(flavors_extraspecs.update)"},{"line_number":107,"context_line":"    @validation.query_schema(flavors_extraspecs.update_query_schema_v285)"},{"line_number":108,"context_line":"    def update(self, req, flavor_id, id, body):"},{"line_number":109,"context_line":"        return self._update(req, flavor_id, id, body)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027, \u00272.84\u0027)  # noqa"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_5611d103","line":108,"updated":"2020-03-31 11:17:23.000000000","message":"The same doubt as above.","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a74d3b9a0072a1b0183c8b62c27664f514d2c3b4","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    @wsgi.expected_errors((400, 404, 409))"},{"line_number":106,"context_line":"    @validation.schema(flavors_extraspecs.update)"},{"line_number":107,"context_line":"    @validation.query_schema(flavors_extraspecs.update_query_schema_v285)"},{"line_number":108,"context_line":"    def update(self, req, flavor_id, id, body):"},{"line_number":109,"context_line":"        return self._update(req, flavor_id, id, body)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @wsgi.Controller.api_version(\u00272.0\u0027, \u00272.84\u0027)  # noqa"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_e0bf73a7","line":108,"in_reply_to":"df33271e_5611d103","updated":"2020-03-31 14:38:56.000000000","message":"As above","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"}],"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4c11fe29fb594ecb11da82475cec393d18ce4e75","unresolved":false,"context_lines":[{"line_number":1128,"context_line":"for the following APIs:"},{"line_number":1129,"context_line":""},{"line_number":1130,"context_line":"* ``POST /flavors/{flavor_id}/os-extra_specs``"},{"line_number":1131,"context_line":"* ``PUT /flavors/{flavor_id}/os-extra_specs/{id}``"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"Validation is only used for recognized extra spec namespaces."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df33271e_1a751f99","line":1131,"range":{"start_line":1131,"start_character":44,"end_line":1131,"end_character":48},"updated":"2020-04-06 18:01:05.000000000","message":"i need to file a bug for this by they way but we should stop using id in all our routes\n\nwhen we do this the automatic variable introduce in the reoute lib alisas the id built in function and we often propagate that down to other fucntions so this is something we should stop doing going forward.\n\nthat said its out of scope of this spec.","commit_id":"b5aa5a187eb3f86b902659210ec637a8c4935cbe"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7a552135401b9c93622647f0466f4d6bb3b4721b","unresolved":false,"context_lines":[{"line_number":1130,"context_line":"* ``POST /flavors/{flavor_id}/os-extra_specs``"},{"line_number":1131,"context_line":"* ``PUT /flavors/{flavor_id}/os-extra_specs/{id}``"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"Validation is only used for recognized extra spec namespaces."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df33271e_f4d97422","line":1133,"updated":"2020-04-06 16:59:04.000000000","message":"I think we should list the allowed extra spec namespaces here. As when this list changes, we will need a new microversion (at a minimum).","commit_id":"b5aa5a187eb3f86b902659210ec637a8c4935cbe"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3559c3d6b977a1db0fb28bc07901d7b367e8313f","unresolved":false,"context_lines":[{"line_number":1130,"context_line":"* ``POST /flavors/{flavor_id}/os-extra_specs``"},{"line_number":1131,"context_line":"* ``PUT /flavors/{flavor_id}/os-extra_specs/{id}``"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"Validation is only used for recognized extra spec namespaces."}],"source_content_type":"text/x-rst","patch_set":17,"id":"df33271e_df21dbfe","line":1133,"in_reply_to":"df33271e_f4d97422","updated":"2020-04-07 09:13:32.000000000","message":"Done","commit_id":"b5aa5a187eb3f86b902659210ec637a8c4935cbe"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"29bb5a6e5ea2a212aa9467acdb8a6a7fd541dfca","unresolved":false,"context_lines":[{"line_number":1130,"context_line":"* ``POST /flavors/{flavor_id}/os-extra_specs``"},{"line_number":1131,"context_line":"* ``PUT /flavors/{flavor_id}/os-extra_specs/{id}``"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"Validation is only used for recognized extra spec namespaces, namely:"},{"line_number":1134,"context_line":"``accel``, ``aggregate_instance_extra_specs``, ``capabilities``, ``hw``,"},{"line_number":1135,"context_line":"``hw_rng``, ``hw_video``, ``os``, ``pci_passthrough``, ``powervm``, ``quota``,"},{"line_number":1136,"context_line":"``resources``, ``trait``, and ``vmware``."}],"source_content_type":"text/x-rst","patch_set":18,"id":"df33271e_ecb18ee3","line":1133,"range":{"start_line":1133,"start_character":62,"end_line":1133,"end_character":68},"updated":"2020-04-07 15:26:43.000000000","message":"supernit - currently - as this list can change in the future.","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"525a189baf5af1239fdbc13fe94f87a94a5a91be","unresolved":false,"context_lines":[{"line_number":1130,"context_line":"* ``POST /flavors/{flavor_id}/os-extra_specs``"},{"line_number":1131,"context_line":"* ``PUT /flavors/{flavor_id}/os-extra_specs/{id}``"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"Validation is only used for recognized extra spec namespaces, namely:"},{"line_number":1134,"context_line":"``accel``, ``aggregate_instance_extra_specs``, ``capabilities``, ``hw``,"},{"line_number":1135,"context_line":"``hw_rng``, ``hw_video``, ``os``, ``pci_passthrough``, ``powervm``, ``quota``,"},{"line_number":1136,"context_line":"``resources``, ``trait``, and ``vmware``."}],"source_content_type":"text/x-rst","patch_set":18,"id":"df33271e_a973e17f","line":1133,"range":{"start_line":1133,"start_character":62,"end_line":1133,"end_character":68},"in_reply_to":"df33271e_ecb18ee3","updated":"2020-04-08 07:35:10.000000000","message":"See my comment in https://review.opendev.org/#/c/717789/2\nThis list *shouldn\u0027t change* for 2.86.\n\nIf we have to provide a new namespace in a later cycle, then it would need to create a new microversion.","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"}],"nova/api/openstack/compute/schemas/flavors_extraspecs.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a69d415672999b3543c7a01b2291c9f0b1002f30","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            \u0027enum\u0027: [\u0027strict\u0027, \u0027permissive\u0027, \u0027disabled\u0027],"},{"line_number":40,"context_line":"        }),"},{"line_number":41,"context_line":"    },"},{"line_number":42,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":43,"context_line":"}"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_4cdbba4b","line":42,"range":{"start_line":42,"start_character":28,"end_line":42,"end_character":33},"updated":"2020-02-18 16:20:31.000000000","message":"I wonder should this be True since we had no validation on parameters here previously?","commit_id":"21f9582a586c49ae4ee56a7d36240f9e56be0b1d"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"})"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"update_query_schema_v285 \u003d create_query_schema_v285"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_961fd906","line":53,"range":{"start_line":53,"start_character":27,"end_line":53,"end_character":51},"updated":"2020-03-31 11:17:23.000000000","message":"I think this is done by copy.deepcopy(create_query_schema_v285) will be better.","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25e8441312091ed1ae15af17399f18db9674421f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"})"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"update_query_schema_v285 \u003d create_query_schema_v285"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_85080692","line":53,"range":{"start_line":53,"start_character":27,"end_line":53,"end_character":51},"in_reply_to":"df33271e_60e9a3b5","updated":"2020-04-02 08:50:38.000000000","message":"deepcopy would allow divergence but we i) don\u0027t want divergence here ii) these schemas will never change in the future as that would require another version bump and therefore a different schema variable.","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"26099aecff4c198f8c21acd1888909602b03dee2","unresolved":false,"context_lines":[{"line_number":50,"context_line":"})"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"update_query_schema_v285 \u003d create_query_schema_v285"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_c712d709","line":53,"range":{"start_line":53,"start_character":27,"end_line":53,"end_character":51},"in_reply_to":"df33271e_85080692","updated":"2020-04-05 02:16:43.000000000","message":"\u003e deepcopy would allow divergence but we i) don\u0027t want divergence\n \u003e here ii) these schemas will never change in the future as that\n \u003e would require another version bump and therefore a different schema\n \u003e variable.\n\nI think I missed this point, LGTM.","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a74d3b9a0072a1b0183c8b62c27664f514d2c3b4","unresolved":false,"context_lines":[{"line_number":50,"context_line":"})"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"update_query_schema_v285 \u003d create_query_schema_v285"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_60e9a3b5","line":53,"range":{"start_line":53,"start_character":27,"end_line":53,"end_character":51},"in_reply_to":"df33271e_961fd906","updated":"2020-03-31 14:38:56.000000000","message":"That\u0027s only necessary if I wanted to modify this, which I do not. As such, it\u0027s unnecessary","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1e8bdffe68304c999809ad5a60fe62ab4dd9b749","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \u0027properties\u0027: {"},{"line_number":37,"context_line":"        \u0027validation\u0027: parameter_types.single_param({"},{"line_number":38,"context_line":"            \u0027type\u0027: \u0027string\u0027,"},{"line_number":39,"context_line":"            \u0027enum\u0027: [\u0027strict\u0027, \u0027permissive\u0027, \u0027disabled\u0027],"},{"line_number":40,"context_line":"        }),"},{"line_number":41,"context_line":"    },"},{"line_number":42,"context_line":"    \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":16,"id":"df33271e_f5cfb7ad","line":39,"range":{"start_line":39,"start_character":46,"end_line":39,"end_character":54},"updated":"2020-04-06 12:47:02.000000000","message":"Thinking about it more, I think its the \"disabled\" I am against. Are we really sure we want this?\n\nI would prefer \"permissive\" was implemented via some CUSTOM namespace approach, so its very visable to end users what isn\u0027t a \"standard\" key. But I suspect we can fix that in a future microversion, should it be needed.","commit_id":"d9943344088ac113e007c230e70b93c3ae3a2c59"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e9545306834e3e6c1ccf3ee1c6519cface1db49a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \u0027properties\u0027: {"},{"line_number":37,"context_line":"        \u0027validation\u0027: parameter_types.single_param({"},{"line_number":38,"context_line":"            \u0027type\u0027: \u0027string\u0027,"},{"line_number":39,"context_line":"            \u0027enum\u0027: [\u0027strict\u0027, \u0027permissive\u0027, \u0027disabled\u0027],"},{"line_number":40,"context_line":"        }),"},{"line_number":41,"context_line":"    },"},{"line_number":42,"context_line":"    \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":16,"id":"df33271e_b1541e56","line":39,"range":{"start_line":39,"start_character":46,"end_line":39,"end_character":54},"in_reply_to":"df33271e_6eb111e2","updated":"2020-04-06 16:18:29.000000000","message":"Done","commit_id":"d9943344088ac113e007c230e70b93c3ae3a2c59"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"21f0ef85ccc0a08abb989092d9331c4dadf47035","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \u0027properties\u0027: {"},{"line_number":37,"context_line":"        \u0027validation\u0027: parameter_types.single_param({"},{"line_number":38,"context_line":"            \u0027type\u0027: \u0027string\u0027,"},{"line_number":39,"context_line":"            \u0027enum\u0027: [\u0027strict\u0027, \u0027permissive\u0027, \u0027disabled\u0027],"},{"line_number":40,"context_line":"        }),"},{"line_number":41,"context_line":"    },"},{"line_number":42,"context_line":"    \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":16,"id":"df33271e_6eb111e2","line":39,"range":{"start_line":39,"start_character":46,"end_line":39,"end_character":54},"in_reply_to":"df33271e_f5cfb7ad","updated":"2020-04-06 15:34:45.000000000","message":"I\u0027m OK to drop the disabled mode.","commit_id":"d9943344088ac113e007c230e70b93c3ae3a2c59"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6008ed383da59d2949cb43e896f5ae0774f945ba","unresolved":false,"context_lines":[{"line_number":50,"context_line":"})"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"update_query_schema_v286 \u003d create_query_schema_v286"}],"source_content_type":"text/x-python","patch_set":16,"id":"df33271e_fa7044df","line":53,"updated":"2020-04-06 12:43:20.000000000","message":"Yeah, I think we are missing this being in the api-ref.","commit_id":"d9943344088ac113e007c230e70b93c3ae3a2c59"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e9545306834e3e6c1ccf3ee1c6519cface1db49a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"})"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"update_query_schema_v286 \u003d create_query_schema_v286"}],"source_content_type":"text/x-python","patch_set":16,"id":"df33271e_91511a66","line":53,"in_reply_to":"df33271e_0be678e9","updated":"2020-04-06 16:18:29.000000000","message":"Not needed now that we\u0027ve dropped this parameter.","commit_id":"d9943344088ac113e007c230e70b93c3ae3a2c59"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"69ce719d3ce33acbe66af0fcdbd7bb8246e8231b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"})"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"update_query_schema_v286 \u003d create_query_schema_v286"}],"source_content_type":"text/x-python","patch_set":16,"id":"df33271e_0be678e9","line":53,"in_reply_to":"df33271e_fa7044df","updated":"2020-04-06 14:27:23.000000000","message":"Actually, you\u0027re right. Good point.","commit_id":"d9943344088ac113e007c230e70b93c3ae3a2c59"}],"nova/tests/functional/test_flavor_extraspecs.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a69d415672999b3543c7a01b2291c9f0b1002f30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3fa7e38b_2cc75e69","updated":"2020-02-18 16:20:31.000000000","message":"I\u0027m not sure if these are necessary since we have unit tests","commit_id":"21f9582a586c49ae4ee56a7d36240f9e56be0b1d"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        \"\"\"Test creating extra specs with invalid specs in strict mode.\"\"\""},{"line_number":81,"context_line":"        body \u003d {\u0027extra_specs\u0027: {\u0027hw:numa_nodes\u0027: \u00271\u0027, \u0027foo\u0027: \u0027bar\u0027}}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # this should fail because we\u0027re in strict mode by default.."},{"line_number":84,"context_line":"        with testtools.ExpectedException("},{"line_number":85,"context_line":"            api_client.OpenStackApiException"},{"line_number":86,"context_line":"        ) as exc:"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_96e4f90e","line":83,"range":{"start_line":83,"start_character":67,"end_line":83,"end_character":68},"updated":"2020-03-31 11:17:23.000000000","message":"rdundant","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"26099aecff4c198f8c21acd1888909602b03dee2","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        \"\"\"Test creating extra specs with invalid specs in strict mode.\"\"\""},{"line_number":81,"context_line":"        body \u003d {\u0027extra_specs\u0027: {\u0027hw:numa_nodes\u0027: \u00271\u0027, \u0027foo\u0027: \u0027bar\u0027}}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # this should fail because we\u0027re in strict mode by default.."},{"line_number":84,"context_line":"        with testtools.ExpectedException("},{"line_number":85,"context_line":"            api_client.OpenStackApiException"},{"line_number":86,"context_line":"        ) as exc:"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_47fec7ae","line":83,"range":{"start_line":83,"start_character":67,"end_line":83,"end_character":68},"in_reply_to":"df33271e_200cbba3","updated":"2020-04-05 02:16:43.000000000","message":"\u003e Intentional, though there should be three docs :) It\u0027s an ellipsis\n \u003e to indicate that we\u0027re continuing the statement further down\n\nSorry, I am very new to such use of this way.","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"08afb5d95d0efa0cf5e28c06876a5d669a9146f6","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        \"\"\"Test creating extra specs with invalid specs in strict mode.\"\"\""},{"line_number":81,"context_line":"        body \u003d {\u0027extra_specs\u0027: {\u0027hw:numa_nodes\u0027: \u00271\u0027, \u0027foo\u0027: \u0027bar\u0027}}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # this should fail because we\u0027re in strict mode by default.."},{"line_number":84,"context_line":"        with testtools.ExpectedException("},{"line_number":85,"context_line":"            api_client.OpenStackApiException"},{"line_number":86,"context_line":"        ) as exc:"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_1b57695a","line":83,"range":{"start_line":83,"start_character":67,"end_line":83,"end_character":68},"in_reply_to":"df33271e_200cbba3","updated":"2020-03-31 15:37:26.000000000","message":"Done","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a74d3b9a0072a1b0183c8b62c27664f514d2c3b4","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        \"\"\"Test creating extra specs with invalid specs in strict mode.\"\"\""},{"line_number":81,"context_line":"        body \u003d {\u0027extra_specs\u0027: {\u0027hw:numa_nodes\u0027: \u00271\u0027, \u0027foo\u0027: \u0027bar\u0027}}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # this should fail because we\u0027re in strict mode by default.."},{"line_number":84,"context_line":"        with testtools.ExpectedException("},{"line_number":85,"context_line":"            api_client.OpenStackApiException"},{"line_number":86,"context_line":"        ) as exc:"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_200cbba3","line":83,"range":{"start_line":83,"start_character":67,"end_line":83,"end_character":68},"in_reply_to":"df33271e_96e4f90e","updated":"2020-03-31 14:38:56.000000000","message":"Intentional, though there should be three docs :) It\u0027s an ellipsis to indicate that we\u0027re continuing the statement further down","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.admin_api.post_extra_spec(self.flavor_id, body)"},{"line_number":88,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        # ...and the extra specs should not be saved"},{"line_number":91,"context_line":"        self.assertEqual({}, self.admin_api.get_extra_specs(self.flavor_id))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_create_invalid_spec_permissive(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_16c2a959","line":90,"range":{"start_line":90,"start_character":10,"end_line":90,"end_character":13},"updated":"2020-03-31 11:17:23.000000000","message":"What is this mean?","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a74d3b9a0072a1b0183c8b62c27664f514d2c3b4","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.admin_api.post_extra_spec(self.flavor_id, body)"},{"line_number":88,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        # ...and the extra specs should not be saved"},{"line_number":91,"context_line":"        self.assertEqual({}, self.admin_api.get_extra_specs(self.flavor_id))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_create_invalid_spec_permissive(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_a0f72b8b","line":90,"range":{"start_line":90,"start_character":10,"end_line":90,"end_character":13},"in_reply_to":"df33271e_16c2a959","updated":"2020-03-31 14:38:56.000000000","message":"it means this is a continuation of something I said previously","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        body[\u0027extra_specs\u0027][\u0027hw:numa_nodes\u0027] \u003d \u0027foo\u0027"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        # ...but this should fail because we do recognize this spec as it\u0027s"},{"line_number":106,"context_line":"        # wrong"},{"line_number":107,"context_line":"        with testtools.ExpectedException("},{"line_number":108,"context_line":"            api_client.OpenStackApiException"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_36bd2dd8","line":105,"range":{"start_line":105,"start_character":10,"end_line":105,"end_character":13},"updated":"2020-03-31 11:17:23.000000000","message":"ditto","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        body[\u0027extra_specs\u0027][\u0027hw:numa_nodes\u0027] \u003d \u0027foo\u0027"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # ...as should this"},{"line_number":127,"context_line":"        self.admin_api.post_extra_spec("},{"line_number":128,"context_line":"            self.flavor_id, body, validation\u003d\u0027disabled\u0027,"},{"line_number":129,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_96923956","line":126,"range":{"start_line":126,"start_character":10,"end_line":126,"end_character":13},"updated":"2020-03-31 11:17:23.000000000","message":"ditto","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        # ...as should this"},{"line_number":127,"context_line":"        self.admin_api.post_extra_spec("},{"line_number":128,"context_line":"            self.flavor_id, body, validation\u003d\u0027disabled\u0027,"},{"line_number":129,"context_line":"        )"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def test_update_invalid_spec(self):"},{"line_number":132,"context_line":"        \"\"\"Test updating extra specs with invalid specs in strict mode.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_1690e949","line":129,"updated":"2020-03-31 11:17:23.000000000","message":"This case just run the self.admin_api.post_extra_spec() api twice, but assert anything to validate its result, can you add  some assert?","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a74d3b9a0072a1b0183c8b62c27664f514d2c3b4","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        # ...as should this"},{"line_number":127,"context_line":"        self.admin_api.post_extra_spec("},{"line_number":128,"context_line":"            self.flavor_id, body, validation\u003d\u0027disabled\u0027,"},{"line_number":129,"context_line":"        )"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def test_update_invalid_spec(self):"},{"line_number":132,"context_line":"        \"\"\"Test updating extra specs with invalid specs in strict mode.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_c06d0f33","line":129,"in_reply_to":"df33271e_1690e949","updated":"2020-03-31 14:38:56.000000000","message":"I\u0027m implicitly asserting that the call doesn\u0027t fail. If this wasn\u0027t working, I\u0027d see a \u0027api_client.OpenStackApiException\u0027 like I do in the previous test. I\u0027m not seeing that, so this is working","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        spec_id \u003d \u0027hw:numa_nodes\u0027"},{"line_number":144,"context_line":"        body \u003d {\u0027hw:numa_nodes\u0027: \u0027foo\u0027}"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # ...while this should fail because the value is not valid"},{"line_number":147,"context_line":"        with testtools.ExpectedException("},{"line_number":148,"context_line":"            api_client.OpenStackApiException"},{"line_number":149,"context_line":"        ) as exc:"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_b6a3fd9d","line":146,"range":{"start_line":146,"start_character":10,"end_line":146,"end_character":13},"updated":"2020-03-31 11:17:23.000000000","message":"ditto","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            self.admin_api.put_extra_spec(self.flavor_id, spec_id, body)"},{"line_number":151,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        # ...and neither the extra specs should not be saved"},{"line_number":154,"context_line":"        self.assertEqual({}, self.admin_api.get_extra_specs(self.flavor_id))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_update_invalid_spec_permissive(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_d6a681ab","line":153,"range":{"start_line":153,"start_character":10,"end_line":153,"end_character":13},"updated":"2020-03-31 11:17:23.000000000","message":"ditto","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        spec_id \u003d \u0027hw:numa_nodes\u0027"},{"line_number":168,"context_line":"        body \u003d {\u0027hw:numa_nodes\u0027: \u0027foo\u0027}"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # ...but this should fail because the value is not valid"},{"line_number":171,"context_line":"        with testtools.ExpectedException("},{"line_number":172,"context_line":"            api_client.OpenStackApiException"},{"line_number":173,"context_line":"        ) as exc:"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_16be29b3","line":170,"range":{"start_line":170,"start_character":10,"end_line":170,"end_character":13},"updated":"2020-03-31 11:17:23.000000000","message":"ditto","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":174,"context_line":"            self.admin_api.put_extra_spec(self.flavor_id, spec_id, body)"},{"line_number":175,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def test_update_invalid_spec_disabled(self):"},{"line_number":178,"context_line":"        \"\"\"Test updating extra specs with invalid specs in disabled mode.\"\"\""},{"line_number":179,"context_line":"        spec_id \u003d \u0027foo\u0027"},{"line_number":180,"context_line":"        body \u003d {\u0027foo\u0027: \u0027bar\u0027}"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_b6d13dfe","line":177,"updated":"2020-03-31 11:17:23.000000000","message":"can we add some assert?","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a74d3b9a0072a1b0183c8b62c27664f514d2c3b4","unresolved":false,"context_lines":[{"line_number":174,"context_line":"            self.admin_api.put_extra_spec(self.flavor_id, spec_id, body)"},{"line_number":175,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def test_update_invalid_spec_disabled(self):"},{"line_number":178,"context_line":"        \"\"\"Test updating extra specs with invalid specs in disabled mode.\"\"\""},{"line_number":179,"context_line":"        spec_id \u003d \u0027foo\u0027"},{"line_number":180,"context_line":"        body \u003d {\u0027foo\u0027: \u0027bar\u0027}"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_605ec376","line":177,"in_reply_to":"df33271e_b6d13dfe","updated":"2020-03-31 14:38:56.000000000","message":"As above, this test would fail if any of the \u0027put_extra_spec\u0027 calls below failed","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        spec_id \u003d \u0027hw:numa_nodes\u0027"},{"line_number":188,"context_line":"        body \u003d {\u0027hw:numa_nodes\u0027: \u0027foo\u0027}"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        # ...as should this"},{"line_number":191,"context_line":"        self.admin_api.put_extra_spec("},{"line_number":192,"context_line":"            self.flavor_id, spec_id, body, validation\u003d\u0027disabled\u0027,"},{"line_number":193,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":12,"id":"df33271e_b6cc9d6a","line":190,"range":{"start_line":190,"start_character":10,"end_line":190,"end_character":13},"updated":"2020-03-31 11:17:23.000000000","message":"ditto.","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e02bbbf9e2a4dc9db1af199ba65d2c8130bb64a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            body[\u0027extra_specs\u0027], self.admin_api.get_extra_specs(self.flavor_id)"},{"line_number":38,"context_line":"        )"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_create_invalid_spec(self):"},{"line_number":41,"context_line":"        \"\"\"Test creating flavor extra specs with invalid specs."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        This should pass because validation is not enabled in this API"},{"line_number":44,"context_line":"        microversion."},{"line_number":45,"context_line":"        \"\"\""},{"line_number":46,"context_line":"        body \u003d {\u0027extra_specs\u0027: {\u0027hw:numa_nodes\u0027: \u00271\u0027, \u0027foo\u0027: \u0027bar\u0027}}"},{"line_number":47,"context_line":"        self.admin_api.post_extra_spec(self.flavor_id, body)"},{"line_number":48,"context_line":"        self.assertEqual("},{"line_number":49,"context_line":"            body[\u0027extra_specs\u0027], self.admin_api.get_extra_specs(self.flavor_id)"},{"line_number":50,"context_line":"        )"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_update(self):"},{"line_number":53,"context_line":"        \"\"\"Test updating extra specs with valid specs.\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_410e698d","line":50,"range":{"start_line":40,"start_character":1,"end_line":50,"end_character":9},"updated":"2020-04-08 11:33:24.000000000","message":"I think this is passing with 2.86 as well after the recent changes as the global namespace is not validated.","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"651f253deed4fc6deb97d017cf404126c188c07e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            body[\u0027extra_specs\u0027], self.admin_api.get_extra_specs(self.flavor_id)"},{"line_number":38,"context_line":"        )"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def test_create_invalid_spec(self):"},{"line_number":41,"context_line":"        \"\"\"Test creating flavor extra specs with invalid specs."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        This should pass because validation is not enabled in this API"},{"line_number":44,"context_line":"        microversion."},{"line_number":45,"context_line":"        \"\"\""},{"line_number":46,"context_line":"        body \u003d {\u0027extra_specs\u0027: {\u0027hw:numa_nodes\u0027: \u00271\u0027, \u0027foo\u0027: \u0027bar\u0027}}"},{"line_number":47,"context_line":"        self.admin_api.post_extra_spec(self.flavor_id, body)"},{"line_number":48,"context_line":"        self.assertEqual("},{"line_number":49,"context_line":"            body[\u0027extra_specs\u0027], self.admin_api.get_extra_specs(self.flavor_id)"},{"line_number":50,"context_line":"        )"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_update(self):"},{"line_number":53,"context_line":"        \"\"\"Test updating extra specs with valid specs.\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_f72dbf46","line":50,"range":{"start_line":40,"start_character":1,"end_line":50,"end_character":9},"in_reply_to":"df33271e_410e698d","updated":"2020-04-08 12:46:21.000000000","message":"Done","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e02bbbf9e2a4dc9db1af199ba65d2c8130bb64a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            body, self.admin_api.get_extra_spec(self.flavor_id, spec_id)"},{"line_number":59,"context_line":"        )"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def test_update_invalid_spec(self):"},{"line_number":62,"context_line":"        \"\"\"Test updating extra specs with invalid specs."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        This should pass because validation is not enabled in this API"},{"line_number":65,"context_line":"        microversion."},{"line_number":66,"context_line":"        \"\"\""},{"line_number":67,"context_line":"        spec_id \u003d \u0027foo:bar\u0027"},{"line_number":68,"context_line":"        body \u003d {\u0027foo:bar\u0027: \u0027baz\u0027}"},{"line_number":69,"context_line":"        self.admin_api.put_extra_spec(self.flavor_id, spec_id, body)"},{"line_number":70,"context_line":"        self.assertEqual("},{"line_number":71,"context_line":"            body, self.admin_api.get_extra_spec(self.flavor_id, spec_id)"},{"line_number":72,"context_line":"        )"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class FlavorExtraSpecsV286Test(FlavorExtraSpecsTest):"},{"line_number":76,"context_line":"    api_major_version \u003d \u0027v2.1\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_2186c5dc","line":73,"range":{"start_line":61,"start_character":0,"end_line":73,"end_character":0},"updated":"2020-04-08 11:33:24.000000000","message":"This also passes with 2.86 as well as \u0027foo\u0027 is not a known namespace and therefore not validated","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"651f253deed4fc6deb97d017cf404126c188c07e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            body, self.admin_api.get_extra_spec(self.flavor_id, spec_id)"},{"line_number":59,"context_line":"        )"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def test_update_invalid_spec(self):"},{"line_number":62,"context_line":"        \"\"\"Test updating extra specs with invalid specs."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        This should pass because validation is not enabled in this API"},{"line_number":65,"context_line":"        microversion."},{"line_number":66,"context_line":"        \"\"\""},{"line_number":67,"context_line":"        spec_id \u003d \u0027foo:bar\u0027"},{"line_number":68,"context_line":"        body \u003d {\u0027foo:bar\u0027: \u0027baz\u0027}"},{"line_number":69,"context_line":"        self.admin_api.put_extra_spec(self.flavor_id, spec_id, body)"},{"line_number":70,"context_line":"        self.assertEqual("},{"line_number":71,"context_line":"            body, self.admin_api.get_extra_spec(self.flavor_id, spec_id)"},{"line_number":72,"context_line":"        )"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class FlavorExtraSpecsV286Test(FlavorExtraSpecsTest):"},{"line_number":76,"context_line":"    api_major_version \u003d \u0027v2.1\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_d7307ba1","line":73,"range":{"start_line":61,"start_character":0,"end_line":73,"end_character":0},"in_reply_to":"df33271e_2186c5dc","updated":"2020-04-08 12:46:21.000000000","message":"Done","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e02bbbf9e2a4dc9db1af199ba65d2c8130bb64a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            api_client.OpenStackApiException"},{"line_number":87,"context_line":"        ) as exc:"},{"line_number":88,"context_line":"            self.admin_api.post_extra_spec(self.flavor_id, body)"},{"line_number":89,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        # ...and the extra specs should not be saved"},{"line_number":92,"context_line":"        self.assertEqual({}, self.admin_api.get_extra_specs(self.flavor_id))"}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_c180b98e","line":89,"updated":"2020-04-08 11:33:24.000000000","message":"This exception checking patter is wrong as this line never executed as L88 raises. (Tested by changing the expected value to 500)\n\nThis pattern works for me \n\n        exc \u003d self.assertRaises(api_client.OpenStackApiException, self.admin_api.post_extra_spec, self.flavor_id, body)\n        self.assertEqual(500, exc.response.status_code)","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"651f253deed4fc6deb97d017cf404126c188c07e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            api_client.OpenStackApiException"},{"line_number":87,"context_line":"        ) as exc:"},{"line_number":88,"context_line":"            self.admin_api.post_extra_spec(self.flavor_id, body)"},{"line_number":89,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        # ...and the extra specs should not be saved"},{"line_number":92,"context_line":"        self.assertEqual({}, self.admin_api.get_extra_specs(self.flavor_id))"}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_f74bff83","line":89,"in_reply_to":"df33271e_c180b98e","updated":"2020-04-08 12:46:21.000000000","message":"Done","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e02bbbf9e2a4dc9db1af199ba65d2c8130bb64a","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            api_client.OpenStackApiException"},{"line_number":107,"context_line":"        ) as exc:"},{"line_number":108,"context_line":"            self.admin_api.post_extra_spec(self.flavor_id, body)"},{"line_number":109,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_update_invalid_spec(self):"},{"line_number":112,"context_line":"        \"\"\"Test updating extra specs with invalid specs.\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_611f2d70","line":109,"updated":"2020-04-08 11:33:24.000000000","message":"ditto","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e02bbbf9e2a4dc9db1af199ba65d2c8130bb64a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            api_client.OpenStackApiException"},{"line_number":119,"context_line":"        ) as exc:"},{"line_number":120,"context_line":"            self.admin_api.put_extra_spec(self.flavor_id, spec_id, body)"},{"line_number":121,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        spec_id \u003d \u0027hw:numa_nodes\u0027"},{"line_number":124,"context_line":"        body \u003d {\u0027hw:numa_nodes\u0027: \u0027foo\u0027}"}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_a129359c","line":121,"updated":"2020-04-08 11:33:24.000000000","message":"ditto","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"651f253deed4fc6deb97d017cf404126c188c07e","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            api_client.OpenStackApiException"},{"line_number":119,"context_line":"        ) as exc:"},{"line_number":120,"context_line":"            self.admin_api.put_extra_spec(self.flavor_id, spec_id, body)"},{"line_number":121,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        spec_id \u003d \u0027hw:numa_nodes\u0027"},{"line_number":124,"context_line":"        body \u003d {\u0027hw:numa_nodes\u0027: \u0027foo\u0027}"}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_d74ebb94","line":121,"in_reply_to":"df33271e_a129359c","updated":"2020-04-08 12:46:21.000000000","message":"Done","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e02bbbf9e2a4dc9db1af199ba65d2c8130bb64a","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            api_client.OpenStackApiException"},{"line_number":129,"context_line":"        ) as exc:"},{"line_number":130,"context_line":"            self.admin_api.put_extra_spec(self.flavor_id, spec_id, body)"},{"line_number":131,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        # ...and neither extra spec should be saved"},{"line_number":134,"context_line":"        self.assertEqual({}, self.admin_api.get_extra_specs(self.flavor_id))"}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_e11cdd78","line":131,"updated":"2020-04-08 11:33:24.000000000","message":"ditto","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"651f253deed4fc6deb97d017cf404126c188c07e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            api_client.OpenStackApiException"},{"line_number":129,"context_line":"        ) as exc:"},{"line_number":130,"context_line":"            self.admin_api.put_extra_spec(self.flavor_id, spec_id, body)"},{"line_number":131,"context_line":"            self.assertEqual(400, exc.response.status_code)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        # ...and neither extra spec should be saved"},{"line_number":134,"context_line":"        self.assertEqual({}, self.admin_api.get_extra_specs(self.flavor_id))"}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_3746077e","line":131,"in_reply_to":"df33271e_e11cdd78","updated":"2020-04-08 12:46:21.000000000","message":"Done","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"29bb5a6e5ea2a212aa9467acdb8a6a7fd541dfca","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        spec_id \u003d \u0027foo:bar\u0027"},{"line_number":139,"context_line":"        body \u003d {\u0027foo:bar\u0027: \u0027baz\u0027}"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        # this should pass because we don\u0027t recognize the extra spec but it\u0027s"},{"line_number":142,"context_line":"        # not in a namespace we care about"},{"line_number":143,"context_line":"        self.admin_api.put_extra_spec(self.flavor_id, spec_id, body)"}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_4cdfdad5","line":143,"range":{"start_line":141,"start_character":0,"end_line":143,"end_character":68},"updated":"2020-04-07 15:26:43.000000000","message":"nit - Also assert that it\u0027s present?\n\n    self.assertEqual(\n        body, self.admin_api.get_extra_spec(self.flavor_id, spec_id)\n    )","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"607214ae2261856157958fa16a4c475e089d2665","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        spec_id \u003d \u0027foo:bar\u0027"},{"line_number":139,"context_line":"        body \u003d {\u0027foo:bar\u0027: \u0027baz\u0027}"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        # this should pass because we don\u0027t recognize the extra spec but it\u0027s"},{"line_number":142,"context_line":"        # not in a namespace we care about"},{"line_number":143,"context_line":"        self.admin_api.put_extra_spec(self.flavor_id, spec_id, body)"}],"source_content_type":"text/x-python","patch_set":18,"id":"df33271e_af03e141","line":143,"range":{"start_line":141,"start_character":0,"end_line":143,"end_character":68},"in_reply_to":"df33271e_4cdfdad5","updated":"2020-04-08 09:25:15.000000000","message":"Done","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"}],"releasenotes/notes/flavor-extra-spec-validators-76d1f2e52ba753db.yaml":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d0edaea7999bfa62a8fb02f23ffca2f32a4137c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.85 microversion adds support for flavor extra spec validation when"},{"line_number":5,"context_line":"    creating or updating flavor extra specs. Use of an unrecognized or invalid"},{"line_number":6,"context_line":"    flavor extra spec will result in a HTTP 400 response.  The ``validation``"},{"line_number":7,"context_line":"    query string argument can be used to configure validation and either reject"},{"line_number":8,"context_line":"    all unknown specs and invalid values (``strict``, default), reject only"},{"line_number":9,"context_line":"    invalid values for known specs (``permissive``), or disable validation"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"df33271e_d6d4c1eb","line":6,"range":{"start_line":6,"start_character":58,"end_line":6,"end_character":59},"updated":"2020-03-31 11:17:23.000000000","message":"A redundant white space.","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25e8441312091ed1ae15af17399f18db9674421f","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.85 microversion adds support for flavor extra spec validation when"},{"line_number":5,"context_line":"    creating or updating flavor extra specs. Use of an unrecognized or invalid"},{"line_number":6,"context_line":"    flavor extra spec will result in a HTTP 400 response.  The ``validation``"},{"line_number":7,"context_line":"    query string argument can be used to configure validation and either reject"},{"line_number":8,"context_line":"    all unknown specs and invalid values (``strict``, default), reject only"},{"line_number":9,"context_line":"    invalid values for known specs (``permissive``), or disable validation"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"df33271e_e53bd234","line":6,"range":{"start_line":6,"start_character":58,"end_line":6,"end_character":59},"in_reply_to":"df33271e_d6d4c1eb","updated":"2020-04-02 08:50:38.000000000","message":"I almost said that both one and two spaces after dot is accepted in English[1]. But I see that this reno itself is not self consistent in that matter. So yeah, this nit to be fixed. \n\n[1]https://en.wikipedia.org/wiki/Sentence_spacing","commit_id":"0ebf55f3f63ef4fb38a117260492678331c153ed"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25e8441312091ed1ae15af17399f18db9674421f","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.85 microversion adds support for flavor extra spec validation when"},{"line_number":5,"context_line":"    creating or updating flavor extra specs. Use of an unrecognized or invalid"},{"line_number":6,"context_line":"    flavor extra spec will result in a HTTP 400 response.  The ``validation``"},{"line_number":7,"context_line":"    query string argument can be used to configure validation and either reject"},{"line_number":8,"context_line":"    all unknown specs and invalid values (``strict``, default), reject only"},{"line_number":9,"context_line":"    invalid values for known specs (``permissive``), or disable validation"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"df33271e_651982d5","line":6,"range":{"start_line":6,"start_character":57,"end_line":6,"end_character":59},"updated":"2020-04-02 08:50:38.000000000","message":"inconsistent whitespacing with L5 (using single space).","commit_id":"ae0dcbd8ab10ed28a31be1c40689d3f2394d965a"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"26099aecff4c198f8c21acd1888909602b03dee2","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.85 microversion adds support for flavor extra spec validation when"},{"line_number":5,"context_line":"    creating or updating flavor extra specs. Use of an unrecognized or invalid"},{"line_number":6,"context_line":"    flavor extra spec will result in a HTTP 400 response.  The ``validation``"},{"line_number":7,"context_line":"    query string argument can be used to configure validation and either reject"},{"line_number":8,"context_line":"    all unknown specs and invalid values (``strict``, default), reject only"},{"line_number":9,"context_line":"    invalid values for known specs (``permissive``), or disable validation"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"df33271e_27f743d7","line":6,"range":{"start_line":6,"start_character":57,"end_line":6,"end_character":59},"in_reply_to":"df33271e_651982d5","updated":"2020-04-05 02:16:43.000000000","message":"+1","commit_id":"ae0dcbd8ab10ed28a31be1c40689d3f2394d965a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"525a189baf5af1239fdbc13fe94f87a94a5a91be","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.86 microversion adds support for flavor extra spec validation when"},{"line_number":5,"context_line":"    creating or updating flavor extra specs. Use of an unrecognized or invalid"},{"line_number":6,"context_line":"    flavor extra spec will result in a HTTP 400 response."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"df33271e_89f37de7","line":6,"range":{"start_line":5,"start_character":44,"end_line":6,"end_character":57},"updated":"2020-04-08 07:35:10.000000000","message":"you should explain it more I think (like explaning about the namespaces).\n\nCould be a FUP tho.","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"607214ae2261856157958fa16a4c475e089d2665","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.86 microversion adds support for flavor extra spec validation when"},{"line_number":5,"context_line":"    creating or updating flavor extra specs. Use of an unrecognized or invalid"},{"line_number":6,"context_line":"    flavor extra spec will result in a HTTP 400 response."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"df33271e_0fc12de5","line":6,"range":{"start_line":5,"start_character":44,"end_line":6,"end_character":57},"in_reply_to":"df33271e_89f37de7","updated":"2020-04-08 09:25:15.000000000","message":"Done","commit_id":"c7d7ec152563be9422536f9dae538361dba3f040"}]}
