)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ed2973cdd4d7e2749a814c5fd24e44a8e104fc14","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This proposes the newest attempt to get to consistent metadata"},{"line_number":10,"context_line":"handling in Nova given differences in backend storage."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I6083ce789a26e8ce4073ae887f1df2071dd03054"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a122d0e_184f5c6b","line":11,"updated":"2016-05-03 19:28:44.000000000","message":"You need the APIImpact tag on this, brosef.","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"}],"specs/newton/approved/lowercase-metadata-keys.rst":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0a02c6b19ecb71022a390f01ce8f4287262a3f3b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Problem description"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Metadata keys throughout Nova (as used by aggregates, servers, flavors"},{"line_number":21,"context_line":"extra specs). They get stored with various levels of restrictions."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* aggregate metadata - ^[a-zA-Z0-9-_:. ]{1,255}$\u0027 (with the allowance"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_15c24253","line":20,"updated":"2016-05-05 04:36:29.000000000","message":"Should this read \"metadata keys are used throughout Nova\"?","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"50216cc22789eadd47a150a4fff8f5bd60fa1a05","unresolved":false,"context_lines":[{"line_number":23,"context_line":"* aggregate metadata - ^[a-zA-Z0-9-_:. ]{1,255}$\u0027 (with the allowance"},{"line_number":24,"context_line":"  it can be null) [#f1]_"},{"line_number":25,"context_line":"* server metadata - ^[a-zA-Z0-9-_:. ]{1,255}$\u0027 [#f2]_"},{"line_number":26,"context_line":"* flavors extra specs - ^[a-zA-Z0-9-_:. ]{1,255}$\u0027 [#f3]_ (but also"},{"line_number":27,"context_line":"  can be cast as a number, which is probably a bug in failing to"},{"line_number":28,"context_line":"  understand jsonschema)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"All of these lead to issues because the default storage with MySQL is"},{"line_number":31,"context_line":"case *insensitive*. This leads to bugs of the following type:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_943dd4df","line":28,"range":{"start_line":26,"start_character":59,"end_line":28,"end_character":23},"updated":"2016-05-04 15:04:32.000000000","message":"Yeah I noticed that too yesterday, that it was defined separately for extra specs rather than re-using the global regex for metadata that\u0027s in the parameters.py file.","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"50216cc22789eadd47a150a4fff8f5bd60fa1a05","unresolved":false,"context_lines":[{"line_number":51,"context_line":"select / delete / update in python to make up for the case"},{"line_number":52,"context_line":"insensitivity issues."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"in the Flavors Extra Specs case we get yet a third behavior:"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"1. Add key \u0027foo\u0027"},{"line_number":57,"context_line":"2. Add key \u0027Foo\u0027"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_34068020","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":2},"updated":"2016-05-04 15:04:32.000000000","message":"nit: s/in/In/","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c1c55f738fc03e1b5231e724f4d267624c931b9a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"Use Cases"},{"line_number":62,"context_line":"---------"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"As a user of metadata in the Nova API I would like a guarunteeded get"},{"line_number":65,"context_line":"/ set that works the same regardless of backend database."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_6e22dca4","line":64,"range":{"start_line":64,"start_character":53,"end_line":64,"end_character":65},"updated":"2016-05-04 17:48:42.000000000","message":"guaranteed","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0a02c6b19ecb71022a390f01ce8f4287262a3f3b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"Use Cases"},{"line_number":62,"context_line":"---------"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"As a user of metadata in the Nova API I would like a guarunteeded get"},{"line_number":65,"context_line":"/ set that works the same regardless of backend database."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_f5a3469c","line":64,"in_reply_to":"1a122d0e_6e22dca4","updated":"2016-05-05 04:36:29.000000000","message":"I prefer \"guarunteeded\", it has a certain ring to it.","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8bd7af75228630b8382bd292dfcae849ee7b05c9","unresolved":false,"context_lines":[{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Create an API microversion after which point we make the metadata"},{"line_number":71,"context_line":"definition be \u0027^[a-z0-9-_:. ]{1,255}$\u0027, dropping support for uppercase"},{"line_number":72,"context_line":"ascii characters."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Update documentation to say that\u0027s all that is supported."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_1bc27153","line":71,"range":{"start_line":71,"start_character":14,"end_line":71,"end_character":38},"updated":"2016-05-05 06:42:54.000000000","message":"This breaks the AggregateInstanceExtraSpecsFilter, it supports some operate method in the flavor extra spec: https://github.com/openstack/nova/blob/master/nova/scheduler/filters/extra_specs_ops.py#L18\n\nJust found the servers tag is case sensitive also :( Should we feed back to api-wg?","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b0de6ceff33c0bf845f03c83d27796fe68f90ea7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Create an API microversion after which point we make the metadata"},{"line_number":71,"context_line":"definition be \u0027^[a-z0-9-_:. ]{1,255}$\u0027, dropping support for uppercase"},{"line_number":72,"context_line":"ascii characters."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Update documentation to say that\u0027s all that is supported."}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_21d06353","line":71,"range":{"start_line":71,"start_character":14,"end_line":71,"end_character":38},"in_reply_to":"1a122d0e_1bc27153","updated":"2016-05-06 11:48:24.000000000","message":"Can you put together a test case for what you think is going to fail after this change? I\u0027m having a hard time sorting out what we believe this might be because those characters already aren\u0027t in the validation criteria.\n\nWe should probably fix server tags as well, case sensitivity in tags is a problem.","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":10962,"name":"David Bingham","email":"dbingham@godaddy.com","username":"wwriverrat"},"change_message_id":"0a475f72f0e310ef3ad19d6d77e220717a2295f7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Create an API microversion after which point we make the metadata"},{"line_number":71,"context_line":"definition be \u0027^[a-z0-9-_:. ]{1,255}$\u0027, dropping support for uppercase"},{"line_number":72,"context_line":"ascii characters."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Update documentation to say that\u0027s all that is supported."}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_ca8a8363","line":71,"range":{"start_line":71,"start_character":14,"end_line":71,"end_character":38},"in_reply_to":"dab17558_1391309a","updated":"2016-05-11 17:08:52.000000000","message":"Only characters I\u0027d add some concern for allowing within this regex is the space character and possibly colon. Only because these keys can show up in REST calls and would require escaping the key within the url in order to GET/PUT/etc the value directly by its key. While not too difficult to escape, it might lead to similar bugs as you have shown in this spec when users don\u0027t know how to properly escape the key. (I pre-apologize if this has already been hashed out in earlier reviews)","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f100ac53f3eac43f4718d434a67817d0b19bfa43","unresolved":false,"context_lines":[{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Create an API microversion after which point we make the metadata"},{"line_number":71,"context_line":"definition be \u0027^[a-z0-9-_:. ]{1,255}$\u0027, dropping support for uppercase"},{"line_number":72,"context_line":"ascii characters."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Update documentation to say that\u0027s all that is supported."}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_7cacd2ed","line":71,"range":{"start_line":71,"start_character":14,"end_line":71,"end_character":38},"in_reply_to":"dab17558_21d06353","updated":"2016-05-06 11:53:23.000000000","message":"Good point, thinking about this, I think they are actually in the values, not in the keys.","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5322f5b11acc31e9b78d874f18097422e287e735","unresolved":false,"context_lines":[{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Create an API microversion after which point we make the metadata"},{"line_number":71,"context_line":"definition be \u0027^[a-z0-9-_:. ]{1,255}$\u0027, dropping support for uppercase"},{"line_number":72,"context_line":"ascii characters."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Update documentation to say that\u0027s all that is supported."}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_1391309a","line":71,"range":{"start_line":71,"start_character":14,"end_line":71,"end_character":38},"in_reply_to":"dab17558_7cacd2ed","updated":"2016-05-06 14:30:41.000000000","message":"I miss that, the regex is just for the key, not the value.\n\nFor tags, it haven\u0027t the bug like metadata.  Just think case sensitivity isn\u0027t useful use-case. But it works anyway.","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":16308,"name":"Sheel Rana","email":"ranasheel2000@gmail.com","username":"sheel.rana"},"change_message_id":"e7a31f6cabe4c9fa0d404574faac47075636e097","unresolved":false,"context_lines":[{"line_number":74,"context_line":"Update documentation to say that\u0027s all that is supported."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"In requests before the microversion we will not change behavior,"},{"line_number":77,"context_line":"however we will also close all bugs related to this as Won\u0027t Fix."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"A `nova-manage` command for auditing and squashing existing metadata"},{"line_number":80,"context_line":"keys into the new storage format will be provided. This will be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_4ee8c016","line":77,"updated":"2016-05-04 17:43:05.000000000","message":"I would like to have second opinion for fixing https://bugs.launchpad.net/nova/+bug/1535224 with\nhttps://review.openstack.org/#/c/285222/1/nova/db/sqlalchemy/api.py\n\nThough this fix makes one extra db call to fetch metadata id, but that should be better to fix than not fixing in existing behavior. Also metadata operations are very less in frequency so one extra db call might be ok...\n\nIts just an opinion from to get more views...\n(I am sure I missed previous discussions)","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b0de6ceff33c0bf845f03c83d27796fe68f90ea7","unresolved":false,"context_lines":[{"line_number":74,"context_line":"Update documentation to say that\u0027s all that is supported."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"In requests before the microversion we will not change behavior,"},{"line_number":77,"context_line":"however we will also close all bugs related to this as Won\u0027t Fix."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"A `nova-manage` command for auditing and squashing existing metadata"},{"line_number":80,"context_line":"keys into the new storage format will be provided. This will be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_81ce6f58","line":77,"in_reply_to":"1a122d0e_4ee8c016","updated":"2016-05-06 11:48:24.000000000","message":"This ends up being the whack-a-mole approach, and keeps requiring more complicated fixes in python.","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8bd7af75228630b8382bd292dfcae849ee7b05c9","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Aggregates"},{"line_number":87,"context_line":"* Flavors Extra Specs"},{"line_number":88,"context_line":"* Instances (servers) (all actions unless otherwise specified)"},{"line_number":89,"context_line":"* Instances metadata direct set / get"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"The following parts of the API will not be changed:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_3eb63b3e","line":88,"range":{"start_line":88,"start_character":2,"end_line":88,"end_character":62},"updated":"2016-05-05 06:42:54.000000000","message":"I didn\u0027t get what is this point to?","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b0de6ceff33c0bf845f03c83d27796fe68f90ea7","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Aggregates"},{"line_number":87,"context_line":"* Flavors Extra Specs"},{"line_number":88,"context_line":"* Instances (servers) (all actions unless otherwise specified)"},{"line_number":89,"context_line":"* Instances metadata direct set / get"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"The following parts of the API will not be changed:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_61b0abde","line":88,"range":{"start_line":88,"start_character":2,"end_line":88,"end_character":62},"in_reply_to":"1a122d0e_3eb63b3e","updated":"2016-05-06 11:48:24.000000000","message":"All modifications of instances that take metadata (except the ones listed below).","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"50216cc22789eadd47a150a4fff8f5bd60fa1a05","unresolved":false,"context_lines":[{"line_number":101,"context_line":"Alternatives"},{"line_number":102,"context_line":"------------"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":".. courtesy of jpenick"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"* Firey ball of suck"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_d71aae17","line":104,"updated":"2016-05-04 15:04:32.000000000","message":"ha","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c1c55f738fc03e1b5231e724f4d267624c931b9a","unresolved":false,"context_lines":[{"line_number":157,"context_line":"Other deployer impact"},{"line_number":158,"context_line":"---------------------"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"There will now be metadata keys that won\u0027t be accessable via the API"},{"line_number":161,"context_line":"after the microversion. If other items such as scheduler filters or"},{"line_number":162,"context_line":"higher level orchestration trigger off these values there may need to"},{"line_number":163,"context_line":"be changes to them."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_0edb681c","line":160,"range":{"start_line":160,"start_character":37,"end_line":160,"end_character":68},"updated":"2016-05-04 17:48:42.000000000","message":"Does schema validation occur on get requests too? I thought things would continue to work unless \u0027nova-manage\u0027 squash has been used.","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"67f5d118e67aa90cacb28bf51200544cd6964353","unresolved":false,"context_lines":[{"line_number":157,"context_line":"Other deployer impact"},{"line_number":158,"context_line":"---------------------"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"There will now be metadata keys that won\u0027t be accessable via the API"},{"line_number":161,"context_line":"after the microversion. If other items such as scheduler filters or"},{"line_number":162,"context_line":"higher level orchestration trigger off these values there may need to"},{"line_number":163,"context_line":"be changes to them."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_8925b25d","line":160,"range":{"start_line":160,"start_character":37,"end_line":160,"end_character":68},"in_reply_to":"1a122d0e_0edb681c","updated":"2016-05-04 18:04:58.000000000","message":"I think this just means you can\u0027t use things that don\u0027t fit the regex when using the new microversion.","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b0de6ceff33c0bf845f03c83d27796fe68f90ea7","unresolved":false,"context_lines":[{"line_number":157,"context_line":"Other deployer impact"},{"line_number":158,"context_line":"---------------------"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"There will now be metadata keys that won\u0027t be accessable via the API"},{"line_number":161,"context_line":"after the microversion. If other items such as scheduler filters or"},{"line_number":162,"context_line":"higher level orchestration trigger off these values there may need to"},{"line_number":163,"context_line":"be changes to them."}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_e12f7b9f","line":160,"range":{"start_line":160,"start_character":37,"end_line":160,"end_character":68},"in_reply_to":"1a122d0e_8925b25d","updated":"2016-05-06 11:48:24.000000000","message":"Right, you potentially be able to UPDATE or DELETE these keys in the API. We\u0027ll return the data still.","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c1c55f738fc03e1b5231e724f4d267624c931b9a","unresolved":false,"context_lines":[{"line_number":158,"context_line":"---------------------"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"There will now be metadata keys that won\u0027t be accessable via the API"},{"line_number":161,"context_line":"after the microversion. If other items such as scheduler filters or"},{"line_number":162,"context_line":"higher level orchestration trigger off these values there may need to"},{"line_number":163,"context_line":"be changes to them."},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a122d0e_2ebc64da","line":161,"range":{"start_line":161,"start_character":47,"end_line":161,"end_character":64},"updated":"2016-05-04 17:48:42.000000000","message":"I thought scheduler filters should continue to work unless the operator has \u0027nova-manage\u0027 squashed their keys.","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b0de6ceff33c0bf845f03c83d27796fe68f90ea7","unresolved":false,"context_lines":[{"line_number":158,"context_line":"---------------------"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"There will now be metadata keys that won\u0027t be accessable via the API"},{"line_number":161,"context_line":"after the microversion. If other items such as scheduler filters or"},{"line_number":162,"context_line":"higher level orchestration trigger off these values there may need to"},{"line_number":163,"context_line":"be changes to them."},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"dab17558_41176751","line":161,"range":{"start_line":161,"start_character":47,"end_line":161,"end_character":64},"in_reply_to":"1a122d0e_2ebc64da","updated":"2016-05-06 11:48:24.000000000","message":"Depending on what crazy schedule filters and matching people have built locally.","commit_id":"7e7999c226e6282a0fea2db75c4b97b7f502e8f2"}],"specs/newton/approved/lowercase_metadata_keys_only.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/lowercase-metadata-keys"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change API validation to require metadata keys are only lower case"},{"line_number":14,"context_line":"ascii with a limited number of symbols to ensure consistent opperation"},{"line_number":15,"context_line":"regardless of database backend."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_a94a5c25","line":14,"range":{"start_line":14,"start_character":60,"end_line":14,"end_character":70},"updated":"2016-05-03 21:24:00.000000000","message":"operation","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"de25a8f813168102170ebcb7029a122c35b2e237","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/lowercase-metadata-keys"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change API validation to require metadata keys are only lower case"},{"line_number":14,"context_line":"ascii with a limited number of symbols to ensure consistent opperation"},{"line_number":15,"context_line":"regardless of database backend."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_f30b8c7b","line":14,"range":{"start_line":14,"start_character":60,"end_line":14,"end_character":70},"in_reply_to":"1a122d0e_a94a5c25","updated":"2016-05-04 13:20:54.000000000","message":"Done","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Problem description"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Metadata keys throughout Nova (as used by aggregates, flavors) have no"},{"line_number":21,"context_line":"restrictions on their content. Then end up stored in a database as"},{"line_number":22,"context_line":"columns. By default, MySQL does case *insensitive* equality. This"},{"line_number":23,"context_line":"leads to bugs of the following type:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_29b5accf","line":20,"range":{"start_line":20,"start_character":54,"end_line":20,"end_character":61},"updated":"2016-05-03 21:24:00.000000000","message":"Do you mean flavor extra specs here? I think so, but just checking.","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"de25a8f813168102170ebcb7029a122c35b2e237","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Problem description"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Metadata keys throughout Nova (as used by aggregates, flavors) have no"},{"line_number":21,"context_line":"restrictions on their content. Then end up stored in a database as"},{"line_number":22,"context_line":"columns. By default, MySQL does case *insensitive* equality. This"},{"line_number":23,"context_line":"leads to bugs of the following type:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_d30e508b","line":20,"range":{"start_line":20,"start_character":54,"end_line":20,"end_character":61},"in_reply_to":"1a122d0e_29b5accf","updated":"2016-05-04 13:20:54.000000000","message":"Done","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":55,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Create an API microversion after which point only a lower case ascii"},{"line_number":58,"context_line":"string (also including the characters \u0027-\u0027, \u0027_\u0027, \u0027:\u0027) can be used as a"},{"line_number":59,"context_line":"key value. This will be enforced by the jsonschema validation"},{"line_number":60,"context_line":"extremely early in the API call."},{"line_number":61,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_a9cd3c88","line":58,"updated":"2016-05-03 21:24:00.000000000","message":"Also, numbers.\n\nToday we have:\n\nhttps://github.com/openstack/nova/blob/9ad3dad0c6ab868566e74f0c35a5375d4eaad560/nova/api/validation/parameter_types.py#L309\n\n  ^[a-zA-Z0-9-_:. ]{1,255}$\n\nI\u0027d probably just be specific and say we\u0027ll change to this:\n\n  ^[a-z0-9-_:. ]{1,255}$","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"de25a8f813168102170ebcb7029a122c35b2e237","unresolved":false,"context_lines":[{"line_number":55,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Create an API microversion after which point only a lower case ascii"},{"line_number":58,"context_line":"string (also including the characters \u0027-\u0027, \u0027_\u0027, \u0027:\u0027) can be used as a"},{"line_number":59,"context_line":"key value. This will be enforced by the jsonschema validation"},{"line_number":60,"context_line":"extremely early in the API call."},{"line_number":61,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_1321e8fc","line":58,"in_reply_to":"1a122d0e_a9cd3c88","updated":"2016-05-04 13:20:54.000000000","message":"Done","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":64,"context_line":"In requests before the microversion we will not change behavior,"},{"line_number":65,"context_line":"however we will also close all bugs related to this as Won\u0027t Fix."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"A nova manage command for auditing and squashing existing metadata"},{"line_number":68,"context_line":"keys into the new storage format will be provided."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"The following resources use metadata and fall victim to this:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_4937484d","line":67,"range":{"start_line":67,"start_character":39,"end_line":67,"end_character":66},"updated":"2016-05-03 21:24:00.000000000","message":"If we squash metadata via a CLI, we might need to adjust quota usage for metadata unless it gets refreshed on the next usage/check. See quota_metadata_items.\n\nJust a note, but we should probably point that out in the spec so we don\u0027t forget about it.","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":64,"context_line":"In requests before the microversion we will not change behavior,"},{"line_number":65,"context_line":"however we will also close all bugs related to this as Won\u0027t Fix."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"A nova manage command for auditing and squashing existing metadata"},{"line_number":68,"context_line":"keys into the new storage format will be provided."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"The following resources use metadata and fall victim to this:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_69aa0487","line":67,"range":{"start_line":67,"start_character":2,"end_line":67,"end_character":13},"updated":"2016-05-03 21:24:00.000000000","message":"nit: nova-manage","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"de25a8f813168102170ebcb7029a122c35b2e237","unresolved":false,"context_lines":[{"line_number":64,"context_line":"In requests before the microversion we will not change behavior,"},{"line_number":65,"context_line":"however we will also close all bugs related to this as Won\u0027t Fix."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"A nova manage command for auditing and squashing existing metadata"},{"line_number":68,"context_line":"keys into the new storage format will be provided."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"The following resources use metadata and fall victim to this:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_33f8647c","line":67,"range":{"start_line":67,"start_character":39,"end_line":67,"end_character":66},"in_reply_to":"1a122d0e_4937484d","updated":"2016-05-04 13:20:54.000000000","message":"Done","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"de25a8f813168102170ebcb7029a122c35b2e237","unresolved":false,"context_lines":[{"line_number":64,"context_line":"In requests before the microversion we will not change behavior,"},{"line_number":65,"context_line":"however we will also close all bugs related to this as Won\u0027t Fix."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"A nova manage command for auditing and squashing existing metadata"},{"line_number":68,"context_line":"keys into the new storage format will be provided."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"The following resources use metadata and fall victim to this:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_13f3a8a0","line":67,"range":{"start_line":67,"start_character":2,"end_line":67,"end_character":13},"in_reply_to":"1a122d0e_69aa0487","updated":"2016-05-04 13:20:54.000000000","message":"Done","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":67,"context_line":"A nova manage command for auditing and squashing existing metadata"},{"line_number":68,"context_line":"keys into the new storage format will be provided."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"The following resources use metadata and fall victim to this:"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"* Aggregates"},{"line_number":73,"context_line":"* Instances (servers) (all actions unless otherwise specified)"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_89cb204a","line":70,"updated":"2016-05-03 21:24:00.000000000","message":"Wouldn\u0027t flavors be in this list for flavor extra specs? Yeah:\n\nhttps://github.com/openstack/nova/blob/9ad3dad0c6ab868566e74f0c35a5375d4eaad560/nova/api/openstack/compute/schemas/flavors_extraspecs.py#L27","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"de25a8f813168102170ebcb7029a122c35b2e237","unresolved":false,"context_lines":[{"line_number":67,"context_line":"A nova manage command for auditing and squashing existing metadata"},{"line_number":68,"context_line":"keys into the new storage format will be provided."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"The following resources use metadata and fall victim to this:"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"* Aggregates"},{"line_number":73,"context_line":"* Instances (servers) (all actions unless otherwise specified)"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_d3001069","line":70,"in_reply_to":"1a122d0e_89cb204a","updated":"2016-05-04 13:20:54.000000000","message":"yeh, it was mapped a little funny in the API, got it now","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":72,"context_line":"* Aggregates"},{"line_number":73,"context_line":"* Instances (servers) (all actions unless otherwise specified)"},{"line_number":74,"context_line":"* Instances metadata direct set / get"},{"line_number":75,"context_line":"* Server groups"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"The following parts of the API will not be changed:"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_499bc866","line":75,"updated":"2016-05-03 21:24:00.000000000","message":"Where is this defined? I don\u0027t see it in the data model.\n\nLooks like this is why it came up:\n\nhttps://github.com/openstack/nova/blob/9ad3dad0c6ab868566e74f0c35a5375d4eaad560/nova/api/openstack/compute/server_groups.py#L59-L61","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"de25a8f813168102170ebcb7029a122c35b2e237","unresolved":false,"context_lines":[{"line_number":72,"context_line":"* Aggregates"},{"line_number":73,"context_line":"* Instances (servers) (all actions unless otherwise specified)"},{"line_number":74,"context_line":"* Instances metadata direct set / get"},{"line_number":75,"context_line":"* Server groups"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"The following parts of the API will not be changed:"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_333fc426","line":75,"in_reply_to":"1a122d0e_499bc866","updated":"2016-05-04 13:20:54.000000000","message":"It\u0027s listed in the API docs, but apparently incorrectly. Fixed.","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":87,"context_line":"Alternatives"},{"line_number":88,"context_line":"------------"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"* Firey ball of suck"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  Just keep glomming on more python hot fixes to try to approximate"},{"line_number":93,"context_line":"  the behavior we want. This is unlikely to really converge to the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_c9f6b85c","line":90,"updated":"2016-05-03 21:24:00.000000000","message":"Dude, you have to give author credit to jpenick for this. :)\n\nAlthough I think the proper quote was \"fireball of suck\".","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":96,"context_line":"* Force consistent behavior in database"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"  We could force MySQL to be case sensitive here which would remove a"},{"line_number":99,"context_line":"  class of stack traces. However the becomes a potentially expensive"},{"line_number":100,"context_line":"  migration, and means we have to care about all potential backends"},{"line_number":101,"context_line":"  behaving correctly"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_29bbec76","line":99,"range":{"start_line":99,"start_character":33,"end_line":99,"end_character":36},"updated":"2016-05-03 21:24:00.000000000","message":"that","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"de25a8f813168102170ebcb7029a122c35b2e237","unresolved":false,"context_lines":[{"line_number":96,"context_line":"* Force consistent behavior in database"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"  We could force MySQL to be case sensitive here which would remove a"},{"line_number":99,"context_line":"  class of stack traces. However the becomes a potentially expensive"},{"line_number":100,"context_line":"  migration, and means we have to care about all potential backends"},{"line_number":101,"context_line":"  behaving correctly"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_b31114b2","line":99,"range":{"start_line":99,"start_character":33,"end_line":99,"end_character":36},"in_reply_to":"1a122d0e_29bbec76","updated":"2016-05-04 13:20:54.000000000","message":"Done","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":140,"context_line":"higher level orchestration trigger off these values there may need to"},{"line_number":141,"context_line":"be changes to them."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"A nova-manage command should be provided to audit and fold old keys"},{"line_number":144,"context_line":"into this new key structure."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_cdfd230a","line":143,"updated":"2016-05-03 21:24:00.000000000","message":"Would we force deployers to run this folding command before they can migrate to Ocata like we\u0027d enforced with some other things?","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b5b1ce3adc09f788d5786298953bdfa295ce451","unresolved":false,"context_lines":[{"line_number":140,"context_line":"higher level orchestration trigger off these values there may need to"},{"line_number":141,"context_line":"be changes to them."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"A nova-manage command should be provided to audit and fold old keys"},{"line_number":144,"context_line":"into this new key structure."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_7478f8f8","line":143,"in_reply_to":"1a122d0e_6e6cb39c","updated":"2016-05-04 14:53:41.000000000","message":"Yeah, good point. Tarnation!","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"de25a8f813168102170ebcb7029a122c35b2e237","unresolved":false,"context_lines":[{"line_number":140,"context_line":"higher level orchestration trigger off these values there may need to"},{"line_number":141,"context_line":"be changes to them."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"A nova-manage command should be provided to audit and fold old keys"},{"line_number":144,"context_line":"into this new key structure."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_6e6cb39c","line":143,"in_reply_to":"1a122d0e_cdfd230a","updated":"2016-05-04 13:20:54.000000000","message":"As long as we leave the old API around, I don\u0027t think we can do that, because people can still insert the bad data.","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":167,"context_line":"  by asking on the operator list."},{"line_number":168,"context_line":"* Implement jsonschema using this new validation rule for a new"},{"line_number":169,"context_line":"  microversion for the resources listed above."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"Dependencies"},{"line_number":173,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_6d17af45","line":170,"updated":"2016-05-03 21:24:00.000000000","message":"Plus the nova-manage command and docs updates. Maybe that\u0027s implied.","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":194,"context_line":"* Mailing list discussion on this bug -"},{"line_number":195,"context_line":"  http://lists.openstack.org/pipermail/openstack-dev/2016-February/087404.html"},{"line_number":196,"context_line":"* Etherpad from Newton Summit -"},{"line_number":197,"context_line":"  https://etherpad.openstack.org/p/newton-nova-summit-unconference"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"History"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_29e80c16","line":197,"updated":"2016-05-03 21:24:00.000000000","message":"We actually talked about this on Friday in the meetup:\n\nhttps://etherpad.openstack.org/p/newton-nova-meetup\n\nBut it\u0027s duplicated from the unconference etherpad, so either is fine.","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":200,"context_line":"History"},{"line_number":201,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Optional section for Mitaka intended to be used each time the spec"},{"line_number":204,"context_line":"is updated to describe new design, API or any database schema"},{"line_number":205,"context_line":"updated. Useful to let reader understand what\u0027s happened along the"},{"line_number":206,"context_line":"time."},{"line_number":207,"context_line":""},{"line_number":208,"context_line":".. list-table:: Revisions"},{"line_number":209,"context_line":"   :header-rows: 1"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_89d7a04e","line":206,"range":{"start_line":203,"start_character":0,"end_line":206,"end_character":5},"updated":"2016-05-03 21:24:00.000000000","message":"Remove this template text, plus it talks about Mitaka.","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14082746385dfa767232e03be82e226bbd09fd30","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"   * - Release Name"},{"line_number":212,"context_line":"     - Description"},{"line_number":213,"context_line":"   * - Mitaka"},{"line_number":214,"context_line":"     - Introduced"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a122d0e_29cf6cb4","line":213,"range":{"start_line":213,"start_character":7,"end_line":213,"end_character":13},"updated":"2016-05-03 21:24:00.000000000","message":"Newton","commit_id":"576d7fd5d709df4d1bcbc3f5936799422bc0473c"}]}
