)]}'
{"neutron/db/migration/README":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4b3154429d91ced034d878e103645700459804cc","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The migrations in the alembic/versions contain the changes needed to migrate"},{"line_number":16,"context_line":"from older Neutron releases to newer versions. A migration occurs by executing"},{"line_number":17,"context_line":"a script that details the changes needed to upgrade/downgrade the database. The"},{"line_number":18,"context_line":"migration scripts are ordered so that multiple scripts can run sequentially to"},{"line_number":19,"context_line":"update the database. The scripts are executed by Neutron\u0027s migration wrapper"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"9a80dd14_2f6e6d96","line":16,"updated":"2015-03-20 18:51:51.000000000","message":"kill downgrade notion here","commit_id":"a40b6be836156e06a93d37fdcbc89610bc0f6673"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"058aa32c465aacacd5e267dfd195433caf6a5bed","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The migrations in the alembic/versions contain the changes needed to migrate"},{"line_number":16,"context_line":"from older Neutron releases to newer versions. A migration occurs by executing"},{"line_number":17,"context_line":"a script that details the changes needed to upgrade/downgrade the database. The"},{"line_number":18,"context_line":"migration scripts are ordered so that multiple scripts can run sequentially to"},{"line_number":19,"context_line":"update the database. The scripts are executed by Neutron\u0027s migration wrapper"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"9a80dd14_8a002702","line":16,"in_reply_to":"9a80dd14_2f6e6d96","updated":"2015-03-20 19:11:25.000000000","message":"You searched for \u0027downgrade\u0027 didn\u0027t you? Why didn\u0027t I do that? :)","commit_id":"a40b6be836156e06a93d37fdcbc89610bc0f6673"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4b3154429d91ced034d878e103645700459804cc","unresolved":false,"context_lines":[{"line_number":54,"context_line":"DEVELOPERS:"},{"line_number":55,"context_line":"A database migration script is required when you submit a change to Neutron"},{"line_number":56,"context_line":"that alters the database model definition.  The migration script is a special"},{"line_number":57,"context_line":"python file that includes code to update/downgrade the database to match the"},{"line_number":58,"context_line":"changes in the model definition. Alembic will execute these scripts in order to"},{"line_number":59,"context_line":"provide a linear migration path between revision. The neutron-db-manage command"},{"line_number":60,"context_line":"can be used to generate migration template for you to complete.  The operations"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"9a80dd14_ef0ff5dd","line":57,"updated":"2015-03-20 18:51:51.000000000","message":"ditto","commit_id":"a40b6be836156e06a93d37fdcbc89610bc0f6673"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4b3154429d91ced034d878e103645700459804cc","unresolved":false,"context_lines":[{"line_number":69,"context_line":"database state with the models.  You should inspect the autogenerated template"},{"line_number":70,"context_line":"to ensure that the proper models have been altered."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"In rare circumstances, you may want to start with an empty migration template"},{"line_number":73,"context_line":"and manually author the changes necessary for an upgrade/downgrade.  You can"},{"line_number":74,"context_line":"create a blank file via:"},{"line_number":75,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":5,"id":"9a80dd14_2ff58dca","line":72,"updated":"2015-03-20 18:51:51.000000000","message":"ditto","commit_id":"a40b6be836156e06a93d37fdcbc89610bc0f6673"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4b3154429d91ced034d878e103645700459804cc","unresolved":false,"context_lines":[{"line_number":77,"context_line":"--config-file /path/to/plugin/config.ini revision \\"},{"line_number":78,"context_line":"-m \"description of revision\""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"The migration timeline should remain linear so that there is a clear path when"},{"line_number":81,"context_line":"upgrading/downgrading.  To verify that the timeline does branch, you can run"},{"line_number":82,"context_line":"this command:"},{"line_number":83,"context_line":"$ neutron-db-manage --config-file /path/to/neutron.conf \\"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"9a80dd14_6ffb05be","line":80,"updated":"2015-03-20 18:51:51.000000000","message":"ditto","commit_id":"a40b6be836156e06a93d37fdcbc89610bc0f6673"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"d23a50bb0241b51e47a4045629a7c79dcb5c2859","unresolved":false,"context_lines":[{"line_number":18,"context_line":"scripts are ordered so that multiple scripts can run sequentially to update the"},{"line_number":19,"context_line":"database. The scripts are executed by Neutron\u0027s migration wrapper which uses"},{"line_number":20,"context_line":"the Alembic library to manage the migration.  Neutron supports migration from"},{"line_number":21,"context_line":"Folsom or later."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"If you are a deployer or developer and want to migrate from Folsom to Grizzly"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"1a6ced46_a2124b56","line":21,"updated":"2015-03-22 22:27:34.000000000","message":"just found out this should be Havana, not Folsom... but it does not matter for your patch","commit_id":"d91cec7a284068e550c67222a01f7d104f941cec"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"80acfdfbe5446252f2ffeabb4ae7278a6ff803a6","unresolved":false,"context_lines":[{"line_number":18,"context_line":"scripts are ordered so that multiple scripts can run sequentially to update the"},{"line_number":19,"context_line":"database. The scripts are executed by Neutron\u0027s migration wrapper which uses"},{"line_number":20,"context_line":"the Alembic library to manage the migration.  Neutron supports migration from"},{"line_number":21,"context_line":"Folsom or later."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"If you are a deployer or developer and want to migrate from Folsom to Grizzly"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"1a6ced46_c2f4a789","line":21,"in_reply_to":"1a6ced46_a2124b56","updated":"2015-03-23 00:51:54.000000000","message":"Done","commit_id":"d91cec7a284068e550c67222a01f7d104f941cec"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"d23a50bb0241b51e47a4045629a7c79dcb5c2859","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"A database migration script is required when you submit a change to Neutron"},{"line_number":57,"context_line":"that alters the database model definition.  The migration script is a special"},{"line_number":58,"context_line":"python file that includes code to update the database to match the changes in"},{"line_number":59,"context_line":"the model definition. Alembic will execute these scripts in order to provide a"},{"line_number":60,"context_line":"linear migration path between revision. The neutron-db-manage command can be"},{"line_number":61,"context_line":"used to generate migration template for you to complete.  The operations in the"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"1a6ced46_c20f472d","line":58,"updated":"2015-03-22 22:27:34.000000000","message":"update should be upgrade... but this does not matter either!","commit_id":"d91cec7a284068e550c67222a01f7d104f941cec"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"80acfdfbe5446252f2ffeabb4ae7278a6ff803a6","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"A database migration script is required when you submit a change to Neutron"},{"line_number":57,"context_line":"that alters the database model definition.  The migration script is a special"},{"line_number":58,"context_line":"python file that includes code to update the database to match the changes in"},{"line_number":59,"context_line":"the model definition. Alembic will execute these scripts in order to provide a"},{"line_number":60,"context_line":"linear migration path between revision. The neutron-db-manage command can be"},{"line_number":61,"context_line":"used to generate migration template for you to complete.  The operations in the"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"1a6ced46_e2f1a396","line":58,"in_reply_to":"1a6ced46_c20f472d","updated":"2015-03-23 00:51:54.000000000","message":"Done","commit_id":"d91cec7a284068e550c67222a01f7d104f941cec"}],"neutron/db/migration/cli.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0ebf957addb9d23619bdee7320e7d5858de7dbb9","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    revision \u003d CONF.command.revision"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    if CONF.command.delta:"},{"line_number":89,"context_line":"        sign \u003d \u0027+\u0027 if CONF.command.name \u003d\u003d \u0027upgrade\u0027 else \u0027-\u0027"},{"line_number":90,"context_line":"        revision \u003d sign + str(CONF.command.delta)"},{"line_number":91,"context_line":"    if not CONF.command.sql:"},{"line_number":92,"context_line":"        run_sanity_checks(config, revision)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_c73eda28","line":89,"updated":"2015-03-19 14:11:04.000000000","message":"Oops. I think I can simplify this too.","commit_id":"987b438cf25666fa0caebae50ce5aedbebcf2bc1"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"d23a50bb0241b51e47a4045629a7c79dcb5c2859","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    delta \u003d CONF.command.delta"},{"line_number":92,"context_line":"    if delta:"},{"line_number":93,"context_line":"        delta \u003d str(delta)"},{"line_number":94,"context_line":"        if delta.startswith(\u0027-\u0027):"},{"line_number":95,"context_line":"            raise SystemExit(_(\u0027Negative delta (downgrade) not supported\u0027))"},{"line_number":96,"context_line":"        revision \u003d \u0027+\u0027 + delta"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_82254fad","line":93,"updated":"2015-03-22 22:27:34.000000000","message":"delta is an integer... why did you had to convert to string and then check the first char?\n\nI would have done:\n\nif delta \u003c 0:\n    raise SystemExit(\"...\")\n\nI\u0027m pretty sure you  have a good reason for doing so, but it\u0027s better to double check.\nAlso, looking at the previous logic delta was supposed to be always an absolute number, I think","commit_id":"d91cec7a284068e550c67222a01f7d104f941cec"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"80acfdfbe5446252f2ffeabb4ae7278a6ff803a6","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    delta \u003d CONF.command.delta"},{"line_number":92,"context_line":"    if delta:"},{"line_number":93,"context_line":"        delta \u003d str(delta)"},{"line_number":94,"context_line":"        if delta.startswith(\u0027-\u0027):"},{"line_number":95,"context_line":"            raise SystemExit(_(\u0027Negative delta (downgrade) not supported\u0027))"},{"line_number":96,"context_line":"        revision \u003d \u0027+\u0027 + delta"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_a2888bc7","line":93,"in_reply_to":"1a6ced46_82254fad","updated":"2015-03-23 00:51:54.000000000","message":"I had only a bad reason.","commit_id":"d91cec7a284068e550c67222a01f7d104f941cec"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"80acfdfbe5446252f2ffeabb4ae7278a6ff803a6","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        delta \u003d str(delta)"},{"line_number":94,"context_line":"        if delta.startswith(\u0027-\u0027):"},{"line_number":95,"context_line":"            raise SystemExit(_(\u0027Negative delta (downgrade) not supported\u0027))"},{"line_number":96,"context_line":"        revision \u003d \u0027+\u0027 + delta"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    if not CONF.command.sql:"},{"line_number":99,"context_line":"        run_sanity_checks(config, revision)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_22bc9b6c","line":96,"updated":"2015-03-23 00:51:54.000000000","message":"I noticed when cleaning this up that if delta is specified then the revision is overwritten. I changed that to fail instead.","commit_id":"d91cec7a284068e550c67222a01f7d104f941cec"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ed0ab964aa4be0f24eed4ba38474d8452102aebf","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    parser.set_defaults(func\u003ddo_check_migration)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    parser \u003d subparsers.add_parser(\u0027upgrade\u0027)"},{"line_number":151,"context_line":"    parser.add_argument(\u0027--delta\u0027, type\u003dint)"},{"line_number":152,"context_line":"    parser.add_argument(\u0027--sql\u0027, action\u003d\u0027store_true\u0027)"},{"line_number":153,"context_line":"    parser.add_argument(\u0027revision\u0027, nargs\u003d\u0027?\u0027)"},{"line_number":154,"context_line":"    parser.add_argument(\u0027--mysql-engine\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6ced46_05bb290f","line":151,"updated":"2015-03-23 01:17:37.000000000","message":"I wonder if we could do away with the --delta option altogether? The revision can be used like \"+2\" or \"juno+2\" instead. I suppose the risk is that people have it in their scripts.","commit_id":"6f70bc1367893fda3392c77a70c955826355f516"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"7123d234bb7c21b77d44182f50412be9e0147fb8","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    parser.set_defaults(func\u003ddo_check_migration)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    parser \u003d subparsers.add_parser(\u0027upgrade\u0027)"},{"line_number":151,"context_line":"    parser.add_argument(\u0027--delta\u0027, type\u003dint)"},{"line_number":152,"context_line":"    parser.add_argument(\u0027--sql\u0027, action\u003d\u0027store_true\u0027)"},{"line_number":153,"context_line":"    parser.add_argument(\u0027revision\u0027, nargs\u003d\u0027?\u0027)"},{"line_number":154,"context_line":"    parser.add_argument(\u0027--mysql-engine\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6ced46_b5f8bee6","line":151,"in_reply_to":"1a6ced46_05bb290f","updated":"2015-03-23 07:15:33.000000000","message":"Yes, you are right this both \"+2\" or \"juno+2\" could be used and I agree, although the chance, that someone uses it, is small it is better to leave this as it is now, I don\u0027t see any problem with that.\n\nOnly small suggestion, but I\u0027m not sure that we really need it:\nIf I run neutron-db-manage ... downgrade -2 I\u0027ll get\n\nneutron-db-manage: error: argument command: invalid choice: \u0027downgrade\u0027 (choose from \u0027current\u0027, \u0027history\u0027, \u0027branches\u0027, \u0027check_migration\u0027, \u0027upgrade\u0027, \u0027stamp\u0027, \u0027revision\u0027)\n\nMay be add a special message for this situation that downgrade has become not supported?","commit_id":"6f70bc1367893fda3392c77a70c955826355f516"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"46299c3115aca9e30fa4748b0fed76667fc72116","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    parser.set_defaults(func\u003ddo_check_migration)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    parser \u003d subparsers.add_parser(\u0027upgrade\u0027)"},{"line_number":151,"context_line":"    parser.add_argument(\u0027--delta\u0027, type\u003dint)"},{"line_number":152,"context_line":"    parser.add_argument(\u0027--sql\u0027, action\u003d\u0027store_true\u0027)"},{"line_number":153,"context_line":"    parser.add_argument(\u0027revision\u0027, nargs\u003d\u0027?\u0027)"},{"line_number":154,"context_line":"    parser.add_argument(\u0027--mysql-engine\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6ced46_a501753b","line":151,"in_reply_to":"1a6ced46_05bb290f","updated":"2015-03-23 02:19:54.000000000","message":"the risk seems small but the code can be cleaned up is also small.\ni don\u0027t think it worth a trouble.\nhow about just marking it for deprecation?","commit_id":"6f70bc1367893fda3392c77a70c955826355f516"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"56dd88a2cfb077191f8949edbd9fe4bde02b0393","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    parser \u003d subparsers.add_parser(\u0027check_migration\u0027)"},{"line_number":148,"context_line":"    parser.set_defaults(func\u003ddo_check_migration)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    parser \u003d subparsers.add_parser(\u0027upgrade\u0027)"},{"line_number":151,"context_line":"    parser.add_argument(\u0027--delta\u0027, type\u003dint)"},{"line_number":152,"context_line":"    parser.add_argument(\u0027--sql\u0027, action\u003d\u0027store_true\u0027)"},{"line_number":153,"context_line":"    parser.add_argument(\u0027revision\u0027, nargs\u003d\u0027?\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_b8b0b3f5","line":150,"updated":"2015-03-23 07:59:57.000000000","message":"nit (and can be ignored): It is not easy to notice \"downgrade\" subcommand is no longer available from the error message. It sounds better to me that we have \u0027downgrade\u0027 subcommand and it displays a message that the downgrade is no longer supported. Sorry if it was already discussed.","commit_id":"9af24b4da63ffbd546880721bcf0c7df3fae7256"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"322a2125ffe0696c97a80ebcded9dd9f4501daf9","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    parser \u003d subparsers.add_parser(\u0027check_migration\u0027)"},{"line_number":148,"context_line":"    parser.set_defaults(func\u003ddo_check_migration)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    parser \u003d subparsers.add_parser(\u0027upgrade\u0027)"},{"line_number":151,"context_line":"    parser.add_argument(\u0027--delta\u0027, type\u003dint)"},{"line_number":152,"context_line":"    parser.add_argument(\u0027--sql\u0027, action\u003d\u0027store_true\u0027)"},{"line_number":153,"context_line":"    parser.add_argument(\u0027revision\u0027, nargs\u003d\u0027?\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_81ee1f8a","line":150,"in_reply_to":"1a6ced46_2973974e","updated":"2015-03-23 11:49:30.000000000","message":"It\u0027s a good point, thanks. Let me come up with a new patch for this.","commit_id":"9af24b4da63ffbd546880721bcf0c7df3fae7256"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"20d2f83fb5fa92bf55c232e628d1f9c2abae546f","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    parser \u003d subparsers.add_parser(\u0027check_migration\u0027)"},{"line_number":148,"context_line":"    parser.set_defaults(func\u003ddo_check_migration)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    parser \u003d subparsers.add_parser(\u0027upgrade\u0027)"},{"line_number":151,"context_line":"    parser.add_argument(\u0027--delta\u0027, type\u003dint)"},{"line_number":152,"context_line":"    parser.add_argument(\u0027--sql\u0027, action\u003d\u0027store_true\u0027)"},{"line_number":153,"context_line":"    parser.add_argument(\u0027revision\u0027, nargs\u003d\u0027?\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_2973974e","line":150,"in_reply_to":"1a6ced46_b81193ae","updated":"2015-03-23 09:15:25.000000000","message":"Thanks. It is better to discuss it. I will reset my score.","commit_id":"9af24b4da63ffbd546880721bcf0c7df3fae7256"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"27c2f24250f550e4ece78a3e4c7ce8dc822902bb","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    parser \u003d subparsers.add_parser(\u0027check_migration\u0027)"},{"line_number":148,"context_line":"    parser.set_defaults(func\u003ddo_check_migration)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    parser \u003d subparsers.add_parser(\u0027upgrade\u0027)"},{"line_number":151,"context_line":"    parser.add_argument(\u0027--delta\u0027, type\u003dint)"},{"line_number":152,"context_line":"    parser.add_argument(\u0027--sql\u0027, action\u003d\u0027store_true\u0027)"},{"line_number":153,"context_line":"    parser.add_argument(\u0027revision\u0027, nargs\u003d\u0027?\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_b81193ae","line":150,"in_reply_to":"1a6ced46_b8b0b3f5","updated":"2015-03-23 08:04:39.000000000","message":"I\u0027ve added the same comment on previous patch set :) So, I think we should discuss that.","commit_id":"9af24b4da63ffbd546880721bcf0c7df3fae7256"}]}
