)]}'
{"api-ref/source/os-aggregates.inc":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":360,"context_line":""},{"line_number":361,"context_line":".. rest_method:: POST /os-aggregates/{aggregate_id}/images"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"Requests that a set of images be pre-cached on compute nodes within the referenced aggregate."},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"Normal response codes: 202"},{"line_number":366,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":5,"id":"3fa7e38b_f4143da2","line":363,"updated":"2019-10-09 20:22:43.000000000","message":"Need to mention the minimum required microversion in here.","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"  - image_id: image_id"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"** Example Request Image pre-caching for Aggregate (v2.80): JSON request**"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":5,"id":"3fa7e38b_d40fc185","line":375,"updated":"2019-10-09 20:22:43.000000000","message":"This is wrong, it should match the schema:\n\nhttps://review.opendev.org/#/c/687140/5/nova/api/openstack/compute/schemas/aggregate_images.py\n\nSo it\u0027d be a cache array of objects and then you\u0027d have something like cache.id. See how block_device_mapping_v2 is documented in the API ref since that\u0027s a list of dicts.","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"** Example Request Image pre-caching for Aggregate (v2.80): JSON request**"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":".. literalinclude:: ../../doc/api_samples/os-aggregates/aggregate-images-post-req.json"},{"line_number":380,"context_line":"   :language: javascript"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"Response"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"3fa7e38b_3473b518","line":379,"range":{"start_line":379,"start_character":42,"end_line":379,"end_character":55},"updated":"2019-10-09 20:22:43.000000000","message":"Wrong path, needs to have v2.80 in it.","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ba375da61b1083f9bca08f5e967de24daa40bed","unresolved":false,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"  - aggregate_id: aggregate_id"},{"line_number":378,"context_line":"  - cache: cache"},{"line_number":379,"context_line":"  - cache.id: image_id"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"** Example Request Image pre-caching for Aggregate (v2.80): JSON request**"},{"line_number":382,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":11,"id":"3fa7e38b_965cb419","line":379,"range":{"start_line":379,"start_character":14,"end_line":379,"end_character":22},"updated":"2019-10-14 14:03:55.000000000","message":"You can\u0027t re-use this.","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"577e4d519424efee6d6a16b11dc005304b02e4bc","unresolved":false,"context_lines":[{"line_number":378,"context_line":"  - cache: cache"},{"line_number":379,"context_line":"  - cache.id: image_id_body"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"** Example Request Image pre-caching for Aggregate (v2.81): JSON request**"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":".. literalinclude:: ../../doc/api_samples/os-aggregates/v2.81/aggregate-images-post-req.json"},{"line_number":384,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":15,"id":"3fa7e38b_8681cafd","line":381,"range":{"start_line":381,"start_character":2,"end_line":381,"end_character":3},"updated":"2019-10-15 20:24:06.000000000","message":"This space breaks the bold formatting.\n\nhttps://storage.gra1.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_006/687140/15/check/build-openstack-api-ref/0060d7c/docs/?expanded\u003drequest-image-pre-caching-for-aggregate-detail#id286","commit_id":"dd64617977337b52187a7f6144e36b2b425e41e7"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ba375da61b1083f9bca08f5e967de24daa40bed","unresolved":false,"context_lines":[{"line_number":186,"context_line":"image_id:"},{"line_number":187,"context_line":"  description: |"},{"line_number":188,"context_line":"    The UUID of the image."},{"line_number":189,"context_line":"  in: path"},{"line_number":190,"context_line":"  required: true"},{"line_number":191,"context_line":"  type: string"},{"line_number":192,"context_line":"instance_id:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3fa7e38b_7661f8d2","line":189,"updated":"2019-10-14 14:03:55.000000000","message":"This is wrong - you need to define a new variable for cache.id since it\u0027s in the body not the path.","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ba375da61b1083f9bca08f5e967de24daa40bed","unresolved":false,"context_lines":[{"line_number":1984,"context_line":"  required: true"},{"line_number":1985,"context_line":"  type: integer"},{"line_number":1986,"context_line":"cache:"},{"line_number":1987,"context_line":"  description: A list of images to cache"},{"line_number":1988,"context_line":"  in: body"},{"line_number":1989,"context_line":"  required: true"},{"line_number":1990,"context_line":"  type: array"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3fa7e38b_9643543f","line":1987,"range":{"start_line":1987,"start_character":39,"end_line":1987,"end_character":40},"updated":"2019-10-14 14:03:55.000000000","message":"cache.","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ba375da61b1083f9bca08f5e967de24daa40bed","unresolved":false,"context_lines":[{"line_number":1984,"context_line":"  required: true"},{"line_number":1985,"context_line":"  type: integer"},{"line_number":1986,"context_line":"cache:"},{"line_number":1987,"context_line":"  description: A list of images to cache"},{"line_number":1988,"context_line":"  in: body"},{"line_number":1989,"context_line":"  required: true"},{"line_number":1990,"context_line":"  type: array"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3fa7e38b_d63d4cbb","line":1987,"range":{"start_line":1987,"start_character":25,"end_line":1987,"end_character":31},"updated":"2019-10-14 14:03:55.000000000","message":"nit: image objects (since it\u0027s a list of dicts)","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"}],"doc/api_samples/os-aggregates/v2.81/aggregate-images-post-req.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"577e4d519424efee6d6a16b11dc005304b02e4bc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"cache\":"},{"line_number":3,"context_line":"    ["},{"line_number":4,"context_line":"        {\"id\": \"image_id\"}"},{"line_number":5,"context_line":"    ]"},{"line_number":6,"context_line":"}"}],"source_content_type":"application/json","patch_set":15,"id":"3fa7e38b_069cfa67","line":4,"range":{"start_line":4,"start_character":16,"end_line":4,"end_character":24},"updated":"2019-10-15 20:24:06.000000000","message":"nit: since this goes in the API samples:\n\nhttps://storage.gra1.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_006/687140/15/check/build-openstack-api-ref/0060d7c/docs/?expanded\u003drequest-image-pre-caching-for-aggregate-detail#id286\n\nI\u0027d use a uuid here.\n\nLooking at the functional test it should be using a uuid so maybe this is a result of earlier attempts at making the API samples test work and the docs need to be re-generated, e.g. using:\n\ntox -e api-samples -- AggregatesV2_81_SampleJsonTest","commit_id":"dd64617977337b52187a7f6144e36b2b425e41e7"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"62f3df02eb25e53b20613012835405dd7b69d006","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"cache\":"},{"line_number":3,"context_line":"    ["},{"line_number":4,"context_line":"        {\"id\": \"70a599e0-31e7-49b7-b260-868f441e862b\"}"},{"line_number":5,"context_line":"    ]"},{"line_number":6,"context_line":"}"}],"source_content_type":"application/json","patch_set":19,"id":"3fa7e38b_ef04fc4b","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":54},"updated":"2019-10-17 03:10:16.000000000","message":"The case of multiple images is better.","commit_id":"339129870692467b703220dbc3905fd8bffe6a83"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"19540bde47e26e3a75961295be55d10b6886eecd","unresolved":false,"context_lines":[{"line_number":218,"context_line":"             ``GET /servers/{server_id}/migrations``, and"},{"line_number":219,"context_line":"             ``GET /servers/{server_id}/migrations/{migration_id}``."},{"line_number":220,"context_line":"    * 2.81 - Adds support for image cache management by aggregate by adding"},{"line_number":221,"context_line":"+            ``POST /aggregates/{aggregate_id}/images``\"\"\""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"# The minimum and maximum versions of the API supported"},{"line_number":224,"context_line":"# The default api version request is defined to be the"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_8f0c7dec","line":221,"range":{"start_line":221,"start_character":0,"end_line":221,"end_character":1},"updated":"2019-10-16 00:52:17.000000000","message":"This is redundant.","commit_id":"57897aee20444c4169f926cd897b49a5cdfb824b"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"36e64a0704fa7361556c9417fe11c94ebb9e85db","unresolved":false,"context_lines":[{"line_number":218,"context_line":"             ``GET /servers/{server_id}/migrations``, and"},{"line_number":219,"context_line":"             ``GET /servers/{server_id}/migrations/{migration_id}``."},{"line_number":220,"context_line":"    * 2.81 - Adds support for image cache management by aggregate by adding"},{"line_number":221,"context_line":"+            ``POST /aggregates/{aggregate_id}/images``\"\"\""},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"# The minimum and maximum versions of the API supported"},{"line_number":224,"context_line":"# The default api version request is defined to be the"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_afb619f8","line":221,"range":{"start_line":221,"start_character":0,"end_line":221,"end_character":1},"in_reply_to":"3fa7e38b_8f0c7dec","updated":"2019-10-16 01:02:31.000000000","message":"Done","commit_id":"57897aee20444c4169f926cd897b49a5cdfb824b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bdbc2db45f0312134de8c49c40fdb257a0c119aa","unresolved":false,"context_lines":[{"line_number":217,"context_line":"             ``GET /os-migrations``,"},{"line_number":218,"context_line":"             ``GET /servers/{server_id}/migrations``, and"},{"line_number":219,"context_line":"             ``GET /servers/{server_id}/migrations/{migration_id}``."},{"line_number":220,"context_line":"    * 2.81 - Adds support for image cache management by aggregate by adding"},{"line_number":221,"context_line":"             ``POST /aggregates/{aggregate_id}/images``."},{"line_number":222,"context_line":"\"\"\""},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_2fd30903","line":220,"updated":"2019-10-16 01:13:01.000000000","message":"Brin pointing this out in PS17 made me realize that this change hasn\u0027t updated the REST API version history:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/rest_api_version_history.rst","commit_id":"253a316bf1b6e9ae0c321e6abd6050256f6ff5bd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4af7a694344cea2564e3231268f637f3858dbe22","unresolved":false,"context_lines":[{"line_number":217,"context_line":"             ``GET /os-migrations``,"},{"line_number":218,"context_line":"             ``GET /servers/{server_id}/migrations``, and"},{"line_number":219,"context_line":"             ``GET /servers/{server_id}/migrations/{migration_id}``."},{"line_number":220,"context_line":"    * 2.81 - Adds support for image cache management by aggregate by adding"},{"line_number":221,"context_line":"             ``POST /aggregates/{aggregate_id}/images``."},{"line_number":222,"context_line":"\"\"\""},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_0f464dc1","line":220,"in_reply_to":"3fa7e38b_2fd30903","updated":"2019-10-16 01:19:22.000000000","message":"Done","commit_id":"253a316bf1b6e9ae0c321e6abd6050256f6ff5bd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fef0cb0b8a6ed3ca3a4f55c101afeec8afce20e3","unresolved":false,"context_lines":[{"line_number":218,"context_line":"             ``GET /servers/{server_id}/migrations``, and"},{"line_number":219,"context_line":"             ``GET /servers/{server_id}/migrations/{migration_id}``."},{"line_number":220,"context_line":"    * 2.81 - Adds support for image cache management by aggregate by adding"},{"line_number":221,"context_line":"             ``POST /aggregates/{aggregate_id}/images``."},{"line_number":222,"context_line":"\"\"\""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_af35b946","line":221,"range":{"start_line":221,"start_character":21,"end_line":221,"end_character":31},"updated":"2019-10-16 01:17:32.000000000","message":"os-aggregates","commit_id":"253a316bf1b6e9ae0c321e6abd6050256f6ff5bd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4af7a694344cea2564e3231268f637f3858dbe22","unresolved":false,"context_lines":[{"line_number":218,"context_line":"             ``GET /servers/{server_id}/migrations``, and"},{"line_number":219,"context_line":"             ``GET /servers/{server_id}/migrations/{migration_id}``."},{"line_number":220,"context_line":"    * 2.81 - Adds support for image cache management by aggregate by adding"},{"line_number":221,"context_line":"             ``POST /aggregates/{aggregate_id}/images``."},{"line_number":222,"context_line":"\"\"\""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_6f3b4137","line":221,"range":{"start_line":221,"start_character":21,"end_line":221,"end_character":31},"in_reply_to":"3fa7e38b_af35b946","updated":"2019-10-16 01:19:22.000000000","message":"Done","commit_id":"253a316bf1b6e9ae0c321e6abd6050256f6ff5bd"}],"nova/api/openstack/compute/aggregates.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"40b8bee6bfd0958104e0289443df07ceb4ae5e72","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                    (show_uuid or key !\u003d \u0027uuid\u0027)):"},{"line_number":227,"context_line":"                yield key, getattr(aggregate, key)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    @wsgi.response(202)"},{"line_number":230,"context_line":"    @wsgi.expected_errors((400, 404))"},{"line_number":231,"context_line":"    @validation.schema(aggregate_images.aggregate_images_v2_80)"},{"line_number":232,"context_line":"    def images(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_4fed7eee","line":229,"updated":"2019-10-09 20:46:32.000000000","message":"You also need @wsgi.Controller.api_version(\"2.80\") on this, that\u0027s why the new functional tests aren\u0027t blowing up even though they aren\u0027t sending 2.80.\n\nWe should have a functional test that tries to hit the route at a lower microversion, like 2.79, and assert you get an error back (I think it\u0027s a 404).","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        for image_req in body.get(\u0027cache\u0027):"},{"line_number":239,"context_line":"            try:"},{"line_number":240,"context_line":"                image_ids.append(image_req[\u0027id\u0027])"},{"line_number":241,"context_line":"            except Exception:"},{"line_number":242,"context_line":"                raise exc.HTTPBadrequest("},{"line_number":243,"context_line":"                    explanation\u003d\u0027Invalid image specification\u0027)"},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_3456552c","line":241,"range":{"start_line":241,"start_character":19,"end_line":241,"end_character":28},"updated":"2019-10-09 20:22:43.000000000","message":"Is this for a KeyError? Because the schema shouldn\u0027t let that happen. Do we have a test for this?","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ae7fed1f45496f7eb9d7a32c7ceaa9cb25de8b02","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        for image_req in body.get(\u0027cache\u0027):"},{"line_number":239,"context_line":"            try:"},{"line_number":240,"context_line":"                image_ids.append(image_req[\u0027id\u0027])"},{"line_number":241,"context_line":"            except Exception:"},{"line_number":242,"context_line":"                raise exc.HTTPBadrequest("},{"line_number":243,"context_line":"                    explanation\u003d\u0027Invalid image specification\u0027)"},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_667c1583","line":241,"range":{"start_line":241,"start_character":19,"end_line":241,"end_character":28},"in_reply_to":"3fa7e38b_3456552c","updated":"2019-10-10 15:34:57.000000000","message":"Sweet, I\u0027m not used to this new-fangledness of schemas.","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                image_ids.append(image_req[\u0027id\u0027])"},{"line_number":241,"context_line":"            except Exception:"},{"line_number":242,"context_line":"                raise exc.HTTPBadrequest("},{"line_number":243,"context_line":"                    explanation\u003d\u0027Invalid image specification\u0027)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        if not image_ids:"},{"line_number":246,"context_line":"            raise exc.HTTPBadRequest("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_d4d261d1","line":243,"range":{"start_line":243,"start_character":32,"end_line":243,"end_character":61},"updated":"2019-10-09 20:22:43.000000000","message":"Should probably mark this and below for translation since it\u0027s user-facing.","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                raise exc.HTTPBadrequest("},{"line_number":243,"context_line":"                    explanation\u003d\u0027Invalid image specification\u0027)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        if not image_ids:"},{"line_number":246,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":247,"context_line":"                explanation\u003d\u0027No images in request\u0027)"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_94af0929","line":245,"updated":"2019-10-09 20:22:43.000000000","message":"We can enforce this in schema with \"minItems\":\n\nhttps://json-schema.org/understanding-json-schema/reference/array.html#length","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d55571f19fa48dc95f081e2b0dbfcab2a780d709","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":247,"context_line":"                explanation\u003d\u0027No images in request\u0027)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        if image_ids !\u003d list(set(image_ids)):"},{"line_number":250,"context_line":"            print(image_ids)"},{"line_number":251,"context_line":"            print(set(image_ids))"},{"line_number":252,"context_line":"            raise exc.HTTPBadRequest("}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_2f536219","line":249,"updated":"2019-10-09 20:26:18.000000000","message":"Looks like we can enforce this in the schema?\n\nhttps://json-schema.org/understanding-json-schema/reference/array.html#uniqueness\n\nThough I\u0027m not sure how well that works with dicts?","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                explanation\u003d\u0027No images in request\u0027)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        if image_ids !\u003d list(set(image_ids)):"},{"line_number":250,"context_line":"            print(image_ids)"},{"line_number":251,"context_line":"            print(set(image_ids))"},{"line_number":252,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":253,"context_line":"                explanation\u003d\u0027Duplicate images in request\u0027)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_544991b4","line":251,"range":{"start_line":250,"start_character":12,"end_line":251,"end_character":33},"updated":"2019-10-09 20:22:43.000000000","message":"oops","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        if image_ids !\u003d list(set(image_ids)):"},{"line_number":250,"context_line":"            print(image_ids)"},{"line_number":251,"context_line":"            print(set(image_ids))"},{"line_number":252,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":253,"context_line":"                explanation\u003d\u0027Duplicate images in request\u0027)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_b4424567","line":252,"updated":"2019-10-09 20:22:43.000000000","message":"I don\u0027t see a test for this case.","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        try:"},{"line_number":261,"context_line":"            self.conductor_tasks.cache_images(context, aggregate, image_ids)"},{"line_number":262,"context_line":"        except exception.NovaException as e:"},{"line_number":263,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_34fad542","line":262,"updated":"2019-10-09 20:22:43.000000000","message":"OK so this is the case that like the image isn\u0027t found but also with the way the conductor code is written, if image_api.get raises some non-NovaException we trap it and raise ImageUnacceptable which is going to result in a 400 here but that should really be a 500 right? Like if glance is dead or we\u0027re misconfigured to use glance, we should return a 500 in that case.","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"}],"nova/api/openstack/compute/schemas/aggregate_images.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":15,"context_line":"    \u0027properties\u0027: {"},{"line_number":16,"context_line":"        \u0027cache\u0027: {"},{"line_number":17,"context_line":"            \u0027type\u0027: [\u0027array\u0027],"},{"line_number":18,"context_line":"            \u0027items\u0027: {"},{"line_number":19,"context_line":"                \u0027type\u0027: \u0027object\u0027,"},{"line_number":20,"context_line":"                \u0027properties\u0027: {"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_34a8951e","line":17,"updated":"2019-10-09 20:22:43.000000000","message":"If you use \u0027minItems\u0027: 1 we can move that validation from the code to the schema.","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"7a4482fc829d40c2d3c788da93da9f208c2869fc","unresolved":false,"context_lines":[{"line_number":19,"context_line":"                \u0027type\u0027: \u0027object\u0027,"},{"line_number":20,"context_line":"                \u0027properties\u0027: {"},{"line_number":21,"context_line":"                    \u0027id\u0027: {"},{"line_number":22,"context_line":"                        \u0027type\u0027: \u0027string\u0027, \u0027minLength\u0027: 1, \u0027maxLength\u0027: 255,"},{"line_number":23,"context_line":"                    },"},{"line_number":24,"context_line":"                },"},{"line_number":25,"context_line":"                \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_c695d488","line":22,"range":{"start_line":22,"start_character":24,"end_line":22,"end_character":75},"updated":"2019-10-10 03:14:01.000000000","message":"Is this can be instead of \"parameter_types.image_id\"?\n\nhttps://github.com/openstack/nova/blob/master/nova/api/validation/parameter_types.py#L331","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2477a024e1520f08b7a7ecec3fbdc19119c4df9c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"                \u0027type\u0027: \u0027object\u0027,"},{"line_number":20,"context_line":"                \u0027properties\u0027: {"},{"line_number":21,"context_line":"                    \u0027id\u0027: {"},{"line_number":22,"context_line":"                        \u0027type\u0027: \u0027string\u0027, \u0027minLength\u0027: 1, \u0027maxLength\u0027: 255,"},{"line_number":23,"context_line":"                    },"},{"line_number":24,"context_line":"                },"},{"line_number":25,"context_line":"                \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_e339d7d6","line":22,"range":{"start_line":22,"start_character":24,"end_line":22,"end_character":75},"in_reply_to":"3fa7e38b_c695d488","updated":"2019-10-10 14:55:32.000000000","message":"Probably :)","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ba375da61b1083f9bca08f5e967de24daa40bed","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    \u0027properties\u0027: {"},{"line_number":19,"context_line":"        \u0027cache\u0027: {"},{"line_number":20,"context_line":"            \u0027type\u0027: [\u0027array\u0027],"},{"line_number":21,"context_line":"            \u0027minItems\u0027: 1,"},{"line_number":22,"context_line":"            \u0027items\u0027: {"},{"line_number":23,"context_line":"                \u0027type\u0027: \u0027object\u0027,"},{"line_number":24,"context_line":"                \u0027properties\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_968a7461","line":21,"updated":"2019-10-14 14:03:55.000000000","message":"I don\u0027t see a test for this.","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ba375da61b1083f9bca08f5e967de24daa40bed","unresolved":false,"context_lines":[{"line_number":24,"context_line":"                \u0027properties\u0027: {"},{"line_number":25,"context_line":"                    \u0027id\u0027: parameter_types.image_id,"},{"line_number":26,"context_line":"                },"},{"line_number":27,"context_line":"                \u0027additionalProperties\u0027: False,"},{"line_number":28,"context_line":"                \u0027required\u0027: [\u0027id\u0027],"},{"line_number":29,"context_line":"            },"},{"line_number":30,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_d6d9cc82","line":27,"updated":"2019-10-14 14:03:55.000000000","message":"Should have a test for additionalProperties\u003dFalse here...","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ba375da61b1083f9bca08f5e967de24daa40bed","unresolved":false,"context_lines":[{"line_number":25,"context_line":"                    \u0027id\u0027: parameter_types.image_id,"},{"line_number":26,"context_line":"                },"},{"line_number":27,"context_line":"                \u0027additionalProperties\u0027: False,"},{"line_number":28,"context_line":"                \u0027required\u0027: [\u0027id\u0027],"},{"line_number":29,"context_line":"            },"},{"line_number":30,"context_line":"        },"},{"line_number":31,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_f6f088ff","line":28,"updated":"2019-10-14 14:03:55.000000000","message":"I don\u0027t see a test for this (missing id I mean).","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ba375da61b1083f9bca08f5e967de24daa40bed","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            },"},{"line_number":30,"context_line":"        },"},{"line_number":31,"context_line":"    },"},{"line_number":32,"context_line":"    \u0027required\u0027: [\u0027cache\u0027],"},{"line_number":33,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":34,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_16cd24b6","line":32,"updated":"2019-10-14 14:03:55.000000000","message":"Could have a simple negative unit test for this as well - POST with an empty dict or null or something.","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ba375da61b1083f9bca08f5e967de24daa40bed","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        },"},{"line_number":31,"context_line":"    },"},{"line_number":32,"context_line":"    \u0027required\u0027: [\u0027cache\u0027],"},{"line_number":33,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":34,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_76e4983c","line":33,"updated":"2019-10-14 14:03:55.000000000","message":"and here","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"}],"nova/policies/aggregates.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"577e4d519424efee6d6a16b11dc005304b02e4bc","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"POLICY_ROOT \u003d \u0027os_compute_api:os-aggregates:%s\u0027"},{"line_number":22,"context_line":"NEW_POLICY_ROOT \u003d \u0027compute_api:aggregates:%s\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"aggregates_policies \u003d ["}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_06aaba6f","line":22,"range":{"start_line":22,"start_character":26,"end_line":22,"end_character":30},"updated":"2019-10-15 20:24:06.000000000","message":"nix this suffix, e.g. we have new rules like:\n\n- compute:server:topology:index\n- compute:server:topology:host:index\n- compute:servers:create:requested_destination","commit_id":"dd64617977337b52187a7f6144e36b2b425e41e7"}],"nova/tests/functional/test_aggregates.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"40b8bee6bfd0958104e0289443df07ceb4ae5e72","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class AggregatesTest(integrated_helpers._IntegratedTestBase):"},{"line_number":32,"context_line":"    api_major_version \u003d \u0027v2\u0027"},{"line_number":33,"context_line":"    ADMIN_API \u003d True"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_efdeaa3c","line":32,"updated":"2019-10-09 20:46:32.000000000","message":"How are the new image cache tests working if you\u0027re not using v2.1 or the proper microversion (2.80 in this case)? It seems the route handling isn\u0027t checking the microversion needed.","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ba375da61b1083f9bca08f5e967de24daa40bed","unresolved":false,"context_lines":[{"line_number":60,"context_line":"class AggregatesV280Test(AggregatesTest):"},{"line_number":61,"context_line":"    api_major_version \u003d \u0027v2.1\u0027"},{"line_number":62,"context_line":"    microversion \u003d \u00272.80\u0027"},{"line_number":63,"context_line":"    ADMIN_API \u003d True"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def setUp(self):"},{"line_number":66,"context_line":"        self.flags(compute_driver\u003d\u0027fake.FakeDriverWithCaching\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_d6ab0cd3","line":63,"updated":"2019-10-14 14:03:55.000000000","message":"nit: this is redundant since it\u0027s defined in the parent class","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"95b464eb9fe4bb677732c4a51ea5c92ef15350eb","unresolved":false,"context_lines":[{"line_number":60,"context_line":"class AggregatesV280Test(AggregatesTest):"},{"line_number":61,"context_line":"    api_major_version \u003d \u0027v2.1\u0027"},{"line_number":62,"context_line":"    microversion \u003d \u00272.80\u0027"},{"line_number":63,"context_line":"    ADMIN_API \u003d True"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def setUp(self):"},{"line_number":66,"context_line":"        self.flags(compute_driver\u003d\u0027fake.FakeDriverWithCaching\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_f6b5e87e","line":63,"in_reply_to":"3fa7e38b_d6ab0cd3","updated":"2019-10-14 14:34:41.000000000","message":"Yeah, thanks, I had tried defining this not as a subclass of it when I was trying to figure out that glance error and then didn\u0027t re-remove this.","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"}],"nova/tests/unit/test_policy.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":309,"context_line":"\"os_compute_api:os-aggregates:add_host\","},{"line_number":310,"context_line":"\"os_compute_api:os-aggregates:remove_host\","},{"line_number":311,"context_line":"\"os_compute_api:os-aggregates:set_metadata\","},{"line_number":312,"context_line":"\"os_compute_api:os-aggregates:images\","},{"line_number":313,"context_line":"\"os_compute_api:os-agents\","},{"line_number":314,"context_line":"\"os_compute_api:os-baremetal-nodes\","},{"line_number":315,"context_line":"\"os_compute_api:os-evacuate\","}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_5442f1ac","line":312,"updated":"2019-10-09 20:22:43.000000000","message":"This is the old way of policy rule naming so we should consider doing the new rule naming conventions here:\n\nhttps://docs.openstack.org/oslo.policy/latest/user/usage.html#naming-policies\n\nSo I think that would be something like:\n\ncompute:aggregate:images\n\nor maybe even:\n\ncompute:aggregate:images:cache\n\nif we want to eventually scope the policy to different actions you can take on a set of images within an aggregate, e.g. purge?","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ae7fed1f45496f7eb9d7a32c7ceaa9cb25de8b02","unresolved":false,"context_lines":[{"line_number":309,"context_line":"\"os_compute_api:os-aggregates:add_host\","},{"line_number":310,"context_line":"\"os_compute_api:os-aggregates:remove_host\","},{"line_number":311,"context_line":"\"os_compute_api:os-aggregates:set_metadata\","},{"line_number":312,"context_line":"\"os_compute_api:os-aggregates:images\","},{"line_number":313,"context_line":"\"os_compute_api:os-agents\","},{"line_number":314,"context_line":"\"os_compute_api:os-baremetal-nodes\","},{"line_number":315,"context_line":"\"os_compute_api:os-evacuate\","}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_26ba9d6d","line":312,"in_reply_to":"3fa7e38b_5442f1ac","updated":"2019-10-10 15:34:57.000000000","message":"Dunno dude, just tell me what I should type here. This is the most policy stuff I\u0027ve ever had to deal with.","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"}],"nova/virt/fake.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"    def cache_image(self, context, image_id):"},{"line_number":1024,"context_line":"        if image_id in self.cached_images:"},{"line_number":1025,"context_line":"            return \u0027existing\u0027"},{"line_number":1026,"context_line":"        else:"},{"line_number":1027,"context_line":"            self.cached_images.add(image_id)"},{"line_number":1028,"context_line":"            return \u0027cached\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_34c2d535","line":1025,"range":{"start_line":1025,"start_character":19,"end_line":1025,"end_character":29},"updated":"2019-10-09 20:22:43.000000000","message":"False","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ae7fed1f45496f7eb9d7a32c7ceaa9cb25de8b02","unresolved":false,"context_lines":[{"line_number":1022,"context_line":""},{"line_number":1023,"context_line":"    def cache_image(self, context, image_id):"},{"line_number":1024,"context_line":"        if image_id in self.cached_images:"},{"line_number":1025,"context_line":"            return \u0027existing\u0027"},{"line_number":1026,"context_line":"        else:"},{"line_number":1027,"context_line":"            self.cached_images.add(image_id)"},{"line_number":1028,"context_line":"            return \u0027cached\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_e6afa527","line":1025,"range":{"start_line":1025,"start_character":19,"end_line":1025,"end_character":29},"in_reply_to":"3fa7e38b_34c2d535","updated":"2019-10-10 15:34:57.000000000","message":"Oops, yep, but moved to the parent patch and fixed there.","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba55cb8a948453ef704d3ef1a1c0d80c82147eac","unresolved":false,"context_lines":[{"line_number":1025,"context_line":"            return \u0027existing\u0027"},{"line_number":1026,"context_line":"        else:"},{"line_number":1027,"context_line":"            self.cached_images.add(image_id)"},{"line_number":1028,"context_line":"            return \u0027cached\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_54bf51a9","line":1028,"range":{"start_line":1028,"start_character":19,"end_line":1028,"end_character":27},"updated":"2019-10-09 20:22:43.000000000","message":"True","commit_id":"7651a5484ce898343bd919e2f518b0fa23cc3b10"}],"releasenotes/notes/image-precaching-d46506568fefa1ea.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9c3e62f12f606f23c2029ba5a58bcbf87667eacc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Image pre-caching on hosts by aggregate is now supported (where"},{"line_number":5,"context_line":"    supported by the underlying virt driver). A group of hosts within"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3fa7e38b_4190e343","line":2,"updated":"2019-10-10 15:54:45.000000000","message":"Gonna want to mention the (1) new route ``POST /os-aggregates/{aggregate_id/images`` or whatever, (2) microversion and (3) policy rule that controls it.","commit_id":"dd3137f9bc08215554665950b7713f8796499d27"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9c3e62f12f606f23c2029ba5a58bcbf87667eacc","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    supported by the underlying virt driver). A group of hosts within"},{"line_number":6,"context_line":"    an aggregate can be compelled to fetch and cache a list of images"},{"line_number":7,"context_line":"    to reduce time-to-boot latency. See the"},{"line_number":8,"context_line":"    `image_cache/[precache_parallelism]` config knob for more"},{"line_number":9,"context_line":"    information about throttling this operation."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3fa7e38b_e17b0f25","line":8,"range":{"start_line":8,"start_character":4,"end_line":8,"end_character":40},"updated":"2019-10-10 15:54:45.000000000","message":"``[image_cache]/precache_parallelism`` (note precache_concurrency might be a better name?)","commit_id":"dd3137f9bc08215554665950b7713f8796499d27"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca7f46ada443be4d6ed8a1e9b3c065d5c2f0d7da","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    * ``POST /aggregates/{aggregate_id}/images``"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    which is controlled by the policy"},{"line_number":13,"context_line":"    ``os_compute_api:os-aggregates:images`` rule."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    See the `image_cache/[precache_concurrency]` config knob"},{"line_number":16,"context_line":"    for more information about throttling this operation."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3fa7e38b_165be4f5","line":13,"range":{"start_line":13,"start_character":6,"end_line":13,"end_character":34},"updated":"2019-10-14 14:06:28.000000000","message":"I mentioned this in PS5[1]  and we can ask gmann to confirm but this is the old style policy naming and we should be using the new conventions.\n\n[1] https://review.opendev.org/#/c/687140/5/nova/tests/unit/test_policy.py@312","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"95b464eb9fe4bb677732c4a51ea5c92ef15350eb","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    * ``POST /aggregates/{aggregate_id}/images``"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    which is controlled by the policy"},{"line_number":13,"context_line":"    ``os_compute_api:os-aggregates:images`` rule."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    See the `image_cache/[precache_concurrency]` config knob"},{"line_number":16,"context_line":"    for more information about throttling this operation."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3fa7e38b_d6aeac2c","line":13,"range":{"start_line":13,"start_character":6,"end_line":13,"end_character":34},"in_reply_to":"3fa7e38b_165be4f5","updated":"2019-10-14 14:34:41.000000000","message":"Yeah, and I said \"tell me what to type here\"... I\u0027m not sure what the new convention looks like, but if you can point me to something I\u0027m happy to change it.","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"27cce1d9c0f2a0b4b2d39e4302d33eb677ec0367","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    which is controlled by the policy"},{"line_number":13,"context_line":"    ``os_compute_api:os-aggregates:images`` rule."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    See the `image_cache/[precache_concurrency]` config knob"},{"line_number":16,"context_line":"    for more information about throttling this operation."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3fa7e38b_b6fa10ba","line":15,"range":{"start_line":15,"start_character":56,"end_line":15,"end_character":60},"updated":"2019-10-14 14:07:23.000000000","message":"nit: let\u0027s say \"option\" for non-native English speakers that might not understand what \"knob\" means here.","commit_id":"cf3d7699cde87050965b56afb727d806efef923c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fef0cb0b8a6ed3ca3a4f55c101afeec8afce20e3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    fetch and cache a list of images to reduce time-to-boot"},{"line_number":8,"context_line":"    latency. Adds the new API:"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    * ``POST /aggregates/{aggregate_id}/images``"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    which is controlled by the policy"},{"line_number":13,"context_line":"    ``os_compute_api:os-aggregates:images`` rule."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"3fa7e38b_8f323d5d","line":10,"range":{"start_line":10,"start_character":14,"end_line":10,"end_character":24},"updated":"2019-10-16 01:17:32.000000000","message":"os-aggregates","commit_id":"253a316bf1b6e9ae0c321e6abd6050256f6ff5bd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4af7a694344cea2564e3231268f637f3858dbe22","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    fetch and cache a list of images to reduce time-to-boot"},{"line_number":8,"context_line":"    latency. Adds the new API:"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    * ``POST /aggregates/{aggregate_id}/images``"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    which is controlled by the policy"},{"line_number":13,"context_line":"    ``os_compute_api:os-aggregates:images`` rule."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"3fa7e38b_2f41c9a6","line":10,"range":{"start_line":10,"start_character":14,"end_line":10,"end_character":24},"in_reply_to":"3fa7e38b_8f323d5d","updated":"2019-10-16 01:19:22.000000000","message":"Done","commit_id":"253a316bf1b6e9ae0c321e6abd6050256f6ff5bd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bdbc2db45f0312134de8c49c40fdb257a0c119aa","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    * ``POST /aggregates/{aggregate_id}/images``"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    which is controlled by the policy"},{"line_number":13,"context_line":"    ``os_compute_api:os-aggregates:images`` rule."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    See the `image_cache/[precache_concurrency]` config option"},{"line_number":16,"context_line":"    for more information about throttling this operation."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"3fa7e38b_ef0ad187","line":13,"range":{"start_line":13,"start_character":6,"end_line":13,"end_character":41},"updated":"2019-10-16 01:13:01.000000000","message":"compute:aggregates:images","commit_id":"253a316bf1b6e9ae0c321e6abd6050256f6ff5bd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4af7a694344cea2564e3231268f637f3858dbe22","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    * ``POST /aggregates/{aggregate_id}/images``"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    which is controlled by the policy"},{"line_number":13,"context_line":"    ``os_compute_api:os-aggregates:images`` rule."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    See the `image_cache/[precache_concurrency]` config option"},{"line_number":16,"context_line":"    for more information about throttling this operation."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"3fa7e38b_cf15959d","line":13,"range":{"start_line":13,"start_character":6,"end_line":13,"end_character":41},"in_reply_to":"3fa7e38b_ef0ad187","updated":"2019-10-16 01:19:22.000000000","message":"Done","commit_id":"253a316bf1b6e9ae0c321e6abd6050256f6ff5bd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bdbc2db45f0312134de8c49c40fdb257a0c119aa","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    which is controlled by the policy"},{"line_number":13,"context_line":"    ``os_compute_api:os-aggregates:images`` rule."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    See the `image_cache/[precache_concurrency]` config option"},{"line_number":16,"context_line":"    for more information about throttling this operation."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"3fa7e38b_4ffbe577","line":15,"range":{"start_line":15,"start_character":13,"end_line":15,"end_character":47},"updated":"2019-10-16 01:13:01.000000000","message":"[image_cache]/precache_concurrency\n\nThe group goes in the brackets.","commit_id":"253a316bf1b6e9ae0c321e6abd6050256f6ff5bd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b526648b04d21aaabe5a2a1340c582cabba96e4f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    which is controlled by the policy"},{"line_number":13,"context_line":"    ``os_compute_api:os-aggregates:images`` rule."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    See the `image_cache/[precache_concurrency]` config option"},{"line_number":16,"context_line":"    for more information about throttling this operation."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"3fa7e38b_b138b39f","line":15,"range":{"start_line":15,"start_character":13,"end_line":15,"end_character":47},"in_reply_to":"3fa7e38b_4f29a5e3","updated":"2019-10-16 13:30:17.000000000","message":"Wow, I have no idea what I was thinking putting the brackets around the key here.","commit_id":"253a316bf1b6e9ae0c321e6abd6050256f6ff5bd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4af7a694344cea2564e3231268f637f3858dbe22","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    which is controlled by the policy"},{"line_number":13,"context_line":"    ``os_compute_api:os-aggregates:images`` rule."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    See the `image_cache/[precache_concurrency]` config option"},{"line_number":16,"context_line":"    for more information about throttling this operation."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"3fa7e38b_4f29a5e3","line":15,"range":{"start_line":15,"start_character":13,"end_line":15,"end_character":47},"in_reply_to":"3fa7e38b_4ffbe577","updated":"2019-10-16 01:19:22.000000000","message":"Done","commit_id":"253a316bf1b6e9ae0c321e6abd6050256f6ff5bd"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"62f3df02eb25e53b20613012835405dd7b69d006","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    which is controlled by the policy ``compute:aggregates:images`` rule."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    See the `[image_cache]/precache_concurrency` config option"},{"line_number":15,"context_line":"    for more information about throttling this operation."}],"source_content_type":"text/x-yaml","patch_set":19,"id":"3fa7e38b_cff58052","line":14,"range":{"start_line":14,"start_character":12,"end_line":14,"end_character":48},"updated":"2019-10-17 03:10:16.000000000","message":"nit: ``[image_cache]/precache_concurrency``","commit_id":"339129870692467b703220dbc3905fd8bffe6a83"}]}
