)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4c963b6c83dea292df761ee4faf624e5da9b0d03","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add new query parameter `required` to the"},{"line_number":10,"context_line":"`GET /allocation_candidates` API, which is used to filter candidates"},{"line_number":11,"context_line":"with requied traits.  The candidate attached traits return in the"},{"line_number":12,"context_line":"provider summary also. Those API changes are added by new microversion."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Also using specific exception TraitNotFound instead of the generic"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7f96bb07_deebfad9","line":11,"range":{"start_line":11,"start_character":5,"end_line":11,"end_character":12},"updated":"2018-01-19 15:02:38.000000000","message":"required","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bda3413b1025718c00ba1b67016fb26795dee538","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add new query parameter `required` to the"},{"line_number":10,"context_line":"`GET /allocation_candidates` API, which is used to filter candidates"},{"line_number":11,"context_line":"with requied traits.  The candidate attached traits return in the"},{"line_number":12,"context_line":"provider summary also. Those API changes are added by new microversion."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Also using specific exception TraitNotFound instead of the generic"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7f96bb07_b65f2771","line":11,"range":{"start_line":11,"start_character":5,"end_line":11,"end_character":12},"in_reply_to":"7f96bb07_deebfad9","updated":"2018-01-20 00:53:41.000000000","message":"Done","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"}],"nova/api/openstack/placement/handlers/allocation_candidate.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"330675627cc778a8a846d34e6f7cc9f929cd14d2","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        raise webob.exc.HTTPBadRequest("},{"line_number":245,"context_line":"            _(\u0027Invalid resource class in resources parameter: %(error)s\u0027) %"},{"line_number":246,"context_line":"            {\u0027error\u0027: exc})"},{"line_number":247,"context_line":"    except ValueError as exc:"},{"line_number":248,"context_line":"        raise webob.exc.HTTPBadRequest(six.text_type(exc))"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    response \u003d req.response"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_64033ec0","line":247,"updated":"2018-01-19 09:13:22.000000000","message":"The ValueError in the object class should probably be made into a TraitNotFound and that captured here. ValueError is too generic and we don\u0027t want to make other errors.","commit_id":"14647a4e52dc5345ffcb6fcadc1ba72baeb66398"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"128230e5eb2bd8b6c844ad03c0b2e6f00c60da09","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        raise webob.exc.HTTPBadRequest("},{"line_number":245,"context_line":"            _(\u0027Invalid resource class in resources parameter: %(error)s\u0027) %"},{"line_number":246,"context_line":"            {\u0027error\u0027: exc})"},{"line_number":247,"context_line":"    except ValueError as exc:"},{"line_number":248,"context_line":"        raise webob.exc.HTTPBadRequest(six.text_type(exc))"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    response \u003d req.response"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_e4cd0e87","line":247,"in_reply_to":"7f96bb07_64033ec0","updated":"2018-01-19 09:15:50.000000000","message":"Yea, I found more than one ValueError in \u0027get_by_requests\u0027, let me change it to the TraitNotFound","commit_id":"14647a4e52dc5345ffcb6fcadc1ba72baeb66398"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e7e47fc40d7b8d5d9074ee9624bb0ce6ec8886b2","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                }"},{"line_number":183,"context_line":"            } for ps in p_sums"},{"line_number":184,"context_line":"        }"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    return ret"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_13e614ea","line":185,"updated":"2018-01-22 10:38:05.000000000","message":"If you transform the outermost dict comprehension to a loop then you can avoid the code duplication as you can do the `if include_traits` inline:\n\n\nret \u003d {}\nfor ps in p_sums:\n    resources \u003d {\n        psr.resource_class: {\n            \u0027capacity\u0027: psr.capacity,\n            \u0027used\u0027: psr.used,\n        } for psr in ps.resources\n    }\n    ret[ps.resource_provider.uuid] \u003d {\u0027resources\u0027: resources}\n    if include_traits:\n        ret[ps.resource_provider.uuid][\u0027traits\u0027] \u003d [t.name for t in ps.traits]\n        \nreturn ret","commit_id":"6e1c014bd62c8b75ac9b305c24032a2555bfc564"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f984fbec2aa47beb937b1d6230c4de314a553fdd","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                }"},{"line_number":183,"context_line":"            } for ps in p_sums"},{"line_number":184,"context_line":"        }"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    return ret"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_c4ca204e","line":185,"in_reply_to":"7f96bb07_13e614ea","updated":"2018-01-22 11:13:03.000000000","message":"@Balazs, yes, that is better, thanks","commit_id":"6e1c014bd62c8b75ac9b305c24032a2555bfc564"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"95636e4caab58664b7e9055f752decf3ab765d7a","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    include_traits \u003d want_version.matches((1, 17))"},{"line_number":198,"context_line":"    p_sums \u003d _transform_provider_summaries(alloc_cands.provider_summaries,"},{"line_number":199,"context_line":"                                           include_traits)"},{"line_number":200,"context_line":"    return {"},{"line_number":201,"context_line":"        \u0027allocation_requests\u0027: a_reqs,"},{"line_number":202,"context_line":"        \u0027provider_summaries\u0027: p_sums,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_0a71e30c","line":199,"range":{"start_line":199,"start_character":43,"end_line":199,"end_character":57},"updated":"2018-01-22 20:10:13.000000000","message":"kwargs should be named.","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e4f10b0082e38e774e0fba8d8352f6da447e65a1","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    include_traits \u003d want_version.matches((1, 17))"},{"line_number":198,"context_line":"    p_sums \u003d _transform_provider_summaries(alloc_cands.provider_summaries,"},{"line_number":199,"context_line":"                                           include_traits)"},{"line_number":200,"context_line":"    return {"},{"line_number":201,"context_line":"        \u0027allocation_requests\u0027: a_reqs,"},{"line_number":202,"context_line":"        \u0027provider_summaries\u0027: p_sums,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_cb2d2ca9","line":199,"range":{"start_line":199,"start_character":43,"end_line":199,"end_character":57},"in_reply_to":"7f96bb07_0a71e30c","updated":"2018-01-23 10:15:38.000000000","message":"That\u0027s not a PEP.","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f338c1022b7aa449097cb036602f45a995f0ab01","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    include_traits \u003d want_version.matches((1, 17))"},{"line_number":198,"context_line":"    p_sums \u003d _transform_provider_summaries(alloc_cands.provider_summaries,"},{"line_number":199,"context_line":"                                           include_traits)"},{"line_number":200,"context_line":"    return {"},{"line_number":201,"context_line":"        \u0027allocation_requests\u0027: a_reqs,"},{"line_number":202,"context_line":"        \u0027provider_summaries\u0027: p_sums,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_fd59c7fd","line":199,"range":{"start_line":199,"start_character":43,"end_line":199,"end_character":57},"in_reply_to":"7f96bb07_cb2d2ca9","updated":"2018-01-23 13:59:42.000000000","message":"Nope, just a good idea, for more than one reason.","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"da99e49ec877cb3bfe093acf1a10379b6216eb86","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    include_traits \u003d want_version.matches((1, 17))"},{"line_number":198,"context_line":"    p_sums \u003d _transform_provider_summaries(alloc_cands.provider_summaries,"},{"line_number":199,"context_line":"                                           include_traits)"},{"line_number":200,"context_line":"    return {"},{"line_number":201,"context_line":"        \u0027allocation_requests\u0027: a_reqs,"},{"line_number":202,"context_line":"        \u0027provider_summaries\u0027: p_sums,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_8963a1dc","line":199,"range":{"start_line":199,"start_character":43,"end_line":199,"end_character":57},"in_reply_to":"7f96bb07_fd59c7fd","updated":"2018-01-23 15:54:26.000000000","message":"Agree, as a future addition of an arg will break this. Always name kwargs.","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"95636e4caab58664b7e9055f752decf3ab765d7a","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            _(\u0027Invalid resource class in resources parameter: %(error)s\u0027) %"},{"line_number":238,"context_line":"            {\u0027error\u0027: exc})"},{"line_number":239,"context_line":"    except exception.TraitNotFound as exc:"},{"line_number":240,"context_line":"        raise webob.exc.HTTPBadRequest(six.text_type(exc))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    response \u003d req.response"},{"line_number":243,"context_line":"    trx_cands \u003d _transform_allocation_candidates(cands, want_version)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_4a504b5f","line":240,"range":{"start_line":240,"start_character":39,"end_line":240,"end_character":57},"updated":"2018-01-22 20:10:13.000000000","message":"Why is this necessary here but not above?","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"da99e49ec877cb3bfe093acf1a10379b6216eb86","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            _(\u0027Invalid resource class in resources parameter: %(error)s\u0027) %"},{"line_number":238,"context_line":"            {\u0027error\u0027: exc})"},{"line_number":239,"context_line":"    except exception.TraitNotFound as exc:"},{"line_number":240,"context_line":"        raise webob.exc.HTTPBadRequest(six.text_type(exc))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    response \u003d req.response"},{"line_number":243,"context_line":"    trx_cands \u003d _transform_allocation_candidates(cands, want_version)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_89e64144","line":240,"range":{"start_line":240,"start_character":39,"end_line":240,"end_character":57},"in_reply_to":"7f96bb07_4a504b5f","updated":"2018-01-23 15:54:26.000000000","message":"Because the string formatting handles the cast from an exception object to a string?","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"}],"nova/api/openstack/placement/rest_api_version_history.rst":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"74c207e6e9c51913211817354071968600e6f36c","unresolved":false,"context_lines":[{"line_number":218,"context_line":"1.17 Add \u0027required\u0027 parameter to the allocation candidates"},{"line_number":219,"context_line":"----------------------------------------------------------"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"The `required` parameter to the `GET /allocation_candidates` API. It accepts"},{"line_number":222,"context_line":"a list of traits separated by `,`. The provider summary in the response will"},{"line_number":223,"context_line":"include the attached traits also."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f96bb07_dfad0d32","line":221,"range":{"start_line":221,"start_character":0,"end_line":221,"end_character":65},"updated":"2018-01-22 12:14:42.000000000","message":"is added to?","commit_id":"6e1c014bd62c8b75ac9b305c24032a2555bfc564"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"417b00be49f5753316ed8576ca92b770dd46f431","unresolved":false,"context_lines":[{"line_number":218,"context_line":"1.17 Add \u0027required\u0027 parameter to the allocation candidates"},{"line_number":219,"context_line":"----------------------------------------------------------"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"The `required` parameter to the `GET /allocation_candidates` API. It accepts"},{"line_number":222,"context_line":"a list of traits separated by `,`. The provider summary in the response will"},{"line_number":223,"context_line":"include the attached traits also."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f96bb07_65678627","line":221,"range":{"start_line":221,"start_character":0,"end_line":221,"end_character":65},"in_reply_to":"7f96bb07_dfad0d32","updated":"2018-01-22 13:23:06.000000000","message":"yea, I missed few words, thanks","commit_id":"6e1c014bd62c8b75ac9b305c24032a2555bfc564"}],"nova/api/openstack/placement/schemas/allocation_candidate.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4ce71d774c5df40d565f1c3bd53962099893f0e9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# Add required parameter."},{"line_number":45,"context_line":"GET_SCHEMA_1_17 \u003d copy.deepcopy(GET_SCHEMA_1_16)"},{"line_number":46,"context_line":"GET_SCHEMA_1_17[\u0027properties\u0027][\u0027required\u0027] \u003d {"},{"line_number":47,"context_line":"    \"type\": [\"string\"]"},{"line_number":48,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_b88b5b66","line":48,"range":{"start_line":45,"start_character":0,"end_line":48,"end_character":1},"updated":"2018-01-23 07:19:43.000000000","message":"add length limit? since you mentioned that empty value is not acceptable in spec.","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b0af38989bf62afbe166ca0c906004e5d9cd80bc","unresolved":false,"context_lines":[{"line_number":42,"context_line":"}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# Add required parameter."},{"line_number":45,"context_line":"GET_SCHEMA_1_17 \u003d copy.deepcopy(GET_SCHEMA_1_16)"},{"line_number":46,"context_line":"GET_SCHEMA_1_17[\u0027properties\u0027][\u0027required\u0027] \u003d {"},{"line_number":47,"context_line":"    \"type\": [\"string\"]"},{"line_number":48,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_b597cb90","line":48,"range":{"start_line":45,"start_character":0,"end_line":48,"end_character":1},"in_reply_to":"7f96bb07_b88b5b66","updated":"2018-01-23 19:35:57.000000000","message":"Yeah I was looking for this as well. I guess it\u0027s handled directly in code and there is a functional test for it.","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4b7e2333afcff1913eb0b628a64e644b1f4fd5f3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# Add required parameter."},{"line_number":45,"context_line":"GET_SCHEMA_1_17 \u003d copy.deepcopy(GET_SCHEMA_1_16)"},{"line_number":46,"context_line":"GET_SCHEMA_1_17[\u0027properties\u0027][\u0027required\u0027] \u003d {"},{"line_number":47,"context_line":"    \"type\": [\"string\"]"},{"line_number":48,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_8b7884f8","line":48,"range":{"start_line":45,"start_character":0,"end_line":48,"end_character":1},"in_reply_to":"7f96bb07_b88b5b66","updated":"2018-01-25 07:11:09.000000000","message":"it\u0027s already checked by the code.","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"}],"nova/api/openstack/placement/util.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"95636e4caab58664b7e9055f752decf3ab765d7a","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    \"\"\""},{"line_number":307,"context_line":"    ret \u003d set(substr.strip() for substr in val.split(\u0027,\u0027))"},{"line_number":308,"context_line":"    if not all(trait for trait in ret):"},{"line_number":309,"context_line":"        msg \u003d _(\u0027Invalid query string parameters: Expected \\\u0027required\\\u0027 \u0027"},{"line_number":310,"context_line":"                \u0027parameter value of the form: HW_CPU_X86_VMX,CUSTOM_MAGIC. \u0027"},{"line_number":311,"context_line":"                \u0027Got: \"%s\"\u0027) % val"},{"line_number":312,"context_line":"        raise webob.exc.HTTPBadRequest(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_0adfa3d6","line":309,"range":{"start_line":309,"start_character":61,"end_line":309,"end_character":69},"updated":"2018-01-22 20:10:13.000000000","message":"Okay, but we\u0027ll have to remember to change this back when it can be requiredN","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"da99e49ec877cb3bfe093acf1a10379b6216eb86","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    \"\"\""},{"line_number":307,"context_line":"    ret \u003d set(substr.strip() for substr in val.split(\u0027,\u0027))"},{"line_number":308,"context_line":"    if not all(trait for trait in ret):"},{"line_number":309,"context_line":"        msg \u003d _(\u0027Invalid query string parameters: Expected \\\u0027required\\\u0027 \u0027"},{"line_number":310,"context_line":"                \u0027parameter value of the form: HW_CPU_X86_VMX,CUSTOM_MAGIC. \u0027"},{"line_number":311,"context_line":"                \u0027Got: \"%s\"\u0027) % val"},{"line_number":312,"context_line":"        raise webob.exc.HTTPBadRequest(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_896de199","line":309,"range":{"start_line":309,"start_character":61,"end_line":309,"end_character":69},"in_reply_to":"7f96bb07_0adfa3d6","updated":"2018-01-23 15:54:26.000000000","message":"Nit: there is no need to escape quotes. If you need single quotes within a string, use double quotes for the outer string. Also, the end of the string uses double quotes for the \"Got\" value, so it would be more consistent to just use double quotes around the \"Expected\" value.","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"}],"nova/exception.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"95636e4caab58664b7e9055f752decf3ab765d7a","unresolved":false,"context_lines":[{"line_number":2216,"context_line":""},{"line_number":2217,"context_line":""},{"line_number":2218,"context_line":"class TraitNotFound(NotFound):"},{"line_number":2219,"context_line":"    msg_fmt \u003d _(\"No such trait(s): %(name)s.\")"},{"line_number":2220,"context_line":""},{"line_number":2221,"context_line":""},{"line_number":2222,"context_line":"class TraitExists(NovaException):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_ca977beb","line":2219,"range":{"start_line":2219,"start_character":30,"end_line":2219,"end_character":43},"updated":"2018-01-22 20:10:13.000000000","message":"If you\u0027re gonna add (s), you might as well make it %(names)s","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e4f10b0082e38e774e0fba8d8352f6da447e65a1","unresolved":false,"context_lines":[{"line_number":2216,"context_line":""},{"line_number":2217,"context_line":""},{"line_number":2218,"context_line":"class TraitNotFound(NotFound):"},{"line_number":2219,"context_line":"    msg_fmt \u003d _(\"No such trait(s): %(name)s.\")"},{"line_number":2220,"context_line":""},{"line_number":2221,"context_line":""},{"line_number":2222,"context_line":"class TraitExists(NovaException):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_6ee986b5","line":2219,"range":{"start_line":2219,"start_character":30,"end_line":2219,"end_character":43},"in_reply_to":"7f96bb07_ca977beb","updated":"2018-01-23 10:15:38.000000000","message":"nit :p","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"}],"nova/tests/functional/api/openstack/placement/gabbits/allocation-candidates.yaml":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4c963b6c83dea292df761ee4faf624e5da9b0d03","unresolved":false,"context_lines":[{"line_number":190,"context_line":"       $.provider_summaries[\"$ENVIRON[\u0027CN2_UUID\u0027]\"].`len`: 1"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"- name: get allocation candidates with invalid trait"},{"line_number":193,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003dINVALID_TRAITS"},{"line_number":194,"context_line":"  status: 400"},{"line_number":195,"context_line":"  request_headers:"},{"line_number":196,"context_line":"      openstack-api-version: placement 1.17"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_9ebb32c3","line":193,"range":{"start_line":193,"start_character":96,"end_line":193,"end_character":97},"updated":"2018-01-19 15:02:38.000000000","message":"I\u0027d remove the \"S\" on the end of this. It\u0027s a single trait after all, even if it is invalid :)","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bda3413b1025718c00ba1b67016fb26795dee538","unresolved":false,"context_lines":[{"line_number":190,"context_line":"       $.provider_summaries[\"$ENVIRON[\u0027CN2_UUID\u0027]\"].`len`: 1"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"- name: get allocation candidates with invalid trait"},{"line_number":193,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003dINVALID_TRAITS"},{"line_number":194,"context_line":"  status: 400"},{"line_number":195,"context_line":"  request_headers:"},{"line_number":196,"context_line":"      openstack-api-version: placement 1.17"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_76519f62","line":193,"range":{"start_line":193,"start_character":96,"end_line":193,"end_character":97},"in_reply_to":"7f96bb07_9ebb32c3","updated":"2018-01-20 00:53:41.000000000","message":"yea, will do","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4c963b6c83dea292df761ee4faf624e5da9b0d03","unresolved":false,"context_lines":[{"line_number":203,"context_line":"  request_headers:"},{"line_number":204,"context_line":"      openstack-api-version: placement 1.17"},{"line_number":205,"context_line":"  response_strings:"},{"line_number":206,"context_line":"      - Malformed traits parameter."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"- name: get allocation candidates with invalid required value"},{"line_number":209,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003d,,"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_7e2986f0","line":206,"range":{"start_line":206,"start_character":18,"end_line":206,"end_character":24},"updated":"2018-01-19 15:02:38.000000000","message":"there is no \"traits\" parameter. I think this should follow the pattern of other query string parameter validation tests in this file and do something like this:\n\n      - Invalid query string parameters\n      - \"Failed validating \u0027required\u0027\"","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bda3413b1025718c00ba1b67016fb26795dee538","unresolved":false,"context_lines":[{"line_number":203,"context_line":"  request_headers:"},{"line_number":204,"context_line":"      openstack-api-version: placement 1.17"},{"line_number":205,"context_line":"  response_strings:"},{"line_number":206,"context_line":"      - Malformed traits parameter."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"- name: get allocation candidates with invalid required value"},{"line_number":209,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003d,,"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_364b17b1","line":206,"range":{"start_line":206,"start_character":18,"end_line":206,"end_character":24},"in_reply_to":"7f96bb07_7e2986f0","updated":"2018-01-20 00:53:41.000000000","message":"ok","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4c963b6c83dea292df761ee4faf624e5da9b0d03","unresolved":false,"context_lines":[{"line_number":211,"context_line":"  request_headers:"},{"line_number":212,"context_line":"      openstack-api-version: placement 1.17"},{"line_number":213,"context_line":"  response_strings:"},{"line_number":214,"context_line":"      - Malformed traits parameter."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"- name: get allocation candidates with required trait"},{"line_number":217,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003dHW_CPU_X86_SSE"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_3e33fe64","line":214,"updated":"2018-01-19 15:02:38.000000000","message":"ditto","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bda3413b1025718c00ba1b67016fb26795dee538","unresolved":false,"context_lines":[{"line_number":211,"context_line":"  request_headers:"},{"line_number":212,"context_line":"      openstack-api-version: placement 1.17"},{"line_number":213,"context_line":"  response_strings:"},{"line_number":214,"context_line":"      - Malformed traits parameter."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"- name: get allocation candidates with required trait"},{"line_number":217,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003dHW_CPU_X86_SSE"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_d6c5130c","line":214,"in_reply_to":"7f96bb07_3e33fe64","updated":"2018-01-20 00:53:41.000000000","message":"Done","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4c963b6c83dea292df761ee4faf624e5da9b0d03","unresolved":false,"context_lines":[{"line_number":222,"context_line":"      $.allocation_requests.`len`: 1"},{"line_number":223,"context_line":"      $.provider_summaries.`len`: 2"},{"line_number":224,"context_line":"      $.provider_summaries[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].`len`: 2"},{"line_number":225,"context_line":"  response_strings:"},{"line_number":226,"context_line":"      - HW_CPU_X86_SSE"},{"line_number":227,"context_line":"      - HW_CPU_X86_SSE2"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"- name: get allocation candidates with multiple required traits"},{"line_number":230,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003dHW_CPU_X86_SSE,HW_CPU_X86_SSE2"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_7e77460a","line":227,"range":{"start_line":225,"start_character":0,"end_line":227,"end_character":23},"updated":"2018-01-19 15:02:38.000000000","message":"This should be validating that the trait strings are in the provider_summaries[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].traits array.","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"32ef42c581d60a17f851b1f6b2656636b26c58cb","unresolved":false,"context_lines":[{"line_number":222,"context_line":"      $.allocation_requests.`len`: 1"},{"line_number":223,"context_line":"      $.provider_summaries.`len`: 2"},{"line_number":224,"context_line":"      $.provider_summaries[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].`len`: 2"},{"line_number":225,"context_line":"  response_strings:"},{"line_number":226,"context_line":"      - HW_CPU_X86_SSE"},{"line_number":227,"context_line":"      - HW_CPU_X86_SSE2"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"- name: get allocation candidates with multiple required traits"},{"line_number":230,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003dHW_CPU_X86_SSE,HW_CPU_X86_SSE2"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_85fc123f","line":227,"range":{"start_line":225,"start_character":0,"end_line":227,"end_character":23},"in_reply_to":"7f96bb07_363b0c9d","updated":"2018-01-22 13:20:51.000000000","message":"Thanks, Chris, let me try","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bda3413b1025718c00ba1b67016fb26795dee538","unresolved":false,"context_lines":[{"line_number":222,"context_line":"      $.allocation_requests.`len`: 1"},{"line_number":223,"context_line":"      $.provider_summaries.`len`: 2"},{"line_number":224,"context_line":"      $.provider_summaries[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].`len`: 2"},{"line_number":225,"context_line":"  response_strings:"},{"line_number":226,"context_line":"      - HW_CPU_X86_SSE"},{"line_number":227,"context_line":"      - HW_CPU_X86_SSE2"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"- name: get allocation candidates with multiple required traits"},{"line_number":230,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003dHW_CPU_X86_SSE,HW_CPU_X86_SSE2"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_96cf8b28","line":227,"range":{"start_line":225,"start_character":0,"end_line":227,"end_character":23},"in_reply_to":"7f96bb07_7e77460a","updated":"2018-01-20 00:53:41.000000000","message":"There are list order problem, do we have way to validate unorder list? or I should check with Chris","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b65279ef10707f252886d55d0ec1d5fa9e2f470b","unresolved":false,"context_lines":[{"line_number":222,"context_line":"      $.allocation_requests.`len`: 1"},{"line_number":223,"context_line":"      $.provider_summaries.`len`: 2"},{"line_number":224,"context_line":"      $.provider_summaries[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].`len`: 2"},{"line_number":225,"context_line":"  response_strings:"},{"line_number":226,"context_line":"      - HW_CPU_X86_SSE"},{"line_number":227,"context_line":"      - HW_CPU_X86_SSE2"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"- name: get allocation candidates with multiple required traits"},{"line_number":230,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003dHW_CPU_X86_SSE,HW_CPU_X86_SSE2"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_363b0c9d","line":227,"range":{"start_line":225,"start_character":0,"end_line":227,"end_character":23},"in_reply_to":"7f96bb07_96cf8b28","updated":"2018-01-21 13:45:15.000000000","message":"There are a few ways to sort in gabbi with jsonpath: https://gabbi.readthedocs.io/en/latest/jsonpath.html\n\nIn this case you might try (untested):\n\n    $.provider_summaries[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].`sorted`:\n        - HW_CPU_X86_SSE\n        - HW_CPU_X86_SSE2","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4c963b6c83dea292df761ee4faf624e5da9b0d03","unresolved":false,"context_lines":[{"line_number":235,"context_line":"      $.allocation_requests.`len`: 1"},{"line_number":236,"context_line":"      $.provider_summaries.`len`: 2"},{"line_number":237,"context_line":"      $.provider_summaries[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].`len`: 2"},{"line_number":238,"context_line":"  response_strings:"},{"line_number":239,"context_line":"      - HW_CPU_X86_SSE"},{"line_number":240,"context_line":"      - HW_CPU_X86_SSE2"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"- name: get allocation candidates with required trait and no matching"},{"line_number":243,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003dHW_CPU_X86_SSE3"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_9e7c92ec","line":240,"range":{"start_line":238,"start_character":0,"end_line":240,"end_character":23},"updated":"2018-01-19 15:02:38.000000000","message":"same as above","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bda3413b1025718c00ba1b67016fb26795dee538","unresolved":false,"context_lines":[{"line_number":235,"context_line":"      $.allocation_requests.`len`: 1"},{"line_number":236,"context_line":"      $.provider_summaries.`len`: 2"},{"line_number":237,"context_line":"      $.provider_summaries[\"$ENVIRON[\u0027CN1_UUID\u0027]\"].`len`: 2"},{"line_number":238,"context_line":"  response_strings:"},{"line_number":239,"context_line":"      - HW_CPU_X86_SSE"},{"line_number":240,"context_line":"      - HW_CPU_X86_SSE2"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"- name: get allocation candidates with required trait and no matching"},{"line_number":243,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003dHW_CPU_X86_SSE3"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_b6d407bf","line":240,"range":{"start_line":238,"start_character":0,"end_line":240,"end_character":23},"in_reply_to":"7f96bb07_9e7c92ec","updated":"2018-01-20 00:53:41.000000000","message":"Done","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f4af2cf9e6c8b8ddb49c0d0c8b6ad519d692c621","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7f96bb07_1026ffb8","updated":"2018-01-22 15:10:54.000000000","message":"nice tests","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"95636e4caab58664b7e9055f752decf3ab765d7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7f96bb07_4aaccb34","in_reply_to":"7f96bb07_1026ffb8","updated":"2018-01-22 20:10:13.000000000","message":"++","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"70868a016abc9a7e330c2c1d750c6606974eb4d9","unresolved":false,"context_lines":[{"line_number":197,"context_line":"  response_strings:"},{"line_number":198,"context_line":"      - No such trait(s)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"- name: get allocation candidates with empty required value"},{"line_number":201,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003d"},{"line_number":202,"context_line":"  status: 400"},{"line_number":203,"context_line":"  request_headers:"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f93b717_5443b613","line":200,"updated":"2018-01-31 01:57:48.000000000","message":"This test is intermittently failing:\n\nhttp://logs.openstack.org/10/539310/1/check/nova-tox-functional/a6ba562/job-output.txt.gz#_2018-01-30_21_02_40_414709","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a491adf0617089a8cd8690a1ecbad90a8e4ef0eb","unresolved":false,"context_lines":[{"line_number":197,"context_line":"  response_strings:"},{"line_number":198,"context_line":"      - No such trait(s)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"- name: get allocation candidates with empty required value"},{"line_number":201,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003d"},{"line_number":202,"context_line":"  status: 400"},{"line_number":203,"context_line":"  request_headers:"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f93b717_7406f2d0","line":200,"in_reply_to":"5f93b717_5443b613","updated":"2018-01-31 02:00:34.000000000","message":"https://bugs.launchpad.net/nova/+bug/1746388","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b0af38989bf62afbe166ca0c906004e5d9cd80bc","unresolved":false,"context_lines":[{"line_number":198,"context_line":"      - No such trait(s)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"- name: get allocation candidates with empty required value"},{"line_number":201,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003d"},{"line_number":202,"context_line":"  status: 400"},{"line_number":203,"context_line":"  request_headers:"},{"line_number":204,"context_line":"      openstack-api-version: placement 1.17"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7f96bb07_55d52742","line":201,"updated":"2018-01-23 19:35:57.000000000","message":"OK I guess this is being handled outside of the schema.","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"70868a016abc9a7e330c2c1d750c6606974eb4d9","unresolved":false,"context_lines":[{"line_number":205,"context_line":"  response_strings:"},{"line_number":206,"context_line":"      - \"Invalid query string parameters: Expected \u0027required\u0027 parameter value of the form: HW_CPU_X86_VMX,CUSTOM_MAGIC.\""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"- name: get allocation candidates with invalid required value"},{"line_number":209,"context_line":"  GET: /allocation_candidates?resources\u003dVCPU:1,MEMORY_MB:1024,DISK_GB:100\u0026required\u003d,,"},{"line_number":210,"context_line":"  status: 400"},{"line_number":211,"context_line":"  request_headers:"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f93b717_f44be227","line":208,"updated":"2018-01-31 01:57:48.000000000","message":"And this one:\n\nhttp://logs.openstack.org/10/539310/1/check/nova-tox-functional/a6ba562/job-output.txt.gz#_2018-01-30_21_02_40_416450","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"}],"placement-api-ref/source/parameters.yaml":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4c963b6c83dea292df761ee4faf624e5da9b0d03","unresolved":false,"context_lines":[{"line_number":56,"context_line":"  required: false"},{"line_number":57,"context_line":"  min_version: 1.17"},{"line_number":58,"context_line":"  description: \u003e"},{"line_number":59,"context_line":"    Accepts a list of traits separated by `,`. Used to return the allocation"},{"line_number":60,"context_line":"    candidates with required traits."},{"line_number":61,"context_line":"member_of:"},{"line_number":62,"context_line":"  type: string"},{"line_number":63,"context_line":"  in: query"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_9eca5218","line":60,"range":{"start_line":59,"start_character":46,"end_line":60,"end_character":36},"updated":"2018-01-19 15:02:38.000000000","message":"I think a more useful description would be this:\n\nAllocation requests in the response will be for resource providers that have capacity for all requested resources and the set of those resource providers will *collectively* contain all of the required traits.","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bda3413b1025718c00ba1b67016fb26795dee538","unresolved":false,"context_lines":[{"line_number":56,"context_line":"  required: false"},{"line_number":57,"context_line":"  min_version: 1.17"},{"line_number":58,"context_line":"  description: \u003e"},{"line_number":59,"context_line":"    Accepts a list of traits separated by `,`. Used to return the allocation"},{"line_number":60,"context_line":"    candidates with required traits."},{"line_number":61,"context_line":"member_of:"},{"line_number":62,"context_line":"  type: string"},{"line_number":63,"context_line":"  in: query"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_56d903f2","line":60,"range":{"start_line":59,"start_character":46,"end_line":60,"end_character":36},"in_reply_to":"7f96bb07_9eca5218","updated":"2018-01-20 00:53:41.000000000","message":"Done","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4c963b6c83dea292df761ee4faf624e5da9b0d03","unresolved":false,"context_lines":[{"line_number":249,"context_line":"  required: true"},{"line_number":250,"context_line":"  description: \u003e"},{"line_number":251,"context_line":"    A dictionary keyed by resource provider UUID,"},{"line_number":252,"context_line":"    of dictionaries of inventory/capacity information."},{"line_number":253,"context_line":"reserved: \u0026reserved"},{"line_number":254,"context_line":"  type: integer"},{"line_number":255,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_7eee668c","line":252,"updated":"2018-01-19 15:02:38.000000000","message":"We should mention that the provider_summaries will now include the list of traits the resource provider has associated with it.","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bda3413b1025718c00ba1b67016fb26795dee538","unresolved":false,"context_lines":[{"line_number":249,"context_line":"  required: true"},{"line_number":250,"context_line":"  description: \u003e"},{"line_number":251,"context_line":"    A dictionary keyed by resource provider UUID,"},{"line_number":252,"context_line":"    of dictionaries of inventory/capacity information."},{"line_number":253,"context_line":"reserved: \u0026reserved"},{"line_number":254,"context_line":"  type: integer"},{"line_number":255,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_76d67fc6","line":252,"in_reply_to":"7f96bb07_7eee668c","updated":"2018-01-20 00:53:41.000000000","message":"yes, sorry, I missed that.","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"28d9159e2b6d1ab7435a6c13cb8522de42fd65b1","unresolved":false,"context_lines":[{"line_number":251,"context_line":"  required: true"},{"line_number":252,"context_line":"  description: \u003e"},{"line_number":253,"context_line":"    A dictionary keyed by resource provider UUID,"},{"line_number":254,"context_line":"    of dictionaries of inventory/capacity information. The list of traits"},{"line_number":255,"context_line":"    the resource provider has associated with it is included in version `1.17`."},{"line_number":256,"context_line":"reserved: \u0026reserved"},{"line_number":257,"context_line":"  type: integer"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f93b717_f048d887","line":254,"updated":"2018-01-30 18:38:08.000000000","message":"If we\u0027re describing keys within the provider_summaries dict (and it\u0027s sub-elements) then it seems like we\u0027d mention the \"traits\" key within the resource provider summary dict.","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c224f678a4c51f2f42bf4974c79d14202c835f58","unresolved":false,"context_lines":[{"line_number":251,"context_line":"  required: true"},{"line_number":252,"context_line":"  description: \u003e"},{"line_number":253,"context_line":"    A dictionary keyed by resource provider UUID,"},{"line_number":254,"context_line":"    of dictionaries of inventory/capacity information. The list of traits"},{"line_number":255,"context_line":"    the resource provider has associated with it is included in version `1.17`."},{"line_number":256,"context_line":"reserved: \u0026reserved"},{"line_number":257,"context_line":"  type: integer"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f93b717_942a8829","line":254,"in_reply_to":"5f93b717_f048d887","updated":"2018-01-31 16:56:40.000000000","message":"Sorry, where?","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"95636e4caab58664b7e9055f752decf3ab765d7a","unresolved":false,"context_lines":[{"line_number":252,"context_line":"  description: \u003e"},{"line_number":253,"context_line":"    A dictionary keyed by resource provider UUID,"},{"line_number":254,"context_line":"    of dictionaries of inventory/capacity information. The list of traits"},{"line_number":255,"context_line":"    the resource provider has associated with it is included in version `1.17`."},{"line_number":256,"context_line":"reserved: \u0026reserved"},{"line_number":257,"context_line":"  type: integer"},{"line_number":258,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7f96bb07_aa4b0f85","line":255,"updated":"2018-01-22 20:10:13.000000000","message":"and above","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"}],"releasenotes/notes/allocation-candidates-traits-1adf079ed0c6563c.yaml":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4c963b6c83dea292df761ee4faf624e5da9b0d03","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add ``required`` query parameter to the ``GET /allocation_candidates`` API"},{"line_number":5,"context_line":"    in new placement microversion 1.17. The parameter accepts a list of traits"},{"line_number":6,"context_line":"    separated by ``,``, which is used to return a list of allocation candidates"},{"line_number":7,"context_line":"    with required traits. In the same microversion, the candidate attacheded"},{"line_number":8,"context_line":"    traits returned in the provider summary."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_7e93c601","line":7,"range":{"start_line":6,"start_character":41,"end_line":7,"end_character":24},"updated":"2018-01-19 15:02:38.000000000","message":"change this to:\n\n\"further limit the list of allocation requests to resource providers that have the capacity to fulfill the requested resources AND *collectively* have all of the required traits associated with them.\"","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bda3413b1025718c00ba1b67016fb26795dee538","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add ``required`` query parameter to the ``GET /allocation_candidates`` API"},{"line_number":5,"context_line":"    in new placement microversion 1.17. The parameter accepts a list of traits"},{"line_number":6,"context_line":"    separated by ``,``, which is used to return a list of allocation candidates"},{"line_number":7,"context_line":"    with required traits. In the same microversion, the candidate attacheded"},{"line_number":8,"context_line":"    traits returned in the provider summary."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7f96bb07_16e37ba6","line":7,"range":{"start_line":6,"start_character":41,"end_line":7,"end_character":24},"in_reply_to":"7f96bb07_7e93c601","updated":"2018-01-20 00:53:41.000000000","message":"Done","commit_id":"130b4f0d3e323c1dcf327e48f943e5fe39844410"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"74c207e6e9c51913211817354071968600e6f36c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    separated by ``,``, which is used to further limit the list of allocation"},{"line_number":7,"context_line":"    requests to resource providers that have the capacity to fulfill the"},{"line_number":8,"context_line":"    requested resources AND *collectively* have all of the required traits"},{"line_number":9,"context_line":"    associated with them. In the same microversion, the candidate attacheded"},{"line_number":10,"context_line":"    traits returned in the provider summary."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7f96bb07_0a21f19f","line":9,"range":{"start_line":9,"start_character":66,"end_line":9,"end_character":76},"updated":"2018-01-22 12:14:42.000000000","message":"typo","commit_id":"6e1c014bd62c8b75ac9b305c24032a2555bfc564"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"417b00be49f5753316ed8576ca92b770dd46f431","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    separated by ``,``, which is used to further limit the list of allocation"},{"line_number":7,"context_line":"    requests to resource providers that have the capacity to fulfill the"},{"line_number":8,"context_line":"    requested resources AND *collectively* have all of the required traits"},{"line_number":9,"context_line":"    associated with them. In the same microversion, the candidate attacheded"},{"line_number":10,"context_line":"    traits returned in the provider summary."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7f96bb07_859172f4","line":9,"range":{"start_line":9,"start_character":66,"end_line":9,"end_character":76},"in_reply_to":"7f96bb07_0a21f19f","updated":"2018-01-22 13:23:06.000000000","message":"oops, thanks","commit_id":"6e1c014bd62c8b75ac9b305c24032a2555bfc564"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f4af2cf9e6c8b8ddb49c0d0c8b6ad519d692c621","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    separated by ``,``, which is used to further limit the list of allocation"},{"line_number":7,"context_line":"    requests to resource providers that have the capacity to fulfill the"},{"line_number":8,"context_line":"    requested resources AND *collectively* have all of the required traits"},{"line_number":9,"context_line":"    associated with them. In the same microversion, the candidate attached"},{"line_number":10,"context_line":"    traits returned in the provider summary."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7f96bb07_f06ef3c7","line":10,"range":{"start_line":9,"start_character":52,"end_line":10,"end_character":44},"updated":"2018-01-22 15:10:54.000000000","message":"I\u0027m not sure what you are going for in this phrase.\n\nAt a bare minimum s/traits returned/traits are returned/ is needed","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"95636e4caab58664b7e9055f752decf3ab765d7a","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    separated by ``,``, which is used to further limit the list of allocation"},{"line_number":7,"context_line":"    requests to resource providers that have the capacity to fulfill the"},{"line_number":8,"context_line":"    requested resources AND *collectively* have all of the required traits"},{"line_number":9,"context_line":"    associated with them. In the same microversion, the candidate attached"},{"line_number":10,"context_line":"    traits returned in the provider summary."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7f96bb07_8a3df3de","line":10,"range":{"start_line":9,"start_character":52,"end_line":10,"end_character":44},"in_reply_to":"7f96bb07_f06ef3c7","updated":"2018-01-22 20:10:13.000000000","message":"Perhaps \"...the provider summary includes the traits associated with each provider.\"","commit_id":"8a307bbdf435d06f0fd0423ffb4036c2cde40193"}]}
