)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c1e081687b6ee00fb94963f7f2014b3c9d7209ff","unresolved":false,"context_lines":[{"line_number":9,"context_line":"/resource_providers/{uuid}/aggregates"},{"line_number":10,"context_line":"GET for a list of aggregate uuids associated with this resource"},{"line_number":11,"context_line":"    provider"},{"line_number":12,"context_line":"PUT to set the list of aggregate uuids associated with this this"},{"line_number":13,"context_line":"    provider"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The API requests map directly to set_ and get_ aggregates on the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"5a8bc5a2_092a832c","line":12,"updated":"2016-09-23 10:43:12.000000000","message":"nit: s/this//","commit_id":"6b8c0a87139557c15727d87bdb3ee97bad53f8b9"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c1e081687b6ee00fb94963f7f2014b3c9d7209ff","unresolved":false,"context_lines":[{"line_number":16,"context_line":"ResourceProvider object."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I514c15c7d387cf25bf7986d07baccf0e7a785f46"},{"line_number":19,"context_line":"Partially-Implements: blueprint generic resource pools"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"5a8bc5a2_a9ba6fdf","line":19,"updated":"2016-09-23 10:43:12.000000000","message":"nit: generic-resource-pools because link is broken in gerrit","commit_id":"6b8c0a87139557c15727d87bdb3ee97bad53f8b9"}],"nova/api/openstack/placement/handler.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"828a8843209b51e2db67e50711f3f6149f5ee91f","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    },"},{"line_number":82,"context_line":"    \u0027/resource_providers/{uuid}/aggregates\u0027: {"},{"line_number":83,"context_line":"        \u0027GET\u0027: aggregate.get_aggregates,"},{"line_number":84,"context_line":"        \u0027PUT\u0027: aggregate.update_aggregates"},{"line_number":85,"context_line":"    },"},{"line_number":86,"context_line":"    \u0027/resource_providers/{uuid}/allocations\u0027: {"},{"line_number":87,"context_line":"        \u0027GET\u0027: allocation.list_for_resource_provider,"}],"source_content_type":"text/x-python","patch_set":28,"id":"da6895a0_638dd27a","line":84,"updated":"2016-10-25 09:15:51.000000000","message":"Please use set_aggregates() to be consistent with previous code in the allocations and inventories handlers. The nomenclature update_XXX() was only used for updating a *single* inventory item in api/openstack/placement/handlers/inventory.py whereas this is referring to set/replace all the aggregates for a provider...","commit_id":"17bfc7f02a29063b2c93de7e5be80e8a882ca7a2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"8b09f7207903743a52538453db46f1484d04344a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    },"},{"line_number":82,"context_line":"    \u0027/resource_providers/{uuid}/aggregates\u0027: {"},{"line_number":83,"context_line":"        \u0027GET\u0027: aggregate.get_aggregates,"},{"line_number":84,"context_line":"        \u0027PUT\u0027: aggregate.update_aggregates"},{"line_number":85,"context_line":"    },"},{"line_number":86,"context_line":"    \u0027/resource_providers/{uuid}/allocations\u0027: {"},{"line_number":87,"context_line":"        \u0027GET\u0027: allocation.list_for_resource_provider,"}],"source_content_type":"text/x-python","patch_set":28,"id":"da6895a0_06f6dfd6","line":84,"in_reply_to":"da6895a0_638dd27a","updated":"2016-10-25 13:14:21.000000000","message":"ah, yeah, excellent point. good catch.","commit_id":"17bfc7f02a29063b2c93de7e5be80e8a882ca7a2"}],"nova/api/openstack/placement/handlers/aggregate.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c91b9ebbccd92443061fb0db539845dbef866ae3","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        \"format\": \"uuid\""},{"line_number":27,"context_line":"    },"},{"line_number":28,"context_line":"    \"uniqueItems\": True"},{"line_number":29,"context_line":"}"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# TODO(cdent): This duplicates code used elsewhere in the placement API"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_d27f07a9","line":29,"updated":"2016-08-23 14:07:06.000000000","message":"Hmm, I was expecting an aggregates object containing an array of uuids.\n\nSomething more like this one:\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/placement/handlers/inventory.py#L64\n\nBut chatting on IRC, I quite like keeping the PUT API restricted to updating just the uuid list, and I also like keeping the GET open to later extension.","commit_id":"1f1c99ab660384e2f603726f15a5f61ec58c48de"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"ba4884a47f2a5dc6e78c37e46817d7fe022e7673","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# TODO(cdent): This duplicates code used elsewhere in the placement API"},{"line_number":33,"context_line":"# for extracting any JSON. We can centralize them to a util.py method"},{"line_number":34,"context_line":"# in a forthcoming (soon) refactoring."},{"line_number":35,"context_line":"def _extract_aggregate_uuids(body, schema):"},{"line_number":36,"context_line":"    try:"},{"line_number":37,"context_line":"        data \u003d jsonutils.loads(body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_e781c3c4","line":34,"updated":"2016-08-23 06:04:39.000000000","message":"+1 :)","commit_id":"1f1c99ab660384e2f603726f15a5f61ec58c48de"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c91b9ebbccd92443061fb0db539845dbef866ae3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    context \u003d req.environ[\u0027placement.context\u0027]"},{"line_number":75,"context_line":"    uuid \u003d util.wsgi_path_item(req.environ, \u0027uuid\u0027)"},{"line_number":76,"context_line":"    resource_provider \u003d objects.ResourceProvider.get_by_uuid("},{"line_number":77,"context_line":"        context, uuid)"},{"line_number":78,"context_line":"    aggregate_uuids \u003d resource_provider.get_aggregates()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    return _send_aggregates(req.response, aggregate_uuids)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_1597c9ec","line":77,"updated":"2016-08-23 14:07:06.000000000","message":"Just reading to make sure we get a 404 error here.","commit_id":"1f1c99ab660384e2f603726f15a5f61ec58c48de"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b0a6047c1c90324b90a2c247f9df1475140b9d43","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    context \u003d req.environ[\u0027placement.context\u0027]"},{"line_number":75,"context_line":"    uuid \u003d util.wsgi_path_item(req.environ, \u0027uuid\u0027)"},{"line_number":76,"context_line":"    resource_provider \u003d objects.ResourceProvider.get_by_uuid("},{"line_number":77,"context_line":"        context, uuid)"},{"line_number":78,"context_line":"    aggregate_uuids \u003d resource_provider.get_aggregates()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    return _send_aggregates(req.response, aggregate_uuids)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_d5a89122","line":77,"in_reply_to":"1ac06dbe_1597c9ec","updated":"2016-08-23 14:08:14.000000000","message":"PS, I see the test, I am just curious.","commit_id":"1f1c99ab660384e2f603726f15a5f61ec58c48de"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"295d7eceec66eb406cd1751675a3fb3bffc48ce2","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        context, uuid)"},{"line_number":90,"context_line":"    aggregate_uuids \u003d _extract_aggregate_uuids(req.body,"},{"line_number":91,"context_line":"                                               PUT_AGGREGATES_SCHEMA)"},{"line_number":92,"context_line":"    resource_provider.set_aggregates(aggregate_uuids)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    return _send_aggregates(req.response, aggregate_uuids)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_8b4d5a40","line":92,"updated":"2016-08-23 14:27:29.000000000","message":"Now I am wondering about 404 for unknown aggregate_uuids, but looking at the dependent patch, thats kinda interesting.","commit_id":"1f1c99ab660384e2f603726f15a5f61ec58c48de"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"4e8823f35190ae5990fabe248228ec1e5e84d8fd","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        context, uuid)"},{"line_number":90,"context_line":"    aggregate_uuids \u003d _extract_aggregate_uuids(req.body,"},{"line_number":91,"context_line":"                                               PUT_AGGREGATES_SCHEMA)"},{"line_number":92,"context_line":"    resource_provider.set_aggregates(aggregate_uuids)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    return _send_aggregates(req.response, aggregate_uuids)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_ba469078","line":92,"in_reply_to":"1ac06dbe_8b4d5a40","updated":"2016-08-23 16:51:37.000000000","message":"As you saw, the resource provider object code may struggle to know if an aggregate uuid represents an existing aggregate. We can check (in the jsonschema) that it is a well formed uuid.\n\nIn any case, even if we could know if the aggregate uuid was a \"real\" one, we\u0027d want to 400 here, not 404. 404 is only for the uri.","commit_id":"1f1c99ab660384e2f603726f15a5f61ec58c48de"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a22efb6555e0ca3317e04e92f8b5498f96c93b19","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        context, uuid)"},{"line_number":90,"context_line":"    aggregate_uuids \u003d _extract_aggregate_uuids(req.body,"},{"line_number":91,"context_line":"                                               PUT_AGGREGATES_SCHEMA)"},{"line_number":92,"context_line":"    resource_provider.set_aggregates(aggregate_uuids)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    return _send_aggregates(req.response, aggregate_uuids)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_57440ab6","line":92,"in_reply_to":"1ac06dbe_ba469078","updated":"2016-08-25 13:01:41.000000000","message":"Yeah, its a 400 if we did it, my bad.\n\nI am thinking we could cross check the Nova DB for now, because long term we would know if its a correct uuid.\n\nI don\u0027t like the idea of auto create here, if thats not the long term goal.","commit_id":"1f1c99ab660384e2f603726f15a5f61ec58c48de"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3625c5480b10139011ddc42a490b10390e0f3556","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    context \u003d req.environ[\u0027placement.context\u0027]"},{"line_number":75,"context_line":"    uuid \u003d util.wsgi_path_item(req.environ, \u0027uuid\u0027)"},{"line_number":76,"context_line":"    resource_provider \u003d objects.ResourceProvider.get_by_uuid("},{"line_number":77,"context_line":"        context, uuid)"},{"line_number":78,"context_line":"    aggregate_uuids \u003d resource_provider.get_aggregates()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    return _send_aggregates(req.response, aggregate_uuids)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_442413c4","line":77,"updated":"2016-08-29 21:22:51.000000000","message":"So, here, we\u0027re returning a 404 because we\u0027re fortunate enough to have the above call raising a NotFound which self contains the error code, right?\n\nI\u0027m a bit sad, I was thinking error handling was a bit more explicit but okay.","commit_id":"64c12c75bb5c6a9779667d470dcc0485583bbe62"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3625c5480b10139011ddc42a490b10390e0f3556","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    context \u003d req.environ[\u0027placement.context\u0027]"},{"line_number":87,"context_line":"    uuid \u003d util.wsgi_path_item(req.environ, \u0027uuid\u0027)"},{"line_number":88,"context_line":"    resource_provider \u003d objects.ResourceProvider.get_by_uuid("},{"line_number":89,"context_line":"        context, uuid)"},{"line_number":90,"context_line":"    aggregate_uuids \u003d _extract_aggregate_uuids(req.body,"},{"line_number":91,"context_line":"                                               PUT_AGGREGATES_SCHEMA)"},{"line_number":92,"context_line":"    resource_provider.set_aggregates(aggregate_uuids)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_bf2c0c9a","line":89,"updated":"2016-08-29 21:22:51.000000000","message":"same comment than L77 here.","commit_id":"64c12c75bb5c6a9779667d470dcc0485583bbe62"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"2761720f89d10dc95cf93a08cd819d434357e2e5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"@webob.dec.wsgify"},{"line_number":62,"context_line":"@util.require_content(\u0027application/json\u0027)"},{"line_number":63,"context_line":"def update_aggregates(req):"},{"line_number":64,"context_line":"    context \u003d req.environ[\u0027placement.context\u0027]"},{"line_number":65,"context_line":"    uuid \u003d util.wsgi_path_item(req.environ, \u0027uuid\u0027)"},{"line_number":66,"context_line":"    resource_provider \u003d objects.ResourceProvider.get_by_uuid("},{"line_number":67,"context_line":"        context, uuid)"}],"source_content_type":"text/x-python","patch_set":27,"id":"fa6399be_369dadbc","line":64,"updated":"2016-10-13 13:39:55.000000000","message":"some docstring comments?","commit_id":"436ba64ca4826bd890b7922e762fe8b64386d237"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b3bb3add549cdbaaa4a202631a1c263bd9dd27c5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    On success return a 200 with an application/json body containing a"},{"line_number":51,"context_line":"    list of aggregate uuids."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    microversion.raise_404_if_not_version(req, (1, 1))"},{"line_number":54,"context_line":"    context \u003d req.environ[\u0027placement.context\u0027]"},{"line_number":55,"context_line":"    uuid \u003d util.wsgi_path_item(req.environ, \u0027uuid\u0027)"},{"line_number":56,"context_line":"    resource_provider \u003d objects.ResourceProvider.get_by_uuid("}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5da102_d868b7f7","line":53,"range":{"start_line":53,"start_character":4,"end_line":53,"end_character":54},"updated":"2016-11-03 21:16:50.000000000","message":"I\u0027m wondering, if it make sense for making this a decorator for a function get_aggregate (and also set_aggregate below) just like there is already one for checking payload format.","commit_id":"0fc52972628986626bfba01527e58cc9775e3ced"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"ee38a8b989f416727ebbca1b22e13eee5895f8d7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    On success return a 200 with an application/json body containing a"},{"line_number":51,"context_line":"    list of aggregate uuids."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    microversion.raise_404_if_not_version(req, (1, 1))"},{"line_number":54,"context_line":"    context \u003d req.environ[\u0027placement.context\u0027]"},{"line_number":55,"context_line":"    uuid \u003d util.wsgi_path_item(req.environ, \u0027uuid\u0027)"},{"line_number":56,"context_line":"    resource_provider \u003d objects.ResourceProvider.get_by_uuid("}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5da102_ec33f360","line":53,"in_reply_to":"ba5da102_9348e0b4","updated":"2016-11-04 08:30:57.000000000","message":"Well, that\u0027s why I started the sentence with \"I\u0027m wondering\" :) I remember, that in services there was similar logic for checking schema, which also relies on specific version. Although I agree, that creating decorator for one case is an overkill.","commit_id":"0fc52972628986626bfba01527e58cc9775e3ced"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"156aca3765fb2085fcc62a83ea92e419c18e5c6f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    On success return a 200 with an application/json body containing a"},{"line_number":51,"context_line":"    list of aggregate uuids."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    microversion.raise_404_if_not_version(req, (1, 1))"},{"line_number":54,"context_line":"    context \u003d req.environ[\u0027placement.context\u0027]"},{"line_number":55,"context_line":"    uuid \u003d util.wsgi_path_item(req.environ, \u0027uuid\u0027)"},{"line_number":56,"context_line":"    resource_provider \u003d objects.ResourceProvider.get_by_uuid("}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5da102_9348e0b4","line":53,"in_reply_to":"ba5da102_d868b7f7","updated":"2016-11-03 21:44:25.000000000","message":"We\u0027ve had some discussions about this over on a couple of other patches, the gist of which is that for this type of thing explicit is nice. See: https://review.openstack.org/#/c/388115/ and https://review.openstack.org/#/c/391959/ (in handlers/resource_class.py )\n\nBasically the decorator concept works well when there are at least two handlers on the same url, but less so when there is a new url (like here).\n\nI consider doing a decorator for this kind of thing but it just seemed overkill.","commit_id":"0fc52972628986626bfba01527e58cc9775e3ced"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5fc06111f80a801c7023e0626008033bcf266b38","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    On success return a 200 with an application/json body containing a"},{"line_number":51,"context_line":"    list of aggregate uuids."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    microversion.raise_404_if_not_version(req, (1, 1))"},{"line_number":54,"context_line":"    context \u003d req.environ[\u0027placement.context\u0027]"},{"line_number":55,"context_line":"    uuid \u003d util.wsgi_path_item(req.environ, \u0027uuid\u0027)"},{"line_number":56,"context_line":"    resource_provider \u003d objects.ResourceProvider.get_by_uuid("}],"source_content_type":"text/x-python","patch_set":36,"id":"5a74a57a_534d4071","line":53,"updated":"2016-11-23 15:57:43.000000000","message":"Nit: its tempting to have min\u003d(1,1), just so its clear","commit_id":"44ca84a7e1458a5ef494c13ed78a191340736166"}],"nova/tests/functional/api/openstack/placement/gabbits/aggregate.yaml":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3625c5480b10139011ddc42a490b10390e0f3556","unresolved":false,"context_lines":[{"line_number":88,"context_line":"      - sally"},{"line_number":89,"context_line":"  status: 400"},{"line_number":90,"context_line":"  response_strings:"},{"line_number":91,"context_line":"      - JSON does not validate"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"fa7ab95a_dfa2b0fb","line":91,"updated":"2016-08-29 21:22:51.000000000","message":"Honestly, I can just trust the above as working...","commit_id":"64c12c75bb5c6a9779667d470dcc0485583bbe62"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5fc06111f80a801c7023e0626008033bcf266b38","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    request_headers:"},{"line_number":7,"context_line":"        x-auth-token: admin"},{"line_number":8,"context_line":"        content-type: application/json"},{"line_number":9,"context_line":"        openstack-api-version: placement latest"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"vars:"},{"line_number":12,"context_line":"    - \u0026agg_1 f918801a-5e54-4bee-9095-09a9d0c786b8"}],"source_content_type":"text/x-yaml","patch_set":36,"id":"5a74a57a_a8ed3f8d","line":9,"range":{"start_line":9,"start_character":41,"end_line":9,"end_character":47},"updated":"2016-11-23 15:57:43.000000000","message":"Nit: I was expecting to see 1.1 here, to match what we ask users to do, but in a way I like latest better, as it feels like it will ensure we don\u0027t break future versions of the API as we go.","commit_id":"44ca84a7e1458a5ef494c13ed78a191340736166"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"635eae3d6f5c56f620d266f82c43e04708af33e1","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    request_headers:"},{"line_number":7,"context_line":"        x-auth-token: admin"},{"line_number":8,"context_line":"        content-type: application/json"},{"line_number":9,"context_line":"        openstack-api-version: placement latest"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"vars:"},{"line_number":12,"context_line":"    - \u0026agg_1 f918801a-5e54-4bee-9095-09a9d0c786b8"}],"source_content_type":"text/x-yaml","patch_set":36,"id":"5a74a57a_4e82f353","line":9,"in_reply_to":"5a74a57a_a8ed3f8d","updated":"2016-11-23 16:05:07.000000000","message":"Yeah, that\u0027s exactly why it is the way it is. Since 1.1 is min for the aggregates and we expect aggregates to work forever (at least for now) I would think that marking a specific version should only be the case when we are confirming old behaviour when something new arrived, thank kind of thing.","commit_id":"44ca84a7e1458a5ef494c13ed78a191340736166"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5fc06111f80a801c7023e0626008033bcf266b38","unresolved":false,"context_lines":[{"line_number":40,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027RP_UUID\u0027]/aggregates"},{"line_number":41,"context_line":"  request_headers:"},{"line_number":42,"context_line":"      openstack-api-version: placement 1.0"},{"line_number":43,"context_line":"  status: 404"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"- name: aggregates 404 for out of date microversion put"},{"line_number":46,"context_line":"  PUT: /resource_providers/$ENVIRON[\u0027RP_UUID\u0027]/aggregates"}],"source_content_type":"text/x-yaml","patch_set":36,"id":"5a74a57a_4863cb1a","line":43,"updated":"2016-11-23 15:57:43.000000000","message":"I am really starting to love this test framework. Its almost beautiful.","commit_id":"44ca84a7e1458a5ef494c13ed78a191340736166"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"635eae3d6f5c56f620d266f82c43e04708af33e1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"  GET: /resource_providers/$ENVIRON[\u0027RP_UUID\u0027]/aggregates"},{"line_number":41,"context_line":"  request_headers:"},{"line_number":42,"context_line":"      openstack-api-version: placement 1.0"},{"line_number":43,"context_line":"  status: 404"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"- name: aggregates 404 for out of date microversion put"},{"line_number":46,"context_line":"  PUT: /resource_providers/$ENVIRON[\u0027RP_UUID\u0027]/aggregates"}],"source_content_type":"text/x-yaml","patch_set":36,"id":"5a74a57a_0ee8fb0f","line":43,"in_reply_to":"5a74a57a_4863cb1a","updated":"2016-11-23 16:05:07.000000000","message":"\\o/, very glad to hear that\n\nThis is an example where the specific microversion matters (to call back to the above).","commit_id":"44ca84a7e1458a5ef494c13ed78a191340736166"}]}
