)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a4ec4c11f54e4b96ad3bc55357dd02cd35f1f5d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"currently do this. Including it will make it a better HTTP citizen"},{"line_number":13,"context_line":"and also provide useful metadata in the response. If a"},{"line_number":14,"context_line":"last-modified header is added then it is also necessary to add a"},{"line_number":15,"context_line":"cache-control header with a value of \"no-cache\" to insure that clients"},{"line_number":16,"context_line":"and proxies are not inclined to cache representations provided by the"},{"line_number":17,"context_line":"placement service."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7f515b1d_ff0d553e","line":15,"range":{"start_line":15,"start_character":51,"end_line":15,"end_character":52},"updated":"2017-09-25 21:05:24.000000000","message":"ensure\n\nbad, bad boy.","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"96c166bace32c7203bd862db23d96641a4c47113","unresolved":false,"context_lines":[{"line_number":12,"context_line":"currently do this. Including it will make it a better HTTP citizen"},{"line_number":13,"context_line":"and also provide useful metadata in the response. If a"},{"line_number":14,"context_line":"last-modified header is added then it is also necessary to add a"},{"line_number":15,"context_line":"cache-control header with a value of \"no-cache\" to insure that clients"},{"line_number":16,"context_line":"and proxies are not inclined to cache representations provided by the"},{"line_number":17,"context_line":"placement service."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7f515b1d_8f6da8cd","line":15,"range":{"start_line":15,"start_character":51,"end_line":15,"end_character":52},"in_reply_to":"7f515b1d_6502f20b","updated":"2017-09-28 17:17:00.000000000","message":"It depends on which side of the Atlantic you are on:\n\nhttps://brians.wsu.edu/2016/05/17/assure-ensure-insure/\n\nBut in my mind, unless you are promising to pay clients, \u0027ensure\u0027 is better (says the west side of the Atlantic person).","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"727cb5a889c8980edae8d9c21ffd3fbb5aa07004","unresolved":false,"context_lines":[{"line_number":12,"context_line":"currently do this. Including it will make it a better HTTP citizen"},{"line_number":13,"context_line":"and also provide useful metadata in the response. If a"},{"line_number":14,"context_line":"last-modified header is added then it is also necessary to add a"},{"line_number":15,"context_line":"cache-control header with a value of \"no-cache\" to insure that clients"},{"line_number":16,"context_line":"and proxies are not inclined to cache representations provided by the"},{"line_number":17,"context_line":"placement service."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7f515b1d_6502f20b","line":15,"range":{"start_line":15,"start_character":51,"end_line":15,"end_character":52},"in_reply_to":"7f515b1d_ff0d553e","updated":"2017-09-25 21:35:49.000000000","message":"It\u0027s perfectly correct, albeit antiquated. I aspire to follow the rules of the New Yorker and the New York Times.\n\nBut if you insist...","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"}],"specs/queens/approved/placement-cache-headers.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a4ec4c11f54e4b96ad3bc55357dd02cd35f1f5d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"deduced. The placement service does not currently do this. Including it will"},{"line_number":16,"context_line":"make it a better HTTP citizen and also provide useful metadata in the response."},{"line_number":17,"context_line":"If a last-modified header is added then it is also necessary to add a"},{"line_number":18,"context_line":"cache-control header with a value of \"no-cache\" to insure that clients and"},{"line_number":19,"context_line":"proxies are not inclined to cache representations provided by the placement"},{"line_number":20,"context_line":"service."},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_220cf039","line":18,"range":{"start_line":18,"start_character":51,"end_line":18,"end_character":52},"updated":"2017-09-25 21:05:24.000000000","message":"tsk tsk. ensure.","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a4ec4c11f54e4b96ad3bc55357dd02cd35f1f5d","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"* There is a chance that clients and proxies pasing requests to placement will"},{"line_number":31,"context_line":"  cache responses from the service. Given that the majority of data provided by"},{"line_number":32,"context_line":"  placement highly time dependent, this is problematic."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_a230e0e9","line":32,"updated":"2017-09-25 21:05:24.000000000","message":"ack","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a4ec4c11f54e4b96ad3bc55357dd02cd35f1f5d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* If the request is for a singular entity directly associated with a database"},{"line_number":55,"context_line":"  row that has an ``updated_at`` or ``created_at`` field, then the value of one"},{"line_number":56,"context_line":"  of those fields will be used, preferring ``updated_at`` if it is set (it"},{"line_number":57,"context_line":"  won\u0027t be if the resource has only been created but not yet updated)."},{"line_number":58,"context_line":"* If the request is for a collection of entities that are directly associated"},{"line_number":59,"context_line":"  with the database, the value will be the max of the ``updated_at`` or"},{"line_number":60,"context_line":"  ``created_at`` for all the entities in the collection."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_c24abc53","line":57,"updated":"2017-09-25 21:05:24.000000000","message":"Hmm, we probably should just always set updated_at to created_at at create time and then there\u0027d be no need to do COERCE(updated_at, created_at).","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"727cb5a889c8980edae8d9c21ffd3fbb5aa07004","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* If the request is for a singular entity directly associated with a database"},{"line_number":55,"context_line":"  row that has an ``updated_at`` or ``created_at`` field, then the value of one"},{"line_number":56,"context_line":"  of those fields will be used, preferring ``updated_at`` if it is set (it"},{"line_number":57,"context_line":"  won\u0027t be if the resource has only been created but not yet updated)."},{"line_number":58,"context_line":"* If the request is for a collection of entities that are directly associated"},{"line_number":59,"context_line":"  with the database, the value will be the max of the ``updated_at`` or"},{"line_number":60,"context_line":"  ``created_at`` for all the entities in the collection."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_0541fe39","line":57,"in_reply_to":"7f515b1d_c24abc53","updated":"2017-09-25 21:35:49.000000000","message":"At the moment we set neither and mysql just does its thing. I specified the above so that we\u0027re making a smaller change, at the api layer, not the object/db layer.","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"35732b93f2e2144181be5b7dcdc812f3cfe65505","unresolved":false,"context_lines":[{"line_number":59,"context_line":"  with the database, the value will be the max of the ``updated_at`` or"},{"line_number":60,"context_line":"  ``created_at`` for all the entities in the collection."},{"line_number":61,"context_line":"* If the request is for an entity or collection which is composed from multiple"},{"line_number":62,"context_line":"  parts, then the value of the header will be the current time."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Alternatives"},{"line_number":65,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_29b429f2","line":62,"updated":"2017-10-03 13:41:29.000000000","message":"I appreciate the efforts to make the last-modifier header value totally meaningful, but should we leak out when the resources are updated ?\n\nI know Placement is definitely intended to be only usable by admins or services, so I think that concern is not really important, but could we just simplify and just pass the current time anyway ?","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a4ec4c11f54e4b96ad3bc55357dd02cd35f1f5d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"headers then the risk of caching is very small (as there is no conditional"},{"line_number":69,"context_line":"header present). But then we would be bad HTTP citizens."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Another alternatives is to start using ETags within the placement service."},{"line_number":72,"context_line":"This would enable fairly complex and complete server-side and client-side"},{"line_number":73,"context_line":"caching of resources, saving bandwidth and database queries. It is, however, a"},{"line_number":74,"context_line":"fairly serious undertaking and would not remove the need for ``last-modified``"},{"line_number":75,"context_line":"headers, so best to take smaller steps towards having the full suite of"},{"line_number":76,"context_line":"headers."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Data model impact"},{"line_number":79,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_02dd746f","line":76,"range":{"start_line":71,"start_character":0,"end_line":76,"end_character":8},"updated":"2017-09-25 21:05:24.000000000","message":"We could also approach doing ETags stuff for the \"easy\" resources in the placement API -- like /resource_classes and /traits and punt on the harder stuff that changes a lot.","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"727cb5a889c8980edae8d9c21ffd3fbb5aa07004","unresolved":false,"context_lines":[{"line_number":68,"context_line":"headers then the risk of caching is very small (as there is no conditional"},{"line_number":69,"context_line":"header present). But then we would be bad HTTP citizens."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Another alternatives is to start using ETags within the placement service."},{"line_number":72,"context_line":"This would enable fairly complex and complete server-side and client-side"},{"line_number":73,"context_line":"caching of resources, saving bandwidth and database queries. It is, however, a"},{"line_number":74,"context_line":"fairly serious undertaking and would not remove the need for ``last-modified``"},{"line_number":75,"context_line":"headers, so best to take smaller steps towards having the full suite of"},{"line_number":76,"context_line":"headers."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Data model impact"},{"line_number":79,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_a55eaa0f","line":76,"range":{"start_line":71,"start_character":0,"end_line":76,"end_character":8},"in_reply_to":"7f515b1d_02dd746f","updated":"2017-09-25 21:35:49.000000000","message":"yeah, sure, down the road, but smaller steps  wins for now","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"96c166bace32c7203bd862db23d96641a4c47113","unresolved":false,"context_lines":[{"line_number":68,"context_line":"headers then the risk of caching is very small (as there is no conditional"},{"line_number":69,"context_line":"header present). But then we would be bad HTTP citizens."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Another alternatives is to start using ETags within the placement service."},{"line_number":72,"context_line":"This would enable fairly complex and complete server-side and client-side"},{"line_number":73,"context_line":"caching of resources, saving bandwidth and database queries. It is, however, a"},{"line_number":74,"context_line":"fairly serious undertaking and would not remove the need for ``last-modified``"},{"line_number":75,"context_line":"headers, so best to take smaller steps towards having the full suite of"},{"line_number":76,"context_line":"headers."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Data model impact"},{"line_number":79,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_f2a643ab","line":76,"range":{"start_line":71,"start_character":0,"end_line":76,"end_character":8},"in_reply_to":"7f515b1d_a55eaa0f","updated":"2017-09-28 17:17:00.000000000","message":"agreed","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"35732b93f2e2144181be5b7dcdc812f3cfe65505","unresolved":false,"context_lines":[{"line_number":68,"context_line":"headers then the risk of caching is very small (as there is no conditional"},{"line_number":69,"context_line":"header present). But then we would be bad HTTP citizens."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Another alternatives is to start using ETags within the placement service."},{"line_number":72,"context_line":"This would enable fairly complex and complete server-side and client-side"},{"line_number":73,"context_line":"caching of resources, saving bandwidth and database queries. It is, however, a"},{"line_number":74,"context_line":"fairly serious undertaking and would not remove the need for ``last-modified``"},{"line_number":75,"context_line":"headers, so best to take smaller steps towards having the full suite of"},{"line_number":76,"context_line":"headers."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Data model impact"},{"line_number":79,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_a9c7f964","line":76,"range":{"start_line":71,"start_character":0,"end_line":76,"end_character":8},"in_reply_to":"7f515b1d_f2a643ab","updated":"2017-10-03 13:41:29.000000000","message":"Please no, ETags are something huuuuuuge to implement.","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2a4ec4c11f54e4b96ad3bc55357dd02cd35f1f5d","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The database tables already have the desired ``updated_at`` and ``created_at``"},{"line_number":82,"context_line":"fields but the OVO in ``nova/objects/resource_provider.py`` need to be updated"},{"line_number":83,"context_line":"to expose those fields. This can be done by using the ``NovaTimestampObject``"},{"line_number":84,"context_line":"mixin."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_e245b816","line":83,"range":{"start_line":83,"start_character":56,"end_line":83,"end_character":75},"updated":"2017-09-25 21:05:24.000000000","message":"Consider adding a patch to upstream ovo for a TimestampMixin to remove the Nova-specific dependency.","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d850eb31c3d8d1de6e0e38a6b05100ad7beff0f3","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The database tables already have the desired ``updated_at`` and ``created_at``"},{"line_number":82,"context_line":"fields but the OVO in ``nova/objects/resource_provider.py`` need to be updated"},{"line_number":83,"context_line":"to expose those fields. This can be done by using the ``NovaTimestampObject``"},{"line_number":84,"context_line":"mixin."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_f097c28f","line":83,"range":{"start_line":83,"start_character":56,"end_line":83,"end_character":75},"in_reply_to":"7f515b1d_a5b34a4d","updated":"2017-09-25 22:24:41.000000000","message":"lol :) thanks.\n\n/me scurries away, suitably cowed.","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"727cb5a889c8980edae8d9c21ffd3fbb5aa07004","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"The database tables already have the desired ``updated_at`` and ``created_at``"},{"line_number":82,"context_line":"fields but the OVO in ``nova/objects/resource_provider.py`` need to be updated"},{"line_number":83,"context_line":"to expose those fields. This can be done by using the ``NovaTimestampObject``"},{"line_number":84,"context_line":"mixin."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_a5b34a4d","line":83,"range":{"start_line":83,"start_character":56,"end_line":83,"end_character":75},"in_reply_to":"7f515b1d_e245b816","updated":"2017-09-25 21:35:49.000000000","message":"I did that almost immediately after you suggested it the first time: https://review.openstack.org/#/c/495913/","commit_id":"be268ccfb0cf8a808f9cc4c00e701b3c7cbb315b"}]}
