)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"43bb739685bda862519fb27f0c73fd0cc10c4911","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"add functionality to check the current state of db with"},{"line_number":10,"context_line":"keystone-manage db_sync check"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I79d3640a780d624f14059fe311fafa0542c03357"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a461143_b7aad483","line":11,"updated":"2017-02-02 22:25:42.000000000","message":"We have a bug floating around for this somewhere. If we land this we can close it!\n\nhttps://bugs.launchpad.net/keystone/+bug/1642212\n\n  Closes-Bug: 1642212","commit_id":"8740db35fc724852c7fccd33d0dde603a65035e8"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"de19aecc08e99e8a107fd4052c113d54faa6b2e9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"add functionality to check the current state of db with"},{"line_number":10,"context_line":"keystone-manage db_sync check"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I79d3640a780d624f14059fe311fafa0542c03357"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a430d35_34ad3632","line":11,"in_reply_to":"3a461143_b7aad483","updated":"2017-02-03 16:22:19.000000000","message":"Done","commit_id":"8740db35fc724852c7fccd33d0dde603a65035e8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"373c5dc2f1307d5ecb640d1c5e65fdb108c74963","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Richard Avelar \u003ccsravelar@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-03 16:21:54 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP add db_sync check"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"add functionality to check the current state of db with"},{"line_number":10,"context_line":"keystone-manage db_sync check"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1a430d35_8bd86ef1","line":7,"updated":"2017-02-03 17:31:18.000000000","message":"I\u0027d remove the `WIP` here since this is coming along and we can put it in -Workflow if needed.","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4488862c30b5ad57ebc84a178dd977cb6c5dbf12","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Richard Avelar \u003ccsravelar@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-03 20:33:06 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP add db_sync check"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"add functionality to check the current state of db with"},{"line_number":10,"context_line":"keystone-manage db_sync check"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1a430d35_4eca0aa3","line":7,"updated":"2017-02-03 21:35:10.000000000","message":"You\u0027re good about keeping things in workflow-1 when you\u0027re iterating on it. You could remove the WIP from the commit title.","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"45c42dbdf02e4d88b25cd36f8a66c24456246376","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Richard Avelar \u003ccsravelar@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-03 20:33:06 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP add db_sync check"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"add functionality to check the current state of db with"},{"line_number":10,"context_line":"keystone-manage db_sync check"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1a430d35_fde2869e","line":7,"in_reply_to":"1a430d35_4eca0aa3","updated":"2017-02-03 23:45:41.000000000","message":"Done","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"}],"doc/source/upgrading.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8a0f6f0e5f3ccdc7866a0fd14e21524606afd243","unresolved":false,"context_lines":[{"line_number":232,"context_line":"outstanding actions you have left to take as well as any possible upgrades you"},{"line_number":233,"context_line":"can make from your current version. Here are a list of possible return codes."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"* A return code of 0 means you are currently up to date with the latest"},{"line_number":236,"context_line":"  migration script version and all db_sync commands are complete."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of 1 generally means something serious is wrong with you"}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_8616e049","line":235,"range":{"start_line":235,"start_character":19,"end_line":235,"end_character":20},"updated":"2017-02-09 00:21:11.000000000","message":"``0``","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"a5defb302f36f7a519810c9fd8f5df66817bdf6a","unresolved":false,"context_lines":[{"line_number":232,"context_line":"outstanding actions you have left to take as well as any possible upgrades you"},{"line_number":233,"context_line":"can make from your current version. Here are a list of possible return codes."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"* A return code of 0 means you are currently up to date with the latest"},{"line_number":236,"context_line":"  migration script version and all db_sync commands are complete."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of 1 generally means something serious is wrong with you"}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_651f0ab8","line":235,"range":{"start_line":235,"start_character":19,"end_line":235,"end_character":20},"in_reply_to":"1a430d35_8616e049","updated":"2017-02-09 16:25:21.000000000","message":"Done","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8a0f6f0e5f3ccdc7866a0fd14e21524606afd243","unresolved":false,"context_lines":[{"line_number":233,"context_line":"can make from your current version. Here are a list of possible return codes."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"* A return code of 0 means you are currently up to date with the latest"},{"line_number":236,"context_line":"  migration script version and all db_sync commands are complete."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of 1 generally means something serious is wrong with you"},{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_46087828","line":236,"range":{"start_line":236,"start_character":35,"end_line":236,"end_character":42},"updated":"2017-02-09 00:21:11.000000000","message":"``db_sync``","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"a5defb302f36f7a519810c9fd8f5df66817bdf6a","unresolved":false,"context_lines":[{"line_number":233,"context_line":"can make from your current version. Here are a list of possible return codes."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"* A return code of 0 means you are currently up to date with the latest"},{"line_number":236,"context_line":"  migration script version and all db_sync commands are complete."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of 1 generally means something serious is wrong with you"},{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_a5773207","line":236,"range":{"start_line":236,"start_character":35,"end_line":236,"end_character":42},"in_reply_to":"1a430d35_46087828","updated":"2017-02-09 16:25:21.000000000","message":"Done","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8a0f6f0e5f3ccdc7866a0fd14e21524606afd243","unresolved":false,"context_lines":[{"line_number":235,"context_line":"* A return code of 0 means you are currently up to date with the latest"},{"line_number":236,"context_line":"  migration script version and all db_sync commands are complete."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of 1 generally means something serious is wrong with you"},{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"},{"line_number":240,"context_line":"  from the db_sync commands being run out of order."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_c61c686c","line":238,"range":{"start_line":238,"start_character":19,"end_line":238,"end_character":20},"updated":"2017-02-09 00:21:11.000000000","message":"``1``","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"a5defb302f36f7a519810c9fd8f5df66817bdf6a","unresolved":false,"context_lines":[{"line_number":235,"context_line":"* A return code of 0 means you are currently up to date with the latest"},{"line_number":236,"context_line":"  migration script version and all db_sync commands are complete."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of 1 generally means something serious is wrong with you"},{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"},{"line_number":240,"context_line":"  from the db_sync commands being run out of order."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_e5813ac5","line":238,"range":{"start_line":238,"start_character":19,"end_line":238,"end_character":20},"in_reply_to":"1a430d35_c61c686c","updated":"2017-02-09 16:25:21.000000000","message":"Done","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8a0f6f0e5f3ccdc7866a0fd14e21524606afd243","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of 1 generally means something serious is wrong with you"},{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"},{"line_number":240,"context_line":"  from the db_sync commands being run out of order."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"* A return code of 2 means that an upgrade from your current database version"},{"line_number":243,"context_line":"  is available and your first step is to run"}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_660bb424","line":240,"range":{"start_line":240,"start_character":11,"end_line":240,"end_character":18},"updated":"2017-02-09 00:21:11.000000000","message":"``db_sync``","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"a5defb302f36f7a519810c9fd8f5df66817bdf6a","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of 1 generally means something serious is wrong with you"},{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"},{"line_number":240,"context_line":"  from the db_sync commands being run out of order."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"* A return code of 2 means that an upgrade from your current database version"},{"line_number":243,"context_line":"  is available and your first step is to run"}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_45692e25","line":240,"range":{"start_line":240,"start_character":11,"end_line":240,"end_character":18},"in_reply_to":"1a430d35_660bb424","updated":"2017-02-09 16:25:21.000000000","message":"Done","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8a0f6f0e5f3ccdc7866a0fd14e21524606afd243","unresolved":false,"context_lines":[{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"},{"line_number":240,"context_line":"  from the db_sync commands being run out of order."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"* A return code of 2 means that an upgrade from your current database version"},{"line_number":243,"context_line":"  is available and your first step is to run"},{"line_number":244,"context_line":"  ``keystone-manage db_sync --expand``."},{"line_number":245,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_e617a442","line":242,"range":{"start_line":242,"start_character":19,"end_line":242,"end_character":20},"updated":"2017-02-09 00:21:11.000000000","message":"``2``","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"a5defb302f36f7a519810c9fd8f5df66817bdf6a","unresolved":false,"context_lines":[{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"},{"line_number":240,"context_line":"  from the db_sync commands being run out of order."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"* A return code of 2 means that an upgrade from your current database version"},{"line_number":243,"context_line":"  is available and your first step is to run"},{"line_number":244,"context_line":"  ``keystone-manage db_sync --expand``."},{"line_number":245,"context_line":""}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_65762a08","line":242,"range":{"start_line":242,"start_character":19,"end_line":242,"end_character":20},"in_reply_to":"1a430d35_e617a442","updated":"2017-02-09 16:25:21.000000000","message":"Done","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8a0f6f0e5f3ccdc7866a0fd14e21524606afd243","unresolved":false,"context_lines":[{"line_number":243,"context_line":"  is available and your first step is to run"},{"line_number":244,"context_line":"  ``keystone-manage db_sync --expand``."},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"* A return code of 3 means that your next step is to run ``keystone-manage"},{"line_number":247,"context_line":"  db_sync --migrate``."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* A return code of 4 means that your next step is to run ``keystone-manage"}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_262c4c98","line":246,"range":{"start_line":246,"start_character":19,"end_line":246,"end_character":20},"updated":"2017-02-09 00:21:11.000000000","message":"``3``","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8a0f6f0e5f3ccdc7866a0fd14e21524606afd243","unresolved":false,"context_lines":[{"line_number":243,"context_line":"  is available and your first step is to run"},{"line_number":244,"context_line":"  ``keystone-manage db_sync --expand``."},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"* A return code of 3 means that your next step is to run ``keystone-manage"},{"line_number":247,"context_line":"  db_sync --migrate``."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* A return code of 4 means that your next step is to run ``keystone-manage"}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_267a8c88","line":246,"range":{"start_line":246,"start_character":21,"end_line":246,"end_character":46},"updated":"2017-02-09 00:21:11.000000000","message":"means that ... \"the expansion stage is complete, and the next step is to run\" ...","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"a5defb302f36f7a519810c9fd8f5df66817bdf6a","unresolved":false,"context_lines":[{"line_number":243,"context_line":"  is available and your first step is to run"},{"line_number":244,"context_line":"  ``keystone-manage db_sync --expand``."},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"* A return code of 3 means that your next step is to run ``keystone-manage"},{"line_number":247,"context_line":"  db_sync --migrate``."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* A return code of 4 means that your next step is to run ``keystone-manage"}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_45504e5f","line":246,"range":{"start_line":246,"start_character":19,"end_line":246,"end_character":20},"in_reply_to":"1a430d35_262c4c98","updated":"2017-02-09 16:25:21.000000000","message":"Done","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"a5defb302f36f7a519810c9fd8f5df66817bdf6a","unresolved":false,"context_lines":[{"line_number":243,"context_line":"  is available and your first step is to run"},{"line_number":244,"context_line":"  ``keystone-manage db_sync --expand``."},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"* A return code of 3 means that your next step is to run ``keystone-manage"},{"line_number":247,"context_line":"  db_sync --migrate``."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* A return code of 4 means that your next step is to run ``keystone-manage"}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_85731615","line":246,"range":{"start_line":246,"start_character":21,"end_line":246,"end_character":46},"in_reply_to":"1a430d35_267a8c88","updated":"2017-02-09 16:25:21.000000000","message":"Done","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8a0f6f0e5f3ccdc7866a0fd14e21524606afd243","unresolved":false,"context_lines":[{"line_number":246,"context_line":"* A return code of 3 means that your next step is to run ``keystone-manage"},{"line_number":247,"context_line":"  db_sync --migrate``."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* A return code of 4 means that your next step is to run ``keystone-manage"},{"line_number":250,"context_line":"  db_sync --contract``."}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_6622d4a4","line":249,"range":{"start_line":249,"start_character":19,"end_line":249,"end_character":20},"updated":"2017-02-09 00:21:11.000000000","message":"``4``","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8a0f6f0e5f3ccdc7866a0fd14e21524606afd243","unresolved":false,"context_lines":[{"line_number":246,"context_line":"* A return code of 3 means that your next step is to run ``keystone-manage"},{"line_number":247,"context_line":"  db_sync --migrate``."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* A return code of 4 means that your next step is to run ``keystone-manage"},{"line_number":250,"context_line":"  db_sync --contract``."}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_a63f5cb2","line":249,"range":{"start_line":249,"start_character":21,"end_line":249,"end_character":46},"updated":"2017-02-09 00:21:11.000000000","message":"means that ... \"the expansion and data migration stages are complete, and the next step is to run\" ...","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"a5defb302f36f7a519810c9fd8f5df66817bdf6a","unresolved":false,"context_lines":[{"line_number":246,"context_line":"* A return code of 3 means that your next step is to run ``keystone-manage"},{"line_number":247,"context_line":"  db_sync --migrate``."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* A return code of 4 means that your next step is to run ``keystone-manage"},{"line_number":250,"context_line":"  db_sync --contract``."}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_e5585a8d","line":249,"range":{"start_line":249,"start_character":19,"end_line":249,"end_character":20},"in_reply_to":"1a430d35_6622d4a4","updated":"2017-02-09 16:25:21.000000000","message":"Done","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"a5defb302f36f7a519810c9fd8f5df66817bdf6a","unresolved":false,"context_lines":[{"line_number":246,"context_line":"* A return code of 3 means that your next step is to run ``keystone-manage"},{"line_number":247,"context_line":"  db_sync --migrate``."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* A return code of 4 means that your next step is to run ``keystone-manage"},{"line_number":250,"context_line":"  db_sync --contract``."}],"source_content_type":"text/x-rst","patch_set":25,"id":"1a430d35_a55e5277","line":249,"range":{"start_line":249,"start_character":21,"end_line":249,"end_character":46},"in_reply_to":"1a430d35_a63f5cb2","updated":"2017-02-09 16:25:21.000000000","message":"Done","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"dbef3b7f079d05988467389da3dfefd34a0de2c4","unresolved":false,"context_lines":[{"line_number":235,"context_line":"* A return code of ``0`` means you are currently up to date with the latest"},{"line_number":236,"context_line":"  migration script version and all ``db_sync`` commands are complete."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of ``1`` generally means something serious is wrong with you"},{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"},{"line_number":240,"context_line":"  from the ``db_sync`` commands being run out of order."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":27,"id":"1a430d35_34d0d1f7","line":238,"range":{"start_line":238,"start_character":73,"end_line":238,"end_character":76},"updated":"2017-02-09 17:04:17.000000000","message":"nit: your","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"34da1ee4163eb043b214484e611831a4be545088","unresolved":false,"context_lines":[{"line_number":235,"context_line":"* A return code of ``0`` means you are currently up to date with the latest"},{"line_number":236,"context_line":"  migration script version and all ``db_sync`` commands are complete."},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of ``1`` generally means something serious is wrong with you"},{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"},{"line_number":240,"context_line":"  from the ``db_sync`` commands being run out of order."},{"line_number":241,"context_line":""}],"source_content_type":"text/x-rst","patch_set":27,"id":"1a430d35_1e3f6cd7","line":238,"range":{"start_line":238,"start_character":73,"end_line":238,"end_character":76},"in_reply_to":"1a430d35_34d0d1f7","updated":"2017-02-09 19:42:20.000000000","message":"Done","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"dbef3b7f079d05988467389da3dfefd34a0de2c4","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of ``1`` generally means something serious is wrong with you"},{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"},{"line_number":240,"context_line":"  from the ``db_sync`` commands being run out of order."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"* A return code of ``2`` means that an upgrade from your current database"},{"line_number":243,"context_line":"  version is available and your first step is to run ``keystone-manage"}],"source_content_type":"text/x-rst","patch_set":27,"id":"1a430d35_54f47d86","line":240,"range":{"start_line":240,"start_character":2,"end_line":240,"end_character":6},"updated":"2017-02-09 17:04:17.000000000","message":"\u0027by\u0027 may be better here\n\nThat said, I\u0027m not sure that this speculative statement adds any value. Personally I\u0027d just leave it at the end of the first sentence.","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"34da1ee4163eb043b214484e611831a4be545088","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"* A return code of ``1`` generally means something serious is wrong with you"},{"line_number":239,"context_line":"  database and operator intervention will be required. This likely is caused"},{"line_number":240,"context_line":"  from the ``db_sync`` commands being run out of order."},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"* A return code of ``2`` means that an upgrade from your current database"},{"line_number":243,"context_line":"  version is available and your first step is to run ``keystone-manage"}],"source_content_type":"text/x-rst","patch_set":27,"id":"1a430d35_fe39c0f3","line":240,"range":{"start_line":240,"start_character":2,"end_line":240,"end_character":6},"in_reply_to":"1a430d35_54f47d86","updated":"2017-02-09 19:42:20.000000000","message":"Done","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"05f6a0fe1ed2d29db4924c9d99ac5db4a509f057","unresolved":false,"context_lines":[{"line_number":225,"context_line":"   the previous release."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Using db_sync check"},{"line_number":228,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"In order to check the current state of your rolling upgrades, you may run the"},{"line_number":231,"context_line":"command ``keystone-manage db_sync --check``. This will inform you of any"}],"source_content_type":"text/x-rst","patch_set":28,"id":"1a430d35_fd9e25b7","line":228,"updated":"2017-02-09 20:45:32.000000000","message":"228GddkyypVr~","commit_id":"d5ce8ea0ed6a3b9f748427d1b552fb88ad738545"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"15ea98519ef607cda450bde38d08756dcff9df98","unresolved":false,"context_lines":[{"line_number":225,"context_line":"   the previous release."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Using db_sync check"},{"line_number":228,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"In order to check the current state of your rolling upgrades, you may run the"},{"line_number":231,"context_line":"command ``keystone-manage db_sync --check``. This will inform you of any"}],"source_content_type":"text/x-rst","patch_set":28,"id":"fa31d9ce_ed1041ab","line":228,"in_reply_to":"1a430d35_fd9e25b7","updated":"2017-02-09 21:33:04.000000000","message":"?","commit_id":"d5ce8ea0ed6a3b9f748427d1b552fb88ad738545"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ff665db3e2bd8ae0caf5ca4174691c8c30f3d8b5","unresolved":false,"context_lines":[{"line_number":225,"context_line":"   the previous release."},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"Using db_sync check"},{"line_number":228,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"In order to check the current state of your rolling upgrades, you may run the"},{"line_number":231,"context_line":"command ``keystone-manage db_sync --check``. This will inform you of any"}],"source_content_type":"text/x-rst","patch_set":28,"id":"fa31d9ce_10ca0c50","line":228,"in_reply_to":"fa31d9ce_ed1041ab","updated":"2017-02-10 03:30:52.000000000","message":"that\u0027s dolph speak for saying that number of ~\u0027s should be equal to the number of characters in the title","commit_id":"d5ce8ea0ed6a3b9f748427d1b552fb88ad738545"}],"keystone/cmd/cli.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"43bb739685bda862519fb27f0c73fd0cc10c4911","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        # expand needs to run first however."},{"line_number":463,"context_line":"        if CONF.command.check:"},{"line_number":464,"context_line":"            upgrades.check()"},{"line_number":465,"context_line":"        elif CONF.command.expand and CONF.command.migrate:"},{"line_number":466,"context_line":"            upgrades.expand_schema()"},{"line_number":467,"context_line":"            upgrades.migrate_data()"},{"line_number":468,"context_line":"        elif CONF.command.expand:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_99933ffa","line":465,"updated":"2017-02-02 22:25:42.000000000","message":"We could actually test this by adding unit tests to test_sql_upgrade. We\u0027d be able to put the database in weird states before running `keystone-manage db_sync --check` to ensure a useful message is logged.","commit_id":"8740db35fc724852c7fccd33d0dde603a65035e8"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"de19aecc08e99e8a107fd4052c113d54faa6b2e9","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        # expand needs to run first however."},{"line_number":463,"context_line":"        if CONF.command.check:"},{"line_number":464,"context_line":"            upgrades.check()"},{"line_number":465,"context_line":"        elif CONF.command.expand and CONF.command.migrate:"},{"line_number":466,"context_line":"            upgrades.expand_schema()"},{"line_number":467,"context_line":"            upgrades.migrate_data()"},{"line_number":468,"context_line":"        elif CONF.command.expand:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_74a7be4f","line":465,"in_reply_to":"3a461143_99933ffa","updated":"2017-02-03 16:22:19.000000000","message":"++","commit_id":"8740db35fc724852c7fccd33d0dde603a65035e8"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9d36a4e675d482a1d4234e9f92999bb37e6b7869","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                 \u0027running the new release.\u0027))"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        group.add_argument(\u0027--check\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":450,"context_line":"                           help\u003d(\u0027Check that there are not any outstanding \u0027"},{"line_number":451,"context_line":"                                 \u0027database actions that still need to be \u0027"},{"line_number":452,"context_line":"                                 \u0027executed. This command can be used to \u0027"},{"line_number":453,"context_line":"                                 \u0027verify the condition of the current db \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_0fc2c933","line":450,"updated":"2017-02-03 17:01:31.000000000","message":"s/not any/no/","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2af0955ff0e9cdea0acb55fee1dbe81c5ecf1717","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                 \u0027running the new release.\u0027))"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        group.add_argument(\u0027--check\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":450,"context_line":"                           help\u003d(\u0027Check that there are not any outstanding \u0027"},{"line_number":451,"context_line":"                                 \u0027database actions that still need to be \u0027"},{"line_number":452,"context_line":"                                 \u0027executed. This command can be used to \u0027"},{"line_number":453,"context_line":"                                 \u0027verify the condition of the current db \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_1549f85f","line":450,"in_reply_to":"1a430d35_0fc2c933","updated":"2017-02-03 18:40:49.000000000","message":"Done","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"373c5dc2f1307d5ecb640d1c5e65fdb108c74963","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                           help\u003d(\u0027Check that there are not any outstanding \u0027"},{"line_number":451,"context_line":"                                 \u0027database actions that still need to be \u0027"},{"line_number":452,"context_line":"                                 \u0027executed. This command can be used to \u0027"},{"line_number":453,"context_line":"                                 \u0027verify the condition of the current db \u0027"},{"line_number":454,"context_line":"                                 \u0027state. \u0027))"},{"line_number":455,"context_line":"        return parser"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_2b44da72","line":453,"updated":"2017-02-03 17:31:18.000000000","message":"s/db/database/","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2af0955ff0e9cdea0acb55fee1dbe81c5ecf1717","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                           help\u003d(\u0027Check that there are not any outstanding \u0027"},{"line_number":451,"context_line":"                                 \u0027database actions that still need to be \u0027"},{"line_number":452,"context_line":"                                 \u0027executed. This command can be used to \u0027"},{"line_number":453,"context_line":"                                 \u0027verify the condition of the current db \u0027"},{"line_number":454,"context_line":"                                 \u0027state. \u0027))"},{"line_number":455,"context_line":"        return parser"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_5579c092","line":453,"in_reply_to":"1a430d35_2b44da72","updated":"2017-02-03 18:40:49.000000000","message":"Done","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9d36a4e675d482a1d4234e9f92999bb37e6b7869","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                                 \u0027database actions that still need to be \u0027"},{"line_number":452,"context_line":"                                 \u0027executed. This command can be used to \u0027"},{"line_number":453,"context_line":"                                 \u0027verify the condition of the current db \u0027"},{"line_number":454,"context_line":"                                 \u0027state. \u0027))"},{"line_number":455,"context_line":"        return parser"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def _get_db_sync_status():"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_4fe211d7","line":454,"updated":"2017-02-03 17:01:31.000000000","message":"Why the trailing space?","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2af0955ff0e9cdea0acb55fee1dbe81c5ecf1717","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                                 \u0027database actions that still need to be \u0027"},{"line_number":452,"context_line":"                                 \u0027executed. This command can be used to \u0027"},{"line_number":453,"context_line":"                                 \u0027verify the condition of the current db \u0027"},{"line_number":454,"context_line":"                                 \u0027state. \u0027))"},{"line_number":455,"context_line":"        return parser"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def _get_db_sync_status():"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_756ebcca","line":454,"in_reply_to":"1a430d35_4fe211d7","updated":"2017-02-03 18:40:49.000000000","message":"Done","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9d36a4e675d482a1d4234e9f92999bb37e6b7869","unresolved":false,"context_lines":[{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def _get_db_sync_status():"},{"line_number":458,"context_line":"        info_dict \u003d {"},{"line_number":459,"context_line":"            \u0027expand\u0027:{\u0027name\u0027:\u0027expand\u0027, \u0027repo\u0027:\u0027expand_repo\u0027},"},{"line_number":460,"context_line":"            \u0027migrate\u0027:{\u0027name\u0027:\u0027migrate\u0027, \u0027repo\u0027:\u0027data_migration_repo\u0027},"},{"line_number":461,"context_line":"            \u0027contract\u0027:{\u0027name\u0027:\u0027contract\u0027, \u0027repo\u0027:\u0027contract_repo\u0027}"},{"line_number":462,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_4f94d136","line":459,"updated":"2017-02-03 17:01:31.000000000","message":"Missing the spaces after the \u0027:\u0027","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2af0955ff0e9cdea0acb55fee1dbe81c5ecf1717","unresolved":false,"context_lines":[{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def _get_db_sync_status():"},{"line_number":458,"context_line":"        info_dict \u003d {"},{"line_number":459,"context_line":"            \u0027expand\u0027:{\u0027name\u0027:\u0027expand\u0027, \u0027repo\u0027:\u0027expand_repo\u0027},"},{"line_number":460,"context_line":"            \u0027migrate\u0027:{\u0027name\u0027:\u0027migrate\u0027, \u0027repo\u0027:\u0027data_migration_repo\u0027},"},{"line_number":461,"context_line":"            \u0027contract\u0027:{\u0027name\u0027:\u0027contract\u0027, \u0027repo\u0027:\u0027contract_repo\u0027}"},{"line_number":462,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_b8e73911","line":459,"in_reply_to":"1a430d35_4f94d136","updated":"2017-02-03 18:40:49.000000000","message":"Done","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"373c5dc2f1307d5ecb640d1c5e65fdb108c74963","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            \u0027migrate\u0027:{\u0027name\u0027:\u0027migrate\u0027, \u0027repo\u0027:\u0027data_migration_repo\u0027},"},{"line_number":461,"context_line":"            \u0027contract\u0027:{\u0027name\u0027:\u0027contract\u0027, \u0027repo\u0027:\u0027contract_repo\u0027}"},{"line_number":462,"context_line":"        }"},{"line_number":463,"context_line":"        info_dict \u003d upgrades.check(info_dict)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        suggestion \u003d \u0027\u0027"},{"line_number":466,"context_line":"        print (\u0027 {0:^10s} {1:^17s} {2:^16s} {3:^12s}\u0027.format("}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_6f834dcd","line":463,"updated":"2017-02-03 17:31:18.000000000","message":"Maybe?\n\n  expand_version \u003d upgrades.get_db_version(repo\u003d\u0027expand\u0027)\n  data_migrate_version \u003d upgrades.get_db_version(repo\u003d\u0027migrate\u0027)\n  contract_version \u003d upgrades.get_db_version(repo\u003d\u0027contract\u0027)\n  # if expand is greater than migrate; print \"migrate is next\"\n  # if expand and migrate are greater than contract; print \"contract is next\"","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2af0955ff0e9cdea0acb55fee1dbe81c5ecf1717","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            \u0027migrate\u0027:{\u0027name\u0027:\u0027migrate\u0027, \u0027repo\u0027:\u0027data_migration_repo\u0027},"},{"line_number":461,"context_line":"            \u0027contract\u0027:{\u0027name\u0027:\u0027contract\u0027, \u0027repo\u0027:\u0027contract_repo\u0027}"},{"line_number":462,"context_line":"        }"},{"line_number":463,"context_line":"        info_dict \u003d upgrades.check(info_dict)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        suggestion \u003d \u0027\u0027"},{"line_number":466,"context_line":"        print (\u0027 {0:^10s} {1:^17s} {2:^16s} {3:^12s}\u0027.format("}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_d8e4050f","line":463,"in_reply_to":"1a430d35_6f834dcd","updated":"2017-02-03 18:40:49.000000000","message":"Done","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9d36a4e675d482a1d4234e9f92999bb37e6b7869","unresolved":false,"context_lines":[{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        if suggestion:"},{"line_number":475,"context_line":"            print (\u0027You have not completed all db_sync upgrade commands. \u0027"},{"line_number":476,"context_line":"                   \u0027Run %s\u0027 % suggestion)"},{"line_number":477,"context_line":"            print (\u0027Please refer to http://docs.openstack.org/developer\u0027"},{"line_number":478,"context_line":"                   \u0027/keystone/upgrading.html\u0027)"},{"line_number":479,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_0faba975","line":476,"updated":"2017-02-03 17:01:31.000000000","message":"remove the trailing \u0027 %s\u0027 from the string and replace \u0027 %\u0027 with \u0027,\u0027","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2af0955ff0e9cdea0acb55fee1dbe81c5ecf1717","unresolved":false,"context_lines":[{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        if suggestion:"},{"line_number":475,"context_line":"            print (\u0027You have not completed all db_sync upgrade commands. \u0027"},{"line_number":476,"context_line":"                   \u0027Run %s\u0027 % suggestion)"},{"line_number":477,"context_line":"            print (\u0027Please refer to http://docs.openstack.org/developer\u0027"},{"line_number":478,"context_line":"                   \u0027/keystone/upgrading.html\u0027)"},{"line_number":479,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_18ef6de9","line":476,"in_reply_to":"1a430d35_0faba975","updated":"2017-02-03 18:40:49.000000000","message":"Done","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a2aa70e6b49e620fcc7881597b6f8804261dc8f2","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    @staticmethod"},{"line_number":482,"context_line":"    def main(cls):"},{"line_number":483,"context_line":"        assert_not_extension(CONF.command.extension)"},{"line_number":484,"context_line":"        klass \u003d cls()"},{"line_number":485,"context_line":"        # It is possible to run expand and migrate at the same time,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_759f9c03","line":482,"updated":"2017-02-03 17:57:20.000000000","message":"Also a static method won\u0027t get a cls.","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9d36a4e675d482a1d4234e9f92999bb37e6b7869","unresolved":false,"context_lines":[{"line_number":481,"context_line":"    @staticmethod"},{"line_number":482,"context_line":"    def main(cls):"},{"line_number":483,"context_line":"        assert_not_extension(CONF.command.extension)"},{"line_number":484,"context_line":"        klass \u003d cls()"},{"line_number":485,"context_line":"        # It is possible to run expand and migrate at the same time,"},{"line_number":486,"context_line":"        # expand needs to run first however."},{"line_number":487,"context_line":"        if CONF.command.check:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_ef9f3d5d","line":484,"updated":"2017-02-03 17:01:31.000000000","message":"This is creating an instance so \u0027instance\u0027 is a much better name than klass.","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2af0955ff0e9cdea0acb55fee1dbe81c5ecf1717","unresolved":false,"context_lines":[{"line_number":481,"context_line":"    @staticmethod"},{"line_number":482,"context_line":"    def main(cls):"},{"line_number":483,"context_line":"        assert_not_extension(CONF.command.extension)"},{"line_number":484,"context_line":"        klass \u003d cls()"},{"line_number":485,"context_line":"        # It is possible to run expand and migrate at the same time,"},{"line_number":486,"context_line":"        # expand needs to run first however."},{"line_number":487,"context_line":"        if CONF.command.check:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_38ba69e2","line":484,"in_reply_to":"1a430d35_ef9f3d5d","updated":"2017-02-03 18:40:49.000000000","message":"Done","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9d36a4e675d482a1d4234e9f92999bb37e6b7869","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        # It is possible to run expand and migrate at the same time,"},{"line_number":486,"context_line":"        # expand needs to run first however."},{"line_number":487,"context_line":"        if CONF.command.check:"},{"line_number":488,"context_line":"            klass._get_db_sync_status()"},{"line_number":489,"context_line":"        elif CONF.command.expand and CONF.command.migrate:"},{"line_number":490,"context_line":"            upgrades.expand_schema()"},{"line_number":491,"context_line":"            upgrades.migrate_data()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_0f9d6965","line":488,"updated":"2017-02-03 17:01:31.000000000","message":"Why access a protected method here?","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2af0955ff0e9cdea0acb55fee1dbe81c5ecf1717","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        # It is possible to run expand and migrate at the same time,"},{"line_number":486,"context_line":"        # expand needs to run first however."},{"line_number":487,"context_line":"        if CONF.command.check:"},{"line_number":488,"context_line":"            klass._get_db_sync_status()"},{"line_number":489,"context_line":"        elif CONF.command.expand and CONF.command.migrate:"},{"line_number":490,"context_line":"            upgrades.expand_schema()"},{"line_number":491,"context_line":"            upgrades.migrate_data()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_78b4f1f1","line":488,"in_reply_to":"1a430d35_0f9d6965","updated":"2017-02-03 18:40:49.000000000","message":"Done","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4488862c30b5ad57ebc84a178dd977cb6c5dbf12","unresolved":false,"context_lines":[{"line_number":459,"context_line":"        # It is possible to run expand and migrate at the same time,"},{"line_number":460,"context_line":"        # expand needs to run first however."},{"line_number":461,"context_line":"        if CONF.command.check:"},{"line_number":462,"context_line":"            print (upgrades.check())"},{"line_number":463,"context_line":"        elif CONF.command.expand and CONF.command.migrate:"},{"line_number":464,"context_line":"            upgrades.expand_schema()"},{"line_number":465,"context_line":"            upgrades.migrate_data()"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_aef52e84","line":462,"updated":"2017-02-03 21:35:10.000000000","message":"Couldn\u0027t this call?\n\n  expand_version \u003d upgrades.get_db_version(repo\u003d\u0027expand\u0027)\n  ...","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"45c42dbdf02e4d88b25cd36f8a66c24456246376","unresolved":false,"context_lines":[{"line_number":459,"context_line":"        # It is possible to run expand and migrate at the same time,"},{"line_number":460,"context_line":"        # expand needs to run first however."},{"line_number":461,"context_line":"        if CONF.command.check:"},{"line_number":462,"context_line":"            print (upgrades.check())"},{"line_number":463,"context_line":"        elif CONF.command.expand and CONF.command.migrate:"},{"line_number":464,"context_line":"            upgrades.expand_schema()"},{"line_number":465,"context_line":"            upgrades.migrate_data()"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_7dedb68a","line":462,"in_reply_to":"1a430d35_aef52e84","updated":"2017-02-03 23:45:41.000000000","message":"Done","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"38aa82609e86114adecf868042623fcdcf714d16","unresolved":false,"context_lines":[{"line_number":490,"context_line":"                        \u0027migration triggers.\u0027))"},{"line_number":491,"context_line":"            else:"},{"line_number":492,"context_line":"                print(_(\u0027Your database is out of sync. Please restore your \u0027"},{"line_number":493,"context_line":"                        \u0027database from a valid backup and run db_sync expand, \u0027"},{"line_number":494,"context_line":"                        \u0027migrate, and contract in that order. For more \u0027"},{"line_number":495,"context_line":"                        \u0027information refer to http://docs.openstack.org/\u0027"},{"line_number":496,"context_line":"                        \u0027developer/keystone/upgrading.html\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_e4f9d781","line":493,"updated":"2017-02-06 17:44:05.000000000","message":"It\u0027s likely that the operator will have to make the decision to restore from a backup. We might want to be generic here and just stress the need for operator intervention to figure out what happened.","commit_id":"759299aeff9ab3bcb10253c03eaa865bec75d9d9"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"38aa82609e86114adecf868042623fcdcf714d16","unresolved":false,"context_lines":[{"line_number":494,"context_line":"                        \u0027migrate, and contract in that order. For more \u0027"},{"line_number":495,"context_line":"                        \u0027information refer to http://docs.openstack.org/\u0027"},{"line_number":496,"context_line":"                        \u0027developer/keystone/upgrading.html\u0027))"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        elif CONF.command.expand and CONF.command.migrate:"},{"line_number":499,"context_line":"            upgrades.expand_schema()"},{"line_number":500,"context_line":"            upgrades.migrate_data()"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_a40d0f92","line":497,"updated":"2017-02-06 17:44:05.000000000","message":"We could print out the versions here like you did in a previous patch. The current statements are helpful, but we could provide operators with the actual schema information, too.","commit_id":"759299aeff9ab3bcb10253c03eaa865bec75d9d9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b5e84f29a7397148640a94346e2193c1a9bd3ae1","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                 \u0027running the new release.\u0027))"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        group.add_argument(\u0027--check\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":450,"context_line":"                           help\u003d(\u0027Check that there are no outstanding database\u0027"},{"line_number":451,"context_line":"                                 \u0027 actions that still need to be executed.\u0027"},{"line_number":452,"context_line":"                                 \u0027 This command can be used to verify the\u0027"},{"line_number":453,"context_line":"                                 \u0027 condition of the current database state.\u0027))"},{"line_number":454,"context_line":"        return parser"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def _check_db_sync_status(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_149decbb","line":453,"range":{"start_line":450,"start_character":33,"end_line":453,"end_character":78},"updated":"2017-02-08 04:13:04.000000000","message":"super nit (i\u0027m sorry), but can you put the white spaces to the right end of the string? since thats what you do everywhere else :)","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"9565368da89ba1a43ed25af7e591db52d12fc07f","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                 \u0027running the new release.\u0027))"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        group.add_argument(\u0027--check\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":450,"context_line":"                           help\u003d(\u0027Check that there are no outstanding database\u0027"},{"line_number":451,"context_line":"                                 \u0027 actions that still need to be executed.\u0027"},{"line_number":452,"context_line":"                                 \u0027 This command can be used to verify the\u0027"},{"line_number":453,"context_line":"                                 \u0027 condition of the current database state.\u0027))"},{"line_number":454,"context_line":"        return parser"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def _check_db_sync_status(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_fac84224","line":453,"range":{"start_line":450,"start_character":33,"end_line":453,"end_character":78},"in_reply_to":"1a430d35_149decbb","updated":"2017-02-08 08:56:56.000000000","message":"Done","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b5e84f29a7397148640a94346e2193c1a9bd3ae1","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                         \u0027same version.\u0027))"},{"line_number":464,"context_line":"        elif expand_version \u003e migrate_version:"},{"line_number":465,"context_line":"            LOG.info(_LI(\u0027Expand version is ahead of migrate. Your next step \u0027"},{"line_number":466,"context_line":"                         \u0027is to run keystone-manage db_sync --migrate on the \u0027"},{"line_number":467,"context_line":"                         \u0027first node to forcefully perform data migrations. \u0027"},{"line_number":468,"context_line":"                         \u0027This process will migrate all data from the old \u0027"},{"line_number":469,"context_line":"                         \u0027schema to the new schema while the previous release \u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_d4b7e437","line":466,"range":{"start_line":466,"start_character":36,"end_line":466,"end_character":69},"updated":"2017-02-08 04:13:04.000000000","message":"wrap this in backticks or double quotes","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"9565368da89ba1a43ed25af7e591db52d12fc07f","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                         \u0027same version.\u0027))"},{"line_number":464,"context_line":"        elif expand_version \u003e migrate_version:"},{"line_number":465,"context_line":"            LOG.info(_LI(\u0027Expand version is ahead of migrate. Your next step \u0027"},{"line_number":466,"context_line":"                         \u0027is to run keystone-manage db_sync --migrate on the \u0027"},{"line_number":467,"context_line":"                         \u0027first node to forcefully perform data migrations. \u0027"},{"line_number":468,"context_line":"                         \u0027This process will migrate all data from the old \u0027"},{"line_number":469,"context_line":"                         \u0027schema to the new schema while the previous release \u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_1aceee2d","line":466,"range":{"start_line":466,"start_character":36,"end_line":466,"end_character":69},"in_reply_to":"1a430d35_d4b7e437","updated":"2017-02-08 08:56:56.000000000","message":"Done","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b5e84f29a7397148640a94346e2193c1a9bd3ae1","unresolved":false,"context_lines":[{"line_number":480,"context_line":"                         \u0027writing to the database. As the next release begins \u0027"},{"line_number":481,"context_line":"                         \u0027writing to the new schema, database triggers will \u0027"},{"line_number":482,"context_line":"                         \u0027also migrate the data to the old schema, keeping \u0027"},{"line_number":483,"context_line":"                         \u0027both data schemas in sync. Run keystone-manage \u0027"},{"line_number":484,"context_line":"                         \u0027db_sync --contract to remove the old schema and all \u0027"},{"line_number":485,"context_line":"                         \u0027data migration triggers.\u0027))"},{"line_number":486,"context_line":"        else:"},{"line_number":487,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_14840c5c","line":484,"range":{"start_line":483,"start_character":57,"end_line":484,"end_character":44},"updated":"2017-02-08 04:13:04.000000000","message":"wrap this in backticks or double quotes","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"9565368da89ba1a43ed25af7e591db52d12fc07f","unresolved":false,"context_lines":[{"line_number":480,"context_line":"                         \u0027writing to the database. As the next release begins \u0027"},{"line_number":481,"context_line":"                         \u0027writing to the new schema, database triggers will \u0027"},{"line_number":482,"context_line":"                         \u0027also migrate the data to the old schema, keeping \u0027"},{"line_number":483,"context_line":"                         \u0027both data schemas in sync. Run keystone-manage \u0027"},{"line_number":484,"context_line":"                         \u0027db_sync --contract to remove the old schema and all \u0027"},{"line_number":485,"context_line":"                         \u0027data migration triggers.\u0027))"},{"line_number":486,"context_line":"        else:"},{"line_number":487,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_3acf2a2a","line":484,"range":{"start_line":483,"start_character":57,"end_line":484,"end_character":44},"in_reply_to":"1a430d35_14840c5c","updated":"2017-02-08 08:56:56.000000000","message":"Done","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b5e84f29a7397148640a94346e2193c1a9bd3ae1","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                         \u0027data migration triggers.\u0027))"},{"line_number":486,"context_line":"        else:"},{"line_number":487,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":488,"context_line":"                         \u0027refer to http://docs.openstack.org/developer/\u0027"},{"line_number":489,"context_line":"                         \u0027keystone/upgrading.html\u0027))"},{"line_number":490,"context_line":"        LOG.info(_LI(\u0027Current command versions: Expand: %(expand)d Migrate: \u0027"},{"line_number":491,"context_line":"                     \u0027%(migrate)d Contract: %(contract)d\u0027) % {"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_94b1dc49","line":488,"range":{"start_line":488,"start_character":35,"end_line":488,"end_character":39},"updated":"2017-02-08 04:13:04.000000000","message":"https*","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"9565368da89ba1a43ed25af7e591db52d12fc07f","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                         \u0027data migration triggers.\u0027))"},{"line_number":486,"context_line":"        else:"},{"line_number":487,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":488,"context_line":"                         \u0027refer to http://docs.openstack.org/developer/\u0027"},{"line_number":489,"context_line":"                         \u0027keystone/upgrading.html\u0027))"},{"line_number":490,"context_line":"        LOG.info(_LI(\u0027Current command versions: Expand: %(expand)d Migrate: \u0027"},{"line_number":491,"context_line":"                     \u0027%(migrate)d Contract: %(contract)d\u0027) % {"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_5ad4f6bb","line":488,"range":{"start_line":488,"start_character":35,"end_line":488,"end_character":39},"in_reply_to":"1a430d35_94b1dc49","updated":"2017-02-08 08:56:56.000000000","message":"Done","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b5e84f29a7397148640a94346e2193c1a9bd3ae1","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    @staticmethod"},{"line_number":497,"context_line":"    def main():"},{"line_number":498,"context_line":"        instance \u003d DbSync()"},{"line_number":499,"context_line":"        assert_not_extension(CONF.command.extension)"},{"line_number":500,"context_line":"        # It is possible to run expand and migrate at the same time,"},{"line_number":501,"context_line":"        # expand needs to run first however."}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_0d15e447","line":498,"range":{"start_line":498,"start_character":8,"end_line":498,"end_character":27},"updated":"2017-02-08 04:13:04.000000000","message":"i\u0027m sure others have chimed in, but what about making _check_db_sync_status a class method and referring to it as DbSync._check_...() ?","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"9565368da89ba1a43ed25af7e591db52d12fc07f","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    @staticmethod"},{"line_number":497,"context_line":"    def main():"},{"line_number":498,"context_line":"        instance \u003d DbSync()"},{"line_number":499,"context_line":"        assert_not_extension(CONF.command.extension)"},{"line_number":500,"context_line":"        # It is possible to run expand and migrate at the same time,"},{"line_number":501,"context_line":"        # expand needs to run first however."}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_bae31aa3","line":498,"range":{"start_line":498,"start_character":8,"end_line":498,"end_character":27},"in_reply_to":"1a430d35_0d15e447","updated":"2017-02-08 08:56:56.000000000","message":"I like the way you think","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"895acbda66252272be6e8d05ab47eb7035db46b7","unresolved":false,"context_lines":[{"line_number":461,"context_line":"            repo\u003d\u0027data_migration_repo\u0027)"},{"line_number":462,"context_line":"        contract_version \u003d upgrades.get_db_version(repo\u003d\u0027contract_repo\u0027)"},{"line_number":463,"context_line":"        if expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"},{"line_number":464,"context_line":"            LOG.info(_LI(\u0027All db_sync command versions are upgraded to the \u0027"},{"line_number":465,"context_line":"                         \u0027same version.\u0027))"},{"line_number":466,"context_line":"        elif expand_version \u003e migrate_version:"},{"line_number":467,"context_line":"            LOG.info(_LI(\u0027Expand version is ahead of migrate. Your next step \u0027"},{"line_number":468,"context_line":"                         \u0027is to run `keystone-manage db_sync --migrate` on \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_b99b1f65","line":465,"range":{"start_line":464,"start_character":12,"end_line":465,"end_character":42},"updated":"2017-02-08 11:55:29.000000000","message":"set return_code \u003d 0 after this (or by default before the IFs is probably better)","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"084631d0269b00df03d7c65fdde5b75ba0cbe961","unresolved":false,"context_lines":[{"line_number":461,"context_line":"            repo\u003d\u0027data_migration_repo\u0027)"},{"line_number":462,"context_line":"        contract_version \u003d upgrades.get_db_version(repo\u003d\u0027contract_repo\u0027)"},{"line_number":463,"context_line":"        if expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"},{"line_number":464,"context_line":"            LOG.info(_LI(\u0027All db_sync command versions are upgraded to the \u0027"},{"line_number":465,"context_line":"                         \u0027same version.\u0027))"},{"line_number":466,"context_line":"        elif expand_version \u003e migrate_version:"},{"line_number":467,"context_line":"            LOG.info(_LI(\u0027Expand version is ahead of migrate. Your next step \u0027"},{"line_number":468,"context_line":"                         \u0027is to run `keystone-manage db_sync --migrate` on \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_1a296f8a","line":465,"range":{"start_line":464,"start_character":12,"end_line":465,"end_character":42},"in_reply_to":"1a430d35_b99b1f65","updated":"2017-02-08 17:45:22.000000000","message":"Done","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"895acbda66252272be6e8d05ab47eb7035db46b7","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                         \u0027the first node to forcefully perform data \u0027"},{"line_number":470,"context_line":"                         \u0027migrations. This process will migrate all data from \u0027"},{"line_number":471,"context_line":"                         \u0027the old schema to the new schema while the previous \u0027"},{"line_number":472,"context_line":"                         \u0027release continues to operate normally.\u0027))"},{"line_number":473,"context_line":"        elif migrate_version \u003e contract_version:"},{"line_number":474,"context_line":"            LOG.info(_LI(\u0027Migrate version is ahead of contract. Your next \u0027"},{"line_number":475,"context_line":"                         \u0027step is to update your configuration files (/etc/\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_f9a12795","line":472,"updated":"2017-02-08 11:55:29.000000000","message":"set return_code \u003d 1 after this","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"084631d0269b00df03d7c65fdde5b75ba0cbe961","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                         \u0027the first node to forcefully perform data \u0027"},{"line_number":470,"context_line":"                         \u0027migrations. This process will migrate all data from \u0027"},{"line_number":471,"context_line":"                         \u0027the old schema to the new schema while the previous \u0027"},{"line_number":472,"context_line":"                         \u0027release continues to operate normally.\u0027))"},{"line_number":473,"context_line":"        elif migrate_version \u003e contract_version:"},{"line_number":474,"context_line":"            LOG.info(_LI(\u0027Migrate version is ahead of contract. Your next \u0027"},{"line_number":475,"context_line":"                         \u0027step is to update your configuration files (/etc/\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_da1c476c","line":472,"in_reply_to":"1a430d35_6811d55c","updated":"2017-02-08 17:45:22.000000000","message":"Done","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"733db33579584e6e1036a708fdbdcee53d7267f4","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                         \u0027the first node to forcefully perform data \u0027"},{"line_number":470,"context_line":"                         \u0027migrations. This process will migrate all data from \u0027"},{"line_number":471,"context_line":"                         \u0027the old schema to the new schema while the previous \u0027"},{"line_number":472,"context_line":"                         \u0027release continues to operate normally.\u0027))"},{"line_number":473,"context_line":"        elif migrate_version \u003e contract_version:"},{"line_number":474,"context_line":"            LOG.info(_LI(\u0027Migrate version is ahead of contract. Your next \u0027"},{"line_number":475,"context_line":"                         \u0027step is to update your configuration files (/etc/\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_6811d55c","line":472,"in_reply_to":"1a430d35_f9a12795","updated":"2017-02-08 16:03:18.000000000","message":"RC \u003d 1 is the universal RC for an general error, so you\u0027ll want to avoid that one\n\nhere\u0027s an example reference: http://www.tldp.org/LDP/abs/html/exitcodes.html\n\nyou may just want to use 2 or 3 onwards instead","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"895acbda66252272be6e8d05ab47eb7035db46b7","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                         \u0027also migrate the data to the old schema, keeping \u0027"},{"line_number":485,"context_line":"                         \u0027both data schemas in sync. Run `keystone-manage \u0027"},{"line_number":486,"context_line":"                         \u0027db_sync --contract` to remove the old schema and \u0027"},{"line_number":487,"context_line":"                         \u0027all data migration triggers.\u0027))"},{"line_number":488,"context_line":"        else:"},{"line_number":489,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":490,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_39a80f77","line":487,"range":{"start_line":487,"start_character":25,"end_line":487,"end_character":57},"updated":"2017-02-08 11:55:29.000000000","message":"set return_code \u003d 2 after this","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"084631d0269b00df03d7c65fdde5b75ba0cbe961","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                         \u0027also migrate the data to the old schema, keeping \u0027"},{"line_number":485,"context_line":"                         \u0027both data schemas in sync. Run `keystone-manage \u0027"},{"line_number":486,"context_line":"                         \u0027db_sync --contract` to remove the old schema and \u0027"},{"line_number":487,"context_line":"                         \u0027all data migration triggers.\u0027))"},{"line_number":488,"context_line":"        else:"},{"line_number":489,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":490,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_1a024f0a","line":487,"range":{"start_line":487,"start_character":25,"end_line":487,"end_character":57},"in_reply_to":"1a430d35_39a80f77","updated":"2017-02-08 17:45:22.000000000","message":"Done","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"895acbda66252272be6e8d05ab47eb7035db46b7","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        else:"},{"line_number":489,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":490,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"},{"line_number":491,"context_line":"                         \u0027keystone/upgrading.html\u0027))"},{"line_number":492,"context_line":"        LOG.info(_LI(\u0027Current command versions: Expand: %(expand)d Migrate: \u0027"},{"line_number":493,"context_line":"                     \u0027%(migrate)d Contract: %(contract)d\u0027) % {"},{"line_number":494,"context_line":"                         \u0027expand\u0027: expand_version,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_b9b23fe3","line":491,"range":{"start_line":491,"start_character":25,"end_line":491,"end_character":52},"updated":"2017-02-08 11:55:29.000000000","message":"set return_code \u003d 3 after this","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"084631d0269b00df03d7c65fdde5b75ba0cbe961","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        else:"},{"line_number":489,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":490,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"},{"line_number":491,"context_line":"                         \u0027keystone/upgrading.html\u0027))"},{"line_number":492,"context_line":"        LOG.info(_LI(\u0027Current command versions: Expand: %(expand)d Migrate: \u0027"},{"line_number":493,"context_line":"                     \u0027%(migrate)d Contract: %(contract)d\u0027) % {"},{"line_number":494,"context_line":"                         \u0027expand\u0027: expand_version,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_ff001504","line":491,"range":{"start_line":491,"start_character":25,"end_line":491,"end_character":52},"in_reply_to":"1a430d35_b9b23fe3","updated":"2017-02-08 17:45:22.000000000","message":"Done","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"895acbda66252272be6e8d05ab47eb7035db46b7","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                     \u0027%(migrate)d Contract: %(contract)d\u0027) % {"},{"line_number":494,"context_line":"                         \u0027expand\u0027: expand_version,"},{"line_number":495,"context_line":"                         \u0027migrate\u0027: migrate_version,"},{"line_number":496,"context_line":"                         \u0027contract\u0027: contract_version})"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    @staticmethod"},{"line_number":499,"context_line":"    def main():"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_59079b81","line":496,"range":{"start_line":496,"start_character":25,"end_line":496,"end_character":55},"updated":"2017-02-08 11:55:29.000000000","message":"exit with\n\n  sys.exit(return_code)","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"084631d0269b00df03d7c65fdde5b75ba0cbe961","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                     \u0027%(migrate)d Contract: %(contract)d\u0027) % {"},{"line_number":494,"context_line":"                         \u0027expand\u0027: expand_version,"},{"line_number":495,"context_line":"                         \u0027migrate\u0027: migrate_version,"},{"line_number":496,"context_line":"                         \u0027contract\u0027: contract_version})"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    @staticmethod"},{"line_number":499,"context_line":"    def main():"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_df051914","line":496,"range":{"start_line":496,"start_character":25,"end_line":496,"end_character":55},"in_reply_to":"1a430d35_59079b81","updated":"2017-02-08 17:45:22.000000000","message":"Done","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"895acbda66252272be6e8d05ab47eb7035db46b7","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                         \u0027contract\u0027: contract_version})"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    @staticmethod"},{"line_number":499,"context_line":"    def main():"},{"line_number":500,"context_line":"        assert_not_extension(CONF.command.extension)"},{"line_number":501,"context_line":"        # It is possible to run expand and migrate at the same time,"},{"line_number":502,"context_line":"        # expand needs to run first however."}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_b9ea3f72","line":499,"range":{"start_line":499,"start_character":4,"end_line":499,"end_character":15},"updated":"2017-02-08 11:55:29.000000000","message":"python will exit a main call with a return code of 0 by default, scripts can analyze to see if it completed properly:\n\n  # keystone_manage db_sync --check\n  # echo $?\n  # 0 (or 1, or 2, or 3)\n  # re-run keystone-manage depending on the output","commit_id":"88d8580c9fe7a3f32c4a46fa43ac32adc9961b54"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6185c1d5033af0473b725502df0757fc7316bcca","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                 \u0027running the new release.\u0027))"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        group.add_argument(\u0027--check\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":450,"context_line":"                           help\u003d(\u0027Check that there are no outstanding \u0027"},{"line_number":451,"context_line":"                                 \u0027database actions that still need to be \u0027"},{"line_number":452,"context_line":"                                 \u0027executed. This command can be used to \u0027"},{"line_number":453,"context_line":"                                 \u0027verify the condition of the current \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a430d35_8884410b","line":450,"range":{"start_line":450,"start_character":40,"end_line":450,"end_character":57},"updated":"2017-02-08 16:00:08.000000000","message":"\u0027Check for outstanding...\u0027","commit_id":"24045d6ee3d67360a50f9b664d74ea7ac0cc8052"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2c9576ef27a68334ab393c7994317bf33228ec72","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                 \u0027running the new release.\u0027))"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        group.add_argument(\u0027--check\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":450,"context_line":"                           help\u003d(\u0027Check that there are no outstanding \u0027"},{"line_number":451,"context_line":"                                 \u0027database actions that still need to be \u0027"},{"line_number":452,"context_line":"                                 \u0027executed. This command can be used to \u0027"},{"line_number":453,"context_line":"                                 \u0027verify the condition of the current \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a430d35_ebacdf8d","line":450,"range":{"start_line":450,"start_character":40,"end_line":450,"end_character":57},"in_reply_to":"1a430d35_8884410b","updated":"2017-02-08 16:15:21.000000000","message":"Done","commit_id":"24045d6ee3d67360a50f9b664d74ea7ac0cc8052"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"3f6b61c4545b317133537345b4396c2efe814c48","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        return parser"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    @classmethod"},{"line_number":458,"context_line":"    def _check_db_sync_status(self):"},{"line_number":459,"context_line":"        expand_version \u003d upgrades.get_db_version(repo\u003d\u0027expand_repo\u0027)"},{"line_number":460,"context_line":"        migrate_version \u003d upgrades.get_db_version("},{"line_number":461,"context_line":"            repo\u003d\u0027data_migration_repo\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a430d35_8bf51bee","line":458,"updated":"2017-02-08 16:06:53.000000000","message":"Ideally I\u0027d like to see the return codes are Steve suggested in PS18. Return codes are unambiguous and therefore very useful in automation tooling - it allows us to easily detect state and react accordingly.\n\nIf return codes are too hard to do, then ideally the output to stdout should be in a format that has the key information shown in a way that will never change. For example:\n\ncurrent state (in one word that will never change)\nnext step\nexplanation\n\nThen we\u0027re able to easily parse stdout and will likely only ever care about the first line/word - the rest of the info is for humans, not tools.","commit_id":"24045d6ee3d67360a50f9b664d74ea7ac0cc8052"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"6185c1d5033af0473b725502df0757fc7316bcca","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            LOG.info(_LI(\u0027All db_sync command versions are upgraded to the \u0027"},{"line_number":465,"context_line":"                         \u0027same version.\u0027))"},{"line_number":466,"context_line":"        elif expand_version \u003e migrate_version:"},{"line_number":467,"context_line":"            LOG.info(_LI(\u0027Expand version is ahead of migrate. Your next step \u0027"},{"line_number":468,"context_line":"                         \u0027is to run `keystone-manage db_sync --migrate` on \u0027"},{"line_number":469,"context_line":"                         \u0027the first node to forcefully perform data \u0027"},{"line_number":470,"context_line":"                         \u0027migrations. This process will migrate all data from \u0027"},{"line_number":471,"context_line":"                         \u0027the old schema to the new schema while the previous \u0027"},{"line_number":472,"context_line":"                         \u0027release continues to operate normally.\u0027))"},{"line_number":473,"context_line":"        elif migrate_version \u003e contract_version:"},{"line_number":474,"context_line":"            LOG.info(_LI(\u0027Migrate version is ahead of contract. Your next \u0027"},{"line_number":475,"context_line":"                         \u0027step is to update your configuration files (/etc/\u0027"},{"line_number":476,"context_line":"                         \u0027keystone/) on all nodes (except the first node, \u0027"},{"line_number":477,"context_line":"                         \u0027which you have already done) with those \u0027"},{"line_number":478,"context_line":"                         \u0027corresponding to the latest release. Upgrade all \u0027"},{"line_number":479,"context_line":"                         \u0027keystone nodes to the next release, and restart \u0027"},{"line_number":480,"context_line":"                         \u0027them one at a time. During this step, you will have \u0027"},{"line_number":481,"context_line":"                         \u0027a mix of releases operating side by side, both \u0027"},{"line_number":482,"context_line":"                         \u0027writing to the database. As the next release begins \u0027"},{"line_number":483,"context_line":"                         \u0027writing to the new schema, database triggers will \u0027"},{"line_number":484,"context_line":"                         \u0027also migrate the data to the old schema, keeping \u0027"},{"line_number":485,"context_line":"                         \u0027both data schemas in sync. Run `keystone-manage \u0027"},{"line_number":486,"context_line":"                         \u0027db_sync --contract` to remove the old schema and \u0027"},{"line_number":487,"context_line":"                         \u0027all data migration triggers.\u0027))"},{"line_number":488,"context_line":"        else:"},{"line_number":489,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":490,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a430d35_48f4195a","line":487,"range":{"start_line":467,"start_character":0,"end_line":487,"end_character":57},"updated":"2017-02-08 16:00:08.000000000","message":"This is a lot of verbiage, which is probably duplicated in the documentation. I\u0027d suggest simply giving the state, next stage and refer to the documentation. ie skip the explanation - that belongs in docs.\n\nThe docs reference should also include some way of figuring out the URL to be series specific, eg: https://docs.openstack.org/developer/keystone/upgrading.html\nversus the following when it releases:\nhttps://docs.openstack.org/developer/keystone/ocata/upgrading.html","commit_id":"24045d6ee3d67360a50f9b664d74ea7ac0cc8052"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2c9576ef27a68334ab393c7994317bf33228ec72","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            LOG.info(_LI(\u0027All db_sync command versions are upgraded to the \u0027"},{"line_number":465,"context_line":"                         \u0027same version.\u0027))"},{"line_number":466,"context_line":"        elif expand_version \u003e migrate_version:"},{"line_number":467,"context_line":"            LOG.info(_LI(\u0027Expand version is ahead of migrate. Your next step \u0027"},{"line_number":468,"context_line":"                         \u0027is to run `keystone-manage db_sync --migrate` on \u0027"},{"line_number":469,"context_line":"                         \u0027the first node to forcefully perform data \u0027"},{"line_number":470,"context_line":"                         \u0027migrations. This process will migrate all data from \u0027"},{"line_number":471,"context_line":"                         \u0027the old schema to the new schema while the previous \u0027"},{"line_number":472,"context_line":"                         \u0027release continues to operate normally.\u0027))"},{"line_number":473,"context_line":"        elif migrate_version \u003e contract_version:"},{"line_number":474,"context_line":"            LOG.info(_LI(\u0027Migrate version is ahead of contract. Your next \u0027"},{"line_number":475,"context_line":"                         \u0027step is to update your configuration files (/etc/\u0027"},{"line_number":476,"context_line":"                         \u0027keystone/) on all nodes (except the first node, \u0027"},{"line_number":477,"context_line":"                         \u0027which you have already done) with those \u0027"},{"line_number":478,"context_line":"                         \u0027corresponding to the latest release. Upgrade all \u0027"},{"line_number":479,"context_line":"                         \u0027keystone nodes to the next release, and restart \u0027"},{"line_number":480,"context_line":"                         \u0027them one at a time. During this step, you will have \u0027"},{"line_number":481,"context_line":"                         \u0027a mix of releases operating side by side, both \u0027"},{"line_number":482,"context_line":"                         \u0027writing to the database. As the next release begins \u0027"},{"line_number":483,"context_line":"                         \u0027writing to the new schema, database triggers will \u0027"},{"line_number":484,"context_line":"                         \u0027also migrate the data to the old schema, keeping \u0027"},{"line_number":485,"context_line":"                         \u0027both data schemas in sync. Run `keystone-manage \u0027"},{"line_number":486,"context_line":"                         \u0027db_sync --contract` to remove the old schema and \u0027"},{"line_number":487,"context_line":"                         \u0027all data migration triggers.\u0027))"},{"line_number":488,"context_line":"        else:"},{"line_number":489,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":490,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a430d35_8b9b5b65","line":487,"range":{"start_line":467,"start_character":0,"end_line":487,"end_character":57},"in_reply_to":"1a430d35_48f4195a","updated":"2017-02-08 16:15:21.000000000","message":"Done","commit_id":"24045d6ee3d67360a50f9b664d74ea7ac0cc8052"},{"author":{"_account_id":6816,"name":"Jesse Pretorius","email":"jesse@odyssey4.me","username":"jesse-pretorius"},"change_message_id":"44edd3871daa39fb6ebc7173764d9a4dcd8daaed","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                 \u0027running the new release.\u0027))"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        group.add_argument(\u0027--check\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":450,"context_line":"                           help\u003d(\u0027Check that for outstanding database actions \u0027"},{"line_number":451,"context_line":"                                 \u0027that still need to be executed. This \u0027"},{"line_number":452,"context_line":"                                 \u0027command can be used to verify the condition \u0027"},{"line_number":453,"context_line":"                                 \u0027of the current database state.\u0027))"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a430d35_8b851bd0","line":450,"range":{"start_line":450,"start_character":40,"end_line":450,"end_character":45},"updated":"2017-02-08 16:20:03.000000000","message":"remove \u0027that \u0027","commit_id":"9f8d4c50e2f3f3e96aab804dbabc026d79b3584f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f7b4da20bc38eda7139d310c37d6a26fe99ad0e6","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    @classmethod"},{"line_number":457,"context_line":"    def _check_db_sync_status(self):"},{"line_number":458,"context_line":"        status \u003d 0"},{"line_number":459,"context_line":"        expand_version \u003d upgrades.get_db_version(repo\u003d\u0027expand_repo\u0027)"},{"line_number":460,"context_line":"        migrate_version \u003d upgrades.get_db_version("},{"line_number":461,"context_line":"            repo\u003d\u0027data_migration_repo\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a430d35_3aef0b1f","line":458,"updated":"2017-02-08 17:47:48.000000000","message":"We also need to find the max version of the installed migration scripts.","commit_id":"36a49906f8f3c8926ac3b10277e3283b173b55bf"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f7b4da20bc38eda7139d310c37d6a26fe99ad0e6","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                         \u0027expand\u0027: expand_version,"},{"line_number":486,"context_line":"                         \u0027migrate\u0027: migrate_version,"},{"line_number":487,"context_line":"                         \u0027contract\u0027: contract_version})"},{"line_number":488,"context_line":"        LOG.info(_LI(\u0027RC \u003d %d\u0027) % status)"},{"line_number":489,"context_line":"        sys.exit(status)"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a430d35_7a2273a4","line":488,"updated":"2017-02-08 17:47:48.000000000","message":"This probably doesn\u0027t need to be logged since it\u0027s going to be available by inspecting the return code (sorry if this came across differently in the paste!).","commit_id":"36a49906f8f3c8926ac3b10277e3283b173b55bf"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"68d5c125994ba0bd278836d0fc09c77a9730448c","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                 \u0027should be run after all keystone nodes are \u0027"},{"line_number":448,"context_line":"                                 \u0027running the new release.\u0027))"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        group.add_argument(\u0027--check\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":451,"context_line":"                           help\u003d(\u0027Check for outstanding database actions that \u0027"},{"line_number":452,"context_line":"                                 \u0027still need to be executed. This command can \u0027"},{"line_number":453,"context_line":"                                 \u0027be used to verify the condition of the \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_27fe13ae","line":450,"updated":"2017-02-08 19:35:47.000000000","message":"We don\u0027t intend on this being using in conjunction with `--expand`, `--migrate`, or `--contract`. We should add a test to ensure it\u0027s mutually exclusive with that group.","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"1ec88da40edd76602049b1bfe6cd4872c81a444b","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                 \u0027should be run after all keystone nodes are \u0027"},{"line_number":448,"context_line":"                                 \u0027running the new release.\u0027))"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        group.add_argument(\u0027--check\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":451,"context_line":"                           help\u003d(\u0027Check for outstanding database actions that \u0027"},{"line_number":452,"context_line":"                                 \u0027still need to be executed. This command can \u0027"},{"line_number":453,"context_line":"                                 \u0027be used to verify the condition of the \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_58a13af7","line":450,"in_reply_to":"1a430d35_27fe13ae","updated":"2017-02-08 20:57:15.000000000","message":"How can it be used in conjunction when the db_sync command manually calls the three upgrade methods when no specific db_sync command is given with db_sync?\n\nhttps://github.com/openstack/keystone/blob/master/keystone/common/sql/upgrades.py#L250-L253","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f3aaed7d7685bab28d42acad0773ce1ecba14c7c","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                 \u0027should be run after all keystone nodes are \u0027"},{"line_number":448,"context_line":"                                 \u0027running the new release.\u0027))"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        group.add_argument(\u0027--check\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":451,"context_line":"                           help\u003d(\u0027Check for outstanding database actions that \u0027"},{"line_number":452,"context_line":"                                 \u0027still need to be executed. This command can \u0027"},{"line_number":453,"context_line":"                                 \u0027be used to verify the condition of the \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_d7fdf8b1","line":450,"in_reply_to":"1a430d35_58a13af7","updated":"2017-02-08 21:41:04.000000000","message":"Oh - I meant the ability to enforce mutual exclusion with argparse. I don\u0027t think it would make sense to expect ``keystone-manage db_sync --expand --check`` to work. In that case I\u0027d expect the CLI to throw me some sort of error saying \"hey, either run --expand or --check\"\n\nhttps://docs.python.org/3/library/argparse.html#mutual-exclusion","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"b3963dbae795a5cb15f5aa2f12b6ae330456fb87","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                 \u0027should be run after all keystone nodes are \u0027"},{"line_number":448,"context_line":"                                 \u0027running the new release.\u0027))"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        group.add_argument(\u0027--check\u0027, default\u003dFalse, action\u003d\u0027store_true\u0027,"},{"line_number":451,"context_line":"                           help\u003d(\u0027Check for outstanding database actions that \u0027"},{"line_number":452,"context_line":"                                 \u0027still need to be executed. This command can \u0027"},{"line_number":453,"context_line":"                                 \u0027be used to verify the condition of the \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_3a59c18e","line":450,"in_reply_to":"1a430d35_d7fdf8b1","updated":"2017-02-08 23:32:51.000000000","message":"Ahh I see :) test line 429 with a unit test then","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"68d5c125994ba0bd278836d0fc09c77a9730448c","unresolved":false,"context_lines":[{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        repo \u003d migrate.versioning.repository.Repository("},{"line_number":466,"context_line":"            upgrades.find_repo(\u0027expand_repo\u0027))"},{"line_number":467,"context_line":"        latest_version \u003d int(max(repo.versions.versions))"},{"line_number":468,"context_line":"        LOG.info(_LI(\u0027The latest installed migration script version is: %d\u0027) %"},{"line_number":469,"context_line":"                 latest_version)"},{"line_number":470,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_47295f89","line":467,"updated":"2017-02-08 19:35:47.000000000","message":"nit: I\u0027d probably call this something like `migration_script_version`, since `latest` can mean difference things depending on the repo.","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"1ec88da40edd76602049b1bfe6cd4872c81a444b","unresolved":false,"context_lines":[{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        repo \u003d migrate.versioning.repository.Repository("},{"line_number":466,"context_line":"            upgrades.find_repo(\u0027expand_repo\u0027))"},{"line_number":467,"context_line":"        latest_version \u003d int(max(repo.versions.versions))"},{"line_number":468,"context_line":"        LOG.info(_LI(\u0027The latest installed migration script version is: %d\u0027) %"},{"line_number":469,"context_line":"                 latest_version)"},{"line_number":470,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_382f0e40","line":467,"in_reply_to":"1a430d35_47295f89","updated":"2017-02-08 20:57:15.000000000","message":"Done","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"68d5c125994ba0bd278836d0fc09c77a9730448c","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        if (contract_version \u003e migrate_version or contract_version \u003e"},{"line_number":472,"context_line":"                expand_version or migrate_version \u003e expand_version):"},{"line_number":473,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":474,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"},{"line_number":475,"context_line":"                         \u0027keystone/upgrading.html\u0027))"},{"line_number":476,"context_line":"            status \u003d 2"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_876d07ce","line":473,"updated":"2017-02-08 19:35:47.000000000","message":"This would technically be the unhappiest of paths, right? In this case I\u0027d expect the return code to be 1 (error).","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"1ec88da40edd76602049b1bfe6cd4872c81a444b","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        if (contract_version \u003e migrate_version or contract_version \u003e"},{"line_number":472,"context_line":"                expand_version or migrate_version \u003e expand_version):"},{"line_number":473,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":474,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"},{"line_number":475,"context_line":"                         \u0027keystone/upgrading.html\u0027))"},{"line_number":476,"context_line":"            status \u003d 2"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_f8e66642","line":473,"in_reply_to":"1a430d35_876d07ce","updated":"2017-02-08 20:57:15.000000000","message":"Good point! Done!","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"68d5c125994ba0bd278836d0fc09c77a9730448c","unresolved":false,"context_lines":[{"line_number":487,"context_line":"                         \u0027step is to run `keystone-manage db_sync --contract`.\u0027"},{"line_number":488,"context_line":"                         ))"},{"line_number":489,"context_line":"            status \u003d 5"},{"line_number":490,"context_line":"        elif expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"},{"line_number":491,"context_line":"            LOG.info(_LI(\u0027All db_sync command versions are upgraded to the \u0027"},{"line_number":492,"context_line":"                         \u0027same version and up-to-date.\u0027))"},{"line_number":493,"context_line":"        LOG.info(_LI(\u0027Current command versions: Expand: %(expand)d Migrate: \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_27a8d376","line":490,"updated":"2017-02-08 19:35:47.000000000","message":"This needs to make sure we take into account the migration script versions, too. I\u0027d double check with our operators on this, but I\u0027d assume that if the latest migration script versions match the three repository version, we\u0027d return 0, a successful non-error code.\n\nRestructuring this might make readability easier, too:\n\n  expand_version \u003d upgrades.get_db_version(repo\u003d\u0027expand_repo\u0027)\n  migrate_version \u003d ...\n  contract_version \u003d ...\n  script_version \u003d ...\n\n  status \u003d 0\n  if script_version \u003d\u003d expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:\n      msg \u003d \u0027everything is up to date and you have no pending migrations!\u0027\n  elif script_version \u003e expand_version:\n      msg \u003d \u0027...\u0027\n      status \u003d 2\n  elif expand_version \u003e migrate_version:\n      msg \u003d \u0027...\u0027\n      status \u003d 3\n  ...\n  else:\n      status \u003d 1\n      msg \u003d \u0027something real bad happened\u0027\n      # this could essentially result in an error or raise one","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"1ec88da40edd76602049b1bfe6cd4872c81a444b","unresolved":false,"context_lines":[{"line_number":487,"context_line":"                         \u0027step is to run `keystone-manage db_sync --contract`.\u0027"},{"line_number":488,"context_line":"                         ))"},{"line_number":489,"context_line":"            status \u003d 5"},{"line_number":490,"context_line":"        elif expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"},{"line_number":491,"context_line":"            LOG.info(_LI(\u0027All db_sync command versions are upgraded to the \u0027"},{"line_number":492,"context_line":"                         \u0027same version and up-to-date.\u0027))"},{"line_number":493,"context_line":"        LOG.info(_LI(\u0027Current command versions: Expand: %(expand)d Migrate: \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_d870ca74","line":490,"in_reply_to":"1a430d35_27a8d376","updated":"2017-02-08 20:57:15.000000000","message":"isn\u0027t this essentially what is already being done with the first elif? If latest_version isn\u0027t greater than expanded_version we essentially handle the fact that the expand is already up to date and therefore can use this to check if migrate and contract are also updated to the same version","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"b3963dbae795a5cb15f5aa2f12b6ae330456fb87","unresolved":false,"context_lines":[{"line_number":487,"context_line":"                         \u0027step is to run `keystone-manage db_sync --contract`.\u0027"},{"line_number":488,"context_line":"                         ))"},{"line_number":489,"context_line":"            status \u003d 5"},{"line_number":490,"context_line":"        elif expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"},{"line_number":491,"context_line":"            LOG.info(_LI(\u0027All db_sync command versions are upgraded to the \u0027"},{"line_number":492,"context_line":"                         \u0027same version and up-to-date.\u0027))"},{"line_number":493,"context_line":"        LOG.info(_LI(\u0027Current command versions: Expand: %(expand)d Migrate: \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_1a66c550","line":490,"in_reply_to":"1a430d35_b754ecc9","updated":"2017-02-08 23:32:51.000000000","message":"Done","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f3aaed7d7685bab28d42acad0773ce1ecba14c7c","unresolved":false,"context_lines":[{"line_number":487,"context_line":"                         \u0027step is to run `keystone-manage db_sync --contract`.\u0027"},{"line_number":488,"context_line":"                         ))"},{"line_number":489,"context_line":"            status \u003d 5"},{"line_number":490,"context_line":"        elif expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"},{"line_number":491,"context_line":"            LOG.info(_LI(\u0027All db_sync command versions are upgraded to the \u0027"},{"line_number":492,"context_line":"                         \u0027same version and up-to-date.\u0027))"},{"line_number":493,"context_line":"        LOG.info(_LI(\u0027Current command versions: Expand: %(expand)d Migrate: \u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_b754ecc9","line":490,"in_reply_to":"1a430d35_d870ca74","updated":"2017-02-08 21:41:04.000000000","message":"That\u0027s true - I think I just tend to lean one the side of being verbose (paranoid even) in the checking?","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"68d5c125994ba0bd278836d0fc09c77a9730448c","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        elif expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"},{"line_number":491,"context_line":"            LOG.info(_LI(\u0027All db_sync command versions are upgraded to the \u0027"},{"line_number":492,"context_line":"                         \u0027same version and up-to-date.\u0027))"},{"line_number":493,"context_line":"        LOG.info(_LI(\u0027Current command versions: Expand: %(expand)d Migrate: \u0027"},{"line_number":494,"context_line":"                     \u0027%(migrate)d Contract: %(contract)d\u0027) % {"},{"line_number":495,"context_line":"                         \u0027expand\u0027: expand_version,"},{"line_number":496,"context_line":"                         \u0027migrate\u0027: migrate_version,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_c428ed9c","line":493,"updated":"2017-02-08 19:35:47.000000000","message":"s/command/repository/ ?","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"1ec88da40edd76602049b1bfe6cd4872c81a444b","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        elif expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"},{"line_number":491,"context_line":"            LOG.info(_LI(\u0027All db_sync command versions are upgraded to the \u0027"},{"line_number":492,"context_line":"                         \u0027same version and up-to-date.\u0027))"},{"line_number":493,"context_line":"        LOG.info(_LI(\u0027Current command versions: Expand: %(expand)d Migrate: \u0027"},{"line_number":494,"context_line":"                     \u0027%(migrate)d Contract: %(contract)d\u0027) % {"},{"line_number":495,"context_line":"                         \u0027expand\u0027: expand_version,"},{"line_number":496,"context_line":"                         \u0027migrate\u0027: migrate_version,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a430d35_7825165a","line":493,"in_reply_to":"1a430d35_c428ed9c","updated":"2017-02-08 20:57:15.000000000","message":"Done","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08f62289ef8996440daa100b1361f6a9c00de24b","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":472,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"},{"line_number":473,"context_line":"                         \u0027keystone/upgrading.html\u0027))"},{"line_number":474,"context_line":"            status \u003d 1"},{"line_number":475,"context_line":"        elif migration_script_version \u003e expand_version:"},{"line_number":476,"context_line":"            LOG.info(_LI(\u0027Your database is not up to date. Your first step is \u0027"},{"line_number":477,"context_line":"                         \u0027to run `keystone-manage db_sync --expand`.\u0027))"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a430d35_137cf5b3","line":474,"updated":"2017-02-08 21:35:40.000000000","message":"We might be able to get this for free if we `raise` an exception.\n\nhttps://github.com/openstack/keystone/blob/master/keystone/cmd/cli.py#L1118-L1119","commit_id":"01bc7796fa320f382b4e43623ca8ae16de289f72"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"60e613eaea0edfe9e50625acc79c9a6b3465124e","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":472,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"},{"line_number":473,"context_line":"                         \u0027keystone/upgrading.html\u0027))"},{"line_number":474,"context_line":"            status \u003d 1"},{"line_number":475,"context_line":"        elif migration_script_version \u003e expand_version:"},{"line_number":476,"context_line":"            LOG.info(_LI(\u0027Your database is not up to date. Your first step is \u0027"},{"line_number":477,"context_line":"                         \u0027to run `keystone-manage db_sync --expand`.\u0027))"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a430d35_ba769103","line":474,"in_reply_to":"1a430d35_137cf5b3","updated":"2017-02-08 23:33:05.000000000","message":"But wouldn\u0027t that exit without printing the additional log info for the user? Or is that not necessary in this instance when the db is out of order","commit_id":"01bc7796fa320f382b4e43623ca8ae16de289f72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08f62289ef8996440daa100b1361f6a9c00de24b","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                         \u0027step is to run `keystone-manage db_sync --contract`.\u0027"},{"line_number":486,"context_line":"                         ))"},{"line_number":487,"context_line":"            status \u003d 4"},{"line_number":488,"context_line":"        elif expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"},{"line_number":489,"context_line":"            LOG.info(_LI(\u0027All db_sync commands are upgraded to the same \u0027"},{"line_number":490,"context_line":"                         \u0027version and up-to-date.\u0027))"},{"line_number":491,"context_line":"        LOG.info(_LI(\u0027The latest installed migration script version is: \u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a430d35_77444449","line":488,"updated":"2017-02-08 21:35:40.000000000","message":"We could be safe here and include the migration_script_version in the comparison as well.","commit_id":"01bc7796fa320f382b4e43623ca8ae16de289f72"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"60e613eaea0edfe9e50625acc79c9a6b3465124e","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                         \u0027step is to run `keystone-manage db_sync --contract`.\u0027"},{"line_number":486,"context_line":"                         ))"},{"line_number":487,"context_line":"            status \u003d 4"},{"line_number":488,"context_line":"        elif expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"},{"line_number":489,"context_line":"            LOG.info(_LI(\u0027All db_sync commands are upgraded to the same \u0027"},{"line_number":490,"context_line":"                         \u0027version and up-to-date.\u0027))"},{"line_number":491,"context_line":"        LOG.info(_LI(\u0027The latest installed migration script version is: \u0027"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a430d35_fa62d93c","line":488,"in_reply_to":"1a430d35_77444449","updated":"2017-02-08 23:33:05.000000000","message":"Done","commit_id":"01bc7796fa320f382b4e43623ca8ae16de289f72"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"311756ca0ca41de946b4291051d4bf761104f703","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        return parser"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    @classmethod"},{"line_number":458,"context_line":"    def _check_db_sync_status(self):"},{"line_number":459,"context_line":"        status \u003d 0"},{"line_number":460,"context_line":"        expand_version \u003d upgrades.get_db_version(repo\u003d\u0027expand_repo\u0027)"},{"line_number":461,"context_line":"        migrate_version \u003d upgrades.get_db_version("}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_c3ba7171","line":458,"updated":"2017-02-09 19:05:24.000000000","message":"Is there any reason to make this protected?","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"34da1ee4163eb043b214484e611831a4be545088","unresolved":false,"context_lines":[{"line_number":455,"context_line":"        return parser"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    @classmethod"},{"line_number":458,"context_line":"    def _check_db_sync_status(self):"},{"line_number":459,"context_line":"        status \u003d 0"},{"line_number":460,"context_line":"        expand_version \u003d upgrades.get_db_version(repo\u003d\u0027expand_repo\u0027)"},{"line_number":461,"context_line":"        migrate_version \u003d upgrades.get_db_version("}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_59366ee8","line":458,"in_reply_to":"1a430d35_c3ba7171","updated":"2017-02-09 19:42:20.000000000","message":"Done","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"311756ca0ca41de946b4291051d4bf761104f703","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            upgrades.find_repo(\u0027expand_repo\u0027))"},{"line_number":467,"context_line":"        migration_script_version \u003d int(max(repo.versions.versions))"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        if (contract_version \u003e migrate_version or contract_version \u003e"},{"line_number":470,"context_line":"                expand_version or migrate_version \u003e expand_version):"},{"line_number":471,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":472,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_433e812a","line":469,"updated":"2017-02-09 19:05:24.000000000","message":"(nit) I think that this can be done with two comparisons \u0027contract \u003e migrate\u0027 and \u0027migrate \u003e expand\u0027","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"34da1ee4163eb043b214484e611831a4be545088","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            upgrades.find_repo(\u0027expand_repo\u0027))"},{"line_number":467,"context_line":"        migration_script_version \u003d int(max(repo.versions.versions))"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        if (contract_version \u003e migrate_version or contract_version \u003e"},{"line_number":470,"context_line":"                expand_version or migrate_version \u003e expand_version):"},{"line_number":471,"context_line":"            LOG.info(_LI(\u0027Your database is out of sync. For more information \u0027"},{"line_number":472,"context_line":"                         \u0027refer to https://docs.openstack.org/developer/\u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_3939a2d9","line":469,"in_reply_to":"1a430d35_433e812a","updated":"2017-02-09 19:42:20.000000000","message":"Done","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"311756ca0ca41de946b4291051d4bf761104f703","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                                        \u0027expand\u0027: expand_version,"},{"line_number":497,"context_line":"                                        \u0027migrate\u0027: migrate_version,"},{"line_number":498,"context_line":"                                        \u0027contract\u0027: contract_version})"},{"line_number":499,"context_line":"        sys.exit(status)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    @staticmethod"},{"line_number":502,"context_line":"    def main():"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_4324c1c5","line":499,"updated":"2017-02-09 19:05:24.000000000","message":"(nit) To make tests cleaner maybe the main() should be the thing that actually does the exit?","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"34da1ee4163eb043b214484e611831a4be545088","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                                        \u0027expand\u0027: expand_version,"},{"line_number":497,"context_line":"                                        \u0027migrate\u0027: migrate_version,"},{"line_number":498,"context_line":"                                        \u0027contract\u0027: contract_version})"},{"line_number":499,"context_line":"        sys.exit(status)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    @staticmethod"},{"line_number":502,"context_line":"    def main():"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_9947f64a","line":499,"in_reply_to":"1a430d35_4324c1c5","updated":"2017-02-09 19:42:20.000000000","message":"Done","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"05f6a0fe1ed2d29db4924c9d99ac5db4a509f057","unresolved":false,"context_lines":[{"line_number":489,"context_line":"                contract_version):"},{"line_number":490,"context_line":"            LOG.info(_LI(\u0027All db_sync commands are upgraded to the same \u0027"},{"line_number":491,"context_line":"                         \u0027version and up-to-date.\u0027))"},{"line_number":492,"context_line":"        LOG.info(_LI(\u0027The latest installed migration script version is: \u0027"},{"line_number":493,"context_line":"                     \u0027%(script)d.\\nCurrent repository versions:\\nExpand: \u0027"},{"line_number":494,"context_line":"                     \u0027%(expand)d \\nMigrate: %(migrate)d\\nContract: \u0027"},{"line_number":495,"context_line":"                     \u0027%(contract)d\u0027) % {\u0027script\u0027: migration_script_version,"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a430d35_dd9fa963","line":492,"updated":"2017-02-09 20:45:32.000000000","message":"I feel like this should be debug level? I\u0027m not sure this is handy on every execution (when I can just check the directories), but it\u0027s definitely handy for a certain audience.","commit_id":"d5ce8ea0ed6a3b9f748427d1b552fb88ad738545"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"05f6a0fe1ed2d29db4924c9d99ac5db4a509f057","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        # It is possible to run expand and migrate at the same time,"},{"line_number":505,"context_line":"        # expand needs to run first however."},{"line_number":506,"context_line":"        if CONF.command.check:"},{"line_number":507,"context_line":"            sys.exit(DbSync.check_db_sync_status())"},{"line_number":508,"context_line":"        elif CONF.command.expand and CONF.command.migrate:"},{"line_number":509,"context_line":"            upgrades.expand_schema()"},{"line_number":510,"context_line":"            upgrades.migrate_data()"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a430d35_7d78752c","line":507,"updated":"2017-02-09 20:45:32.000000000","message":"Based on the other commands here, it seems like the function itself should be responsible for raising it\u0027s own system exit.","commit_id":"d5ce8ea0ed6a3b9f748427d1b552fb88ad738545"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1066b6898488d8152e7d95d53993d60971f792f3","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        # It is possible to run expand and migrate at the same time,"},{"line_number":505,"context_line":"        # expand needs to run first however."},{"line_number":506,"context_line":"        if CONF.command.check:"},{"line_number":507,"context_line":"            sys.exit(DbSync.check_db_sync_status())"},{"line_number":508,"context_line":"        elif CONF.command.expand and CONF.command.migrate:"},{"line_number":509,"context_line":"            upgrades.expand_schema()"},{"line_number":510,"context_line":"            upgrades.migrate_data()"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa31d9ce_4d930dfb","line":507,"in_reply_to":"1a430d35_7d78752c","updated":"2017-02-09 21:20:22.000000000","message":"I had him change to this to make the tests nicer. Specifically to make checking status codes simpler. I think it also makes sense to not exit from anywhere besides main when possible.","commit_id":"d5ce8ea0ed6a3b9f748427d1b552fb88ad738545"}],"keystone/common/sql/upgrades.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"43bb739685bda862519fb27f0c73fd0cc10c4911","unresolved":false,"context_lines":[{"line_number":284,"context_line":"    \"\"\""},{"line_number":285,"context_line":"    \"\"\""},{"line_number":286,"context_line":"    suggestion \u003d \u0027\u0027"},{"line_number":287,"context_line":"    current, latest, state \u003d _get_command_state_info(\u0027expand\u0027)"},{"line_number":288,"context_line":"    print \u0027 {0:^10s} {1:^17s} {2:^16s} {3:^12s}\u0027.format("},{"line_number":289,"context_line":"        \u0027Command\u0027, \u0027Current Version\u0027, \u0027Latest Version\u0027, \u0027State\u0027, \u0027Status\u0027)"},{"line_number":290,"context_line":"    print \u0027 {0:^10s} {1:^17d} {2:^16d} {3:^12s}\u0027.format("}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_b972bb0f","line":287,"updated":"2017-02-02 22:25:42.000000000","message":"Based on the information we have here - we could even make some assumptions about the repository as a whole. For example, if the version of the migrate repository is less than the state of the expand repository, we know the operator\u0027s next step is probably to ``keystone-manage db_sync --migrate``.\n\nProviding the version information is no doubt useful, but if I\u0027m an operator that doesn\u0027t completely understand the implementation details of how keystone achieves rolling upgrades, these numbers don\u0027t really mean much to me.\n\nWe could even check for extremely strange cases where the contract repo is ahead of the migrate repo and wave a *huge* red flag at the operator if we wanted to.","commit_id":"8740db35fc724852c7fccd33d0dde603a65035e8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"43bb739685bda862519fb27f0c73fd0cc10c4911","unresolved":false,"context_lines":[{"line_number":286,"context_line":"    suggestion \u003d \u0027\u0027"},{"line_number":287,"context_line":"    current, latest, state \u003d _get_command_state_info(\u0027expand\u0027)"},{"line_number":288,"context_line":"    print \u0027 {0:^10s} {1:^17s} {2:^16s} {3:^12s}\u0027.format("},{"line_number":289,"context_line":"        \u0027Command\u0027, \u0027Current Version\u0027, \u0027Latest Version\u0027, \u0027State\u0027, \u0027Status\u0027)"},{"line_number":290,"context_line":"    print \u0027 {0:^10s} {1:^17d} {2:^16d} {3:^12s}\u0027.format("},{"line_number":291,"context_line":"        \u0027expand\u0027, current, latest, state)"},{"line_number":292,"context_line":"    if \u0027Incomplete\u0027 in state:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_19990f6f","line":289,"updated":"2017-02-02 22:25:42.000000000","message":"We typically leave the printing of information to keystone/cmd/cli.py. I\u0027d suggest only modifying this file to give you the information you need about the various migration repositories. Then from keystone/cmd/cli.py you can call this function and then translate or relay the data however you want.","commit_id":"8740db35fc724852c7fccd33d0dde603a65035e8"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"94d03967c587c84984431004cff04ab26a4b38a5","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    to check the current status of expand, migrate, and contract."},{"line_number":267,"context_line":"    \"\"\""},{"line_number":268,"context_line":"    for cmd in info_dict:"},{"line_number":269,"context_line":"        cmd[\u0027current\u0027] \u003d int(six.text_type(get_db_version(cmd[\u0027repo\u0027])))"},{"line_number":270,"context_line":"        abs_path \u003d find_repo(cmd[\u0027repo\u0027])"},{"line_number":271,"context_line":"        repo \u003d migrate.versioning.repository.Repository(abs_path)"},{"line_number":272,"context_line":"        cmd[\u0027latest\u0027] \u003d int(max(repo.versions.versions))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_2f1225b5","line":269,"updated":"2017-02-03 17:04:00.000000000","message":"What are you converting to unicode and then to an int? Seems like you wouldn\u0027t need to convert to unicode at all.","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2af0955ff0e9cdea0acb55fee1dbe81c5ecf1717","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    to check the current status of expand, migrate, and contract."},{"line_number":267,"context_line":"    \"\"\""},{"line_number":268,"context_line":"    for cmd in info_dict:"},{"line_number":269,"context_line":"        cmd[\u0027current\u0027] \u003d int(six.text_type(get_db_version(cmd[\u0027repo\u0027])))"},{"line_number":270,"context_line":"        abs_path \u003d find_repo(cmd[\u0027repo\u0027])"},{"line_number":271,"context_line":"        repo \u003d migrate.versioning.repository.Repository(abs_path)"},{"line_number":272,"context_line":"        cmd[\u0027latest\u0027] \u003d int(max(repo.versions.versions))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_98b99dec","line":269,"in_reply_to":"1a430d35_2f1225b5","updated":"2017-02-03 18:40:49.000000000","message":"Done","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"373c5dc2f1307d5ecb640d1c5e65fdb108c74963","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    for cmd in info_dict:"},{"line_number":269,"context_line":"        cmd[\u0027current\u0027] \u003d int(six.text_type(get_db_version(cmd[\u0027repo\u0027])))"},{"line_number":270,"context_line":"        abs_path \u003d find_repo(cmd[\u0027repo\u0027])"},{"line_number":271,"context_line":"        repo \u003d migrate.versioning.repository.Repository(abs_path)"},{"line_number":272,"context_line":"        cmd[\u0027latest\u0027] \u003d int(max(repo.versions.versions))"},{"line_number":273,"context_line":"        if cmd[\u0027current\u0027] \u003d\u003d cmd[\u0027latest\u0027]:"},{"line_number":274,"context_line":"            cmd[\u0027state\u0027] \u003d \u0027Complete\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_92889ee9","line":271,"updated":"2017-02-03 17:31:18.000000000","message":"I\u0027d say that we strictly rely on information provided from the database and not try to loop in repository versions just yet. If that\u0027s the case, we could just use get_db_version() to get the versions of each repository, then we wouldn\u0027t need to make any changes to this module at all.","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"2af0955ff0e9cdea0acb55fee1dbe81c5ecf1717","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    for cmd in info_dict:"},{"line_number":269,"context_line":"        cmd[\u0027current\u0027] \u003d int(six.text_type(get_db_version(cmd[\u0027repo\u0027])))"},{"line_number":270,"context_line":"        abs_path \u003d find_repo(cmd[\u0027repo\u0027])"},{"line_number":271,"context_line":"        repo \u003d migrate.versioning.repository.Repository(abs_path)"},{"line_number":272,"context_line":"        cmd[\u0027latest\u0027] \u003d int(max(repo.versions.versions))"},{"line_number":273,"context_line":"        if cmd[\u0027current\u0027] \u003d\u003d cmd[\u0027latest\u0027]:"},{"line_number":274,"context_line":"            cmd[\u0027state\u0027] \u003d \u0027Complete\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_d8cb2571","line":271,"in_reply_to":"1a430d35_92889ee9","updated":"2017-02-03 18:40:49.000000000","message":"Done","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4488862c30b5ad57ebc84a178dd977cb6c5dbf12","unresolved":false,"context_lines":[{"line_number":267,"context_line":"    \"\"\""},{"line_number":268,"context_line":"    expand_version \u003d get_db_version(repo\u003dEXPAND_REPO)"},{"line_number":269,"context_line":"    migrate_version \u003d get_db_version(repo\u003dDATA_MIGRATION_REPO)"},{"line_number":270,"context_line":"    contract_version \u003d get_db_version(repo\u003dCONTRACT_REPO)"},{"line_number":271,"context_line":"    # This will be changed to send to a cli method that will handle the"},{"line_number":272,"context_line":"    # printing in the future"},{"line_number":273,"context_line":"    if expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_6e034674","line":270,"updated":"2017-02-03 21:35:10.000000000","message":"Are the versions going to be called from cli.py instead of here, too?","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"45c42dbdf02e4d88b25cd36f8a66c24456246376","unresolved":false,"context_lines":[{"line_number":267,"context_line":"    \"\"\""},{"line_number":268,"context_line":"    expand_version \u003d get_db_version(repo\u003dEXPAND_REPO)"},{"line_number":269,"context_line":"    migrate_version \u003d get_db_version(repo\u003dDATA_MIGRATION_REPO)"},{"line_number":270,"context_line":"    contract_version \u003d get_db_version(repo\u003dCONTRACT_REPO)"},{"line_number":271,"context_line":"    # This will be changed to send to a cli method that will handle the"},{"line_number":272,"context_line":"    # printing in the future"},{"line_number":273,"context_line":"    if expand_version \u003d\u003d migrate_version \u003d\u003d contract_version:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_9d02623d","line":270,"in_reply_to":"1a430d35_6e034674","updated":"2017-02-03 23:45:41.000000000","message":"Done","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"}],"keystone/tests/unit/test_cli.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"94d03967c587c84984431004cff04ab26a4b38a5","unresolved":false,"context_lines":[{"line_number":696,"context_line":"    def test_db_sync_check(self):"},{"line_number":697,"context_line":"        self.command_check \u003d True"},{"line_number":698,"context_line":"        self.useFixture(mockpatch.PatchObject("},{"line_number":699,"context_line":"            CONF, \u0027command\u0027, self.FakeConfCommand(self)))"},{"line_number":700,"context_line":"        cli.DbSync.main()"},{"line_number":701,"context_line":"        self._assert_correct_call(upgrades.check)"},{"line_number":702,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_cf236104","line":699,"updated":"2017-02-03 17:04:00.000000000","message":"This seems strange. Why would you have to mock a config object?","commit_id":"73891f61e586c865233ee96ec9061d917bffa6d5"}],"keystone/tests/unit/test_sql_upgrade.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4488862c30b5ad57ebc84a178dd977cb6c5dbf12","unresolved":false,"context_lines":[{"line_number":1648,"context_line":"        # Upgrade the legacy repository"},{"line_number":1649,"context_line":"        self.upgrade()"},{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"    def test_out_of_order_upgrade(self):"},{"line_number":1652,"context_line":"        # This will not be an actual test, this is for my purposes to show that"},{"line_number":1653,"context_line":"        # db_sync with zero downtime allows you to upgrade out of order"},{"line_number":1654,"context_line":"        self.expand(1)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_ae6a8e18","line":1651,"updated":"2017-02-03 21:35:10.000000000","message":"This is an awesome test and could probably be proposed on it\u0027s own since it is not directly related to the bug we\u0027re fixing with this patch.","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"45c42dbdf02e4d88b25cd36f8a66c24456246376","unresolved":false,"context_lines":[{"line_number":1648,"context_line":"        # Upgrade the legacy repository"},{"line_number":1649,"context_line":"        self.upgrade()"},{"line_number":1650,"context_line":""},{"line_number":1651,"context_line":"    def test_out_of_order_upgrade(self):"},{"line_number":1652,"context_line":"        # This will not be an actual test, this is for my purposes to show that"},{"line_number":1653,"context_line":"        # db_sync with zero downtime allows you to upgrade out of order"},{"line_number":1654,"context_line":"        self.expand(1)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_fd90c6ee","line":1651,"in_reply_to":"1a430d35_ae6a8e18","updated":"2017-02-03 23:45:41.000000000","message":"Done","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4488862c30b5ad57ebc84a178dd977cb6c5dbf12","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"        self.contract(2)"},{"line_number":1658,"context_line":"        expand \u003d upgrades.get_db_version(\u0027expand_repo\u0027)"},{"line_number":1659,"context_line":"        migrate \u003d upgrades.get_db_version(\u0027data_migration_repo\u0027)"},{"line_number":1660,"context_line":"        contract \u003d upgrades.get_db_version(\u0027contract_repo\u0027)"},{"line_number":1661,"context_line":"        if contract \u003e expand and contract \u003e migrate:"},{"line_number":1662,"context_line":"            self.assertTrue(1)"},{"line_number":1663,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_ce20bafa","line":1660,"updated":"2017-02-03 21:35:10.000000000","message":"We could replace the if/else here with specific assertion statements:\n\n  self.assertEqual(expand_version, 1)\n  self.assertEqual(migrate_version, 1)\n  self.assertEqual(contract_version, 2)","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"45c42dbdf02e4d88b25cd36f8a66c24456246376","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"        self.contract(2)"},{"line_number":1658,"context_line":"        expand \u003d upgrades.get_db_version(\u0027expand_repo\u0027)"},{"line_number":1659,"context_line":"        migrate \u003d upgrades.get_db_version(\u0027data_migration_repo\u0027)"},{"line_number":1660,"context_line":"        contract \u003d upgrades.get_db_version(\u0027contract_repo\u0027)"},{"line_number":1661,"context_line":"        if contract \u003e expand and contract \u003e migrate:"},{"line_number":1662,"context_line":"            self.assertTrue(1)"},{"line_number":1663,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_5d9f1a03","line":1660,"in_reply_to":"1a430d35_ce20bafa","updated":"2017-02-03 23:45:41.000000000","message":"Done","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4488862c30b5ad57ebc84a178dd977cb6c5dbf12","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"        # migrate"},{"line_number":1676,"context_line":"        self.expand(2)"},{"line_number":1677,"context_line":"        self.migrate(1)"},{"line_number":1678,"context_line":"        self.contract(1)"},{"line_number":1679,"context_line":"        self.assertIn(\"keystone-manage db_sync --migrate\", upgrades.check())"},{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"        # Assert the correct message is printed when migrate is farther than"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_f14b97ae","line":1678,"updated":"2017-02-03 21:35:10.000000000","message":"I don\u0027t think you need lines1677 or 1678 because you\u0027ve already migrated to version 1 of both the migrate and contract repos.","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"45c42dbdf02e4d88b25cd36f8a66c24456246376","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"        # migrate"},{"line_number":1676,"context_line":"        self.expand(2)"},{"line_number":1677,"context_line":"        self.migrate(1)"},{"line_number":1678,"context_line":"        self.contract(1)"},{"line_number":1679,"context_line":"        self.assertIn(\"keystone-manage db_sync --migrate\", upgrades.check())"},{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"        # Assert the correct message is printed when migrate is farther than"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_7da4d656","line":1678,"in_reply_to":"1a430d35_f14b97ae","updated":"2017-02-03 23:45:41.000000000","message":"Done","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4488862c30b5ad57ebc84a178dd977cb6c5dbf12","unresolved":false,"context_lines":[{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"        # Assert the correct message is printed when migrate is farther than"},{"line_number":1682,"context_line":"        # contract"},{"line_number":1683,"context_line":"        self.expand(2)"},{"line_number":1684,"context_line":"        self.migrate(2)"},{"line_number":1685,"context_line":"        self.contract(1)"},{"line_number":1686,"context_line":"        self.assertIn(\"keystone-manage db_sync --contract\", upgrades.check())"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_d1e5bba8","line":1683,"updated":"2017-02-03 21:35:10.000000000","message":"You could probably omit this line since we\u0027ve already migrated the expand repository to version 2.","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"45c42dbdf02e4d88b25cd36f8a66c24456246376","unresolved":false,"context_lines":[{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"        # Assert the correct message is printed when migrate is farther than"},{"line_number":1682,"context_line":"        # contract"},{"line_number":1683,"context_line":"        self.expand(2)"},{"line_number":1684,"context_line":"        self.migrate(2)"},{"line_number":1685,"context_line":"        self.contract(1)"},{"line_number":1686,"context_line":"        self.assertIn(\"keystone-manage db_sync --contract\", upgrades.check())"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_9d8982cd","line":1683,"in_reply_to":"1a430d35_d1e5bba8","updated":"2017-02-03 23:45:41.000000000","message":"Done","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4488862c30b5ad57ebc84a178dd977cb6c5dbf12","unresolved":false,"context_lines":[{"line_number":1682,"context_line":"        # contract"},{"line_number":1683,"context_line":"        self.expand(2)"},{"line_number":1684,"context_line":"        self.migrate(2)"},{"line_number":1685,"context_line":"        self.contract(1)"},{"line_number":1686,"context_line":"        self.assertIn(\"keystone-manage db_sync --contract\", upgrades.check())"},{"line_number":1687,"context_line":""},{"line_number":1688,"context_line":"    def test_migration_002_password_created_at_not_nullable(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_51e8eb7c","line":1685,"updated":"2017-02-03 21:35:10.000000000","message":"You could omit this line since we\u0027ve already migrated the contract repository to version 1.","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"45c42dbdf02e4d88b25cd36f8a66c24456246376","unresolved":false,"context_lines":[{"line_number":1682,"context_line":"        # contract"},{"line_number":1683,"context_line":"        self.expand(2)"},{"line_number":1684,"context_line":"        self.migrate(2)"},{"line_number":1685,"context_line":"        self.contract(1)"},{"line_number":1686,"context_line":"        self.assertIn(\"keystone-manage db_sync --contract\", upgrades.check())"},{"line_number":1687,"context_line":""},{"line_number":1688,"context_line":"    def test_migration_002_password_created_at_not_nullable(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_bd863eb7","line":1685,"in_reply_to":"1a430d35_51e8eb7c","updated":"2017-02-03 23:45:41.000000000","message":"Done","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4488862c30b5ad57ebc84a178dd977cb6c5dbf12","unresolved":false,"context_lines":[{"line_number":1683,"context_line":"        self.expand(2)"},{"line_number":1684,"context_line":"        self.migrate(2)"},{"line_number":1685,"context_line":"        self.contract(1)"},{"line_number":1686,"context_line":"        self.assertIn(\"keystone-manage db_sync --contract\", upgrades.check())"},{"line_number":1687,"context_line":""},{"line_number":1688,"context_line":"    def test_migration_002_password_created_at_not_nullable(self):"},{"line_number":1689,"context_line":"        # upgrade each repository to 001"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_31cc3f35","line":1686,"updated":"2017-02-03 21:35:10.000000000","message":"We could end this test by coming full circle with\n\n    self.contract(2)\n    # assert all versions are the same and the error message\n    # is similar to line 1672.","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"45c42dbdf02e4d88b25cd36f8a66c24456246376","unresolved":false,"context_lines":[{"line_number":1683,"context_line":"        self.expand(2)"},{"line_number":1684,"context_line":"        self.migrate(2)"},{"line_number":1685,"context_line":"        self.contract(1)"},{"line_number":1686,"context_line":"        self.assertIn(\"keystone-manage db_sync --contract\", upgrades.check())"},{"line_number":1687,"context_line":""},{"line_number":1688,"context_line":"    def test_migration_002_password_created_at_not_nullable(self):"},{"line_number":1689,"context_line":"        # upgrade each repository to 001"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_dd930af9","line":1686,"in_reply_to":"1a430d35_31cc3f35","updated":"2017-02-03 23:45:41.000000000","message":"Done","commit_id":"cb8e2c451b84e6d1bebacffa4eac908dfbd1513e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1e8b11891ac29bdac8cefcee93e3912641edfd80","unresolved":false,"context_lines":[{"line_number":1669,"context_line":"        log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))"},{"line_number":1670,"context_line":"        try:"},{"line_number":1671,"context_line":"            checker._check_db_sync_status()"},{"line_number":1672,"context_line":"        except BaseException:"},{"line_number":1673,"context_line":"            self.assertIn(\"keystone-manage db_sync --expand\", log_info.output)"},{"line_number":1674,"context_line":""},{"line_number":1675,"context_line":"        # Assert the correct message is printed when expand is farther than"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a430d35_2f56d805","line":1672,"updated":"2017-02-09 05:47:02.000000000","message":"We\u0027re not expecting an exception to be caught here are we? Does the following cause an error? \n\n  log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))\n  checker._check_db_sync_status()\n  self.assertIn(\"keystone-manage db_sync --expand\", log_info.output)","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"a5defb302f36f7a519810c9fd8f5df66817bdf6a","unresolved":false,"context_lines":[{"line_number":1669,"context_line":"        log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))"},{"line_number":1670,"context_line":"        try:"},{"line_number":1671,"context_line":"            checker._check_db_sync_status()"},{"line_number":1672,"context_line":"        except BaseException:"},{"line_number":1673,"context_line":"            self.assertIn(\"keystone-manage db_sync --expand\", log_info.output)"},{"line_number":1674,"context_line":""},{"line_number":1675,"context_line":"        # Assert the correct message is printed when expand is farther than"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a430d35_25718278","line":1672,"in_reply_to":"1a430d35_2f56d805","updated":"2017-02-09 16:25:21.000000000","message":"trying to call the helper function directly through checker raises the error and causes userFixtures FakeLogger to receive an unexpected error, the exception is caught and asserted instead","commit_id":"a0da0053090ec5339b094f2a4c8e3813bca8886c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"311756ca0ca41de946b4291051d4bf761104f703","unresolved":false,"context_lines":[{"line_number":1684,"context_line":"        log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))"},{"line_number":1685,"context_line":"        try:"},{"line_number":1686,"context_line":"            checker._check_db_sync_status()"},{"line_number":1687,"context_line":"        except BaseException:"},{"line_number":1688,"context_line":"            self.assertIn(\"keystone-manage db_sync --expand\", log_info.output)"},{"line_number":1689,"context_line":""},{"line_number":1690,"context_line":"        # Assert the correct message is printed when expand is farther than"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_0311d95d","line":1687,"updated":"2017-02-09 19:05:24.000000000","message":"You should probably just be catching SystemExit. You would not want the test to accidentally pass because there in a different exception thrown after the message  (from the assert below) was logged.","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"34da1ee4163eb043b214484e611831a4be545088","unresolved":false,"context_lines":[{"line_number":1684,"context_line":"        log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))"},{"line_number":1685,"context_line":"        try:"},{"line_number":1686,"context_line":"            checker._check_db_sync_status()"},{"line_number":1687,"context_line":"        except BaseException:"},{"line_number":1688,"context_line":"            self.assertIn(\"keystone-manage db_sync --expand\", log_info.output)"},{"line_number":1689,"context_line":""},{"line_number":1690,"context_line":"        # Assert the correct message is printed when expand is farther than"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_b92af22d","line":1687,"in_reply_to":"1a430d35_0311d95d","updated":"2017-02-09 19:42:20.000000000","message":"Done","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"311756ca0ca41de946b4291051d4bf761104f703","unresolved":false,"context_lines":[{"line_number":1693,"context_line":"        log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))"},{"line_number":1694,"context_line":"        try:"},{"line_number":1695,"context_line":"            checker._check_db_sync_status()"},{"line_number":1696,"context_line":"        except BaseException:"},{"line_number":1697,"context_line":"            self.assertIn(\"keystone-manage db_sync --migrate\", log_info.output)"},{"line_number":1698,"context_line":""},{"line_number":1699,"context_line":"        # Assert the correct message is printed when migrate is farther than"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_3e126859","line":1696,"updated":"2017-02-09 19:05:24.000000000","message":"same","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"34da1ee4163eb043b214484e611831a4be545088","unresolved":false,"context_lines":[{"line_number":1693,"context_line":"        log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))"},{"line_number":1694,"context_line":"        try:"},{"line_number":1695,"context_line":"            checker._check_db_sync_status()"},{"line_number":1696,"context_line":"        except BaseException:"},{"line_number":1697,"context_line":"            self.assertIn(\"keystone-manage db_sync --migrate\", log_info.output)"},{"line_number":1698,"context_line":""},{"line_number":1699,"context_line":"        # Assert the correct message is printed when migrate is farther than"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_192a262d","line":1696,"in_reply_to":"1a430d35_3e126859","updated":"2017-02-09 19:42:20.000000000","message":"Done","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"311756ca0ca41de946b4291051d4bf761104f703","unresolved":false,"context_lines":[{"line_number":1702,"context_line":"        log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))"},{"line_number":1703,"context_line":"        try:"},{"line_number":1704,"context_line":"            checker._check_db_sync_status()"},{"line_number":1705,"context_line":"        except BaseException:"},{"line_number":1706,"context_line":"            self.assertIn(\"keystone-manage db_sync --contract\","},{"line_number":1707,"context_line":"                          log_info.output)"},{"line_number":1708,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_5e3654e8","line":1705,"updated":"2017-02-09 19:05:24.000000000","message":"same","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"34da1ee4163eb043b214484e611831a4be545088","unresolved":false,"context_lines":[{"line_number":1702,"context_line":"        log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))"},{"line_number":1703,"context_line":"        try:"},{"line_number":1704,"context_line":"            checker._check_db_sync_status()"},{"line_number":1705,"context_line":"        except BaseException:"},{"line_number":1706,"context_line":"            self.assertIn(\"keystone-manage db_sync --contract\","},{"line_number":1707,"context_line":"                          log_info.output)"},{"line_number":1708,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_391fe20a","line":1705,"in_reply_to":"1a430d35_5e3654e8","updated":"2017-02-09 19:42:20.000000000","message":"Done","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"311756ca0ca41de946b4291051d4bf761104f703","unresolved":false,"context_lines":[{"line_number":1712,"context_line":"        log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))"},{"line_number":1713,"context_line":"        try:"},{"line_number":1714,"context_line":"            checker._check_db_sync_status()"},{"line_number":1715,"context_line":"        except BaseException:"},{"line_number":1716,"context_line":"            self.assertIn(\"All db_sync commands are upgraded\", log_info.output)"},{"line_number":1717,"context_line":""},{"line_number":1718,"context_line":"    def test_db_sync_check_out_of_sync(self):"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_9e30bcea","line":1715,"updated":"2017-02-09 19:05:24.000000000","message":"same","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"34da1ee4163eb043b214484e611831a4be545088","unresolved":false,"context_lines":[{"line_number":1712,"context_line":"        log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))"},{"line_number":1713,"context_line":"        try:"},{"line_number":1714,"context_line":"            checker._check_db_sync_status()"},{"line_number":1715,"context_line":"        except BaseException:"},{"line_number":1716,"context_line":"            self.assertIn(\"All db_sync commands are upgraded\", log_info.output)"},{"line_number":1717,"context_line":""},{"line_number":1718,"context_line":"    def test_db_sync_check_out_of_sync(self):"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_79196a22","line":1715,"in_reply_to":"1a430d35_9e30bcea","updated":"2017-02-09 19:42:20.000000000","message":"Done","commit_id":"ecf76dee5112e9c6794f397dac5468b590cb5f33"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"05f6a0fe1ed2d29db4924c9d99ac5db4a509f057","unresolved":false,"context_lines":[{"line_number":1715,"context_line":"        # Assert we alert operator upgrades are out of sync"},{"line_number":1716,"context_line":"        self.expand(3)"},{"line_number":1717,"context_line":"        self.migrate(3)"},{"line_number":1718,"context_line":"        self.contract(4)"},{"line_number":1719,"context_line":"        log_info \u003d self.useFixture(fixtures.FakeLogger(level\u003dlog.INFO))"},{"line_number":1720,"context_line":"        status \u003d checker.check_db_sync_status()"},{"line_number":1721,"context_line":"        self.assertIn(\"Your database is out of sync\", log_info.output)"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa31d9ce_8aedeb90","line":1718,"updated":"2017-02-09 20:45:32.000000000","message":"This should raise an exception at some point (see test_that_running_upgrades_out_of_order_passes)","commit_id":"d5ce8ea0ed6a3b9f748427d1b552fb88ad738545"}],"releasenotes/notes/add-db-sync-check-command-9964dfd3af0184bd.yaml":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b5e84f29a7397148640a94346e2193c1a9bd3ae1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"1a430d35_0d47a477","updated":"2017-02-08 04:13:04.000000000","message":"rename this to:\n\n  bug-1642212-9964dfd3af0184bd.yaml","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"9565368da89ba1a43ed25af7e591db52d12fc07f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"1a430d35_c67f36a9","in_reply_to":"1a430d35_0d47a477","updated":"2017-02-08 08:56:56.000000000","message":"Done","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b5e84f29a7397148640a94346e2193c1a9bd3ae1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds the command --check to keystone-manage db_sync to allow the user to"},{"line_number":4,"context_line":"    check the status of rolling upgrades in the database."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"1a430d35_2d2700cb","line":4,"updated":"2017-02-08 04:13:04.000000000","message":"write this in the past tense and use highlighting where appropriate, for example:\n\n---\nfeatures:\n  - |\n    Added an option ``--check`` to ``keystone-manage db_sync``, the option will\n    allow a user to check the status of rolling upgrades in the database.","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"9565368da89ba1a43ed25af7e591db52d12fc07f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds the command --check to keystone-manage db_sync to allow the user to"},{"line_number":4,"context_line":"    check the status of rolling upgrades in the database."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"1a430d35_a676aad4","line":4,"in_reply_to":"1a430d35_2d2700cb","updated":"2017-02-08 08:56:56.000000000","message":"Done","commit_id":"ece21823b818fb8680de2c41ef99d7df82616a64"}],"releasenotes/notes/bug-1642212-9964dfd3af0184bd.yaml":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"68d5c125994ba0bd278836d0fc09c77a9730448c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added an option ``--check`` to ``keystone-manage db_sync``, the option will"},{"line_number":4,"context_line":"    allow a user to check the status of rolling upgrades in the database."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"1a430d35_47ca3f1c","line":4,"updated":"2017-02-08 19:35:47.000000000","message":"++ we should also add some documentation in this patch that explains the state of the error codes.","commit_id":"988c8bdbdd697cac0aa2deeb6bb04d02c5ca2cff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"08f62289ef8996440daa100b1361f6a9c00de24b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added an option ``--check`` to ``keystone-manage db_sync``, the option will"},{"line_number":4,"context_line":"    allow a user to check the status of rolling upgrades in the database."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"1a430d35_b7614cd5","line":4,"updated":"2017-02-08 21:35:40.000000000","message":"We should add the status code descriptions to the dev docs\n\nhttps://github.com/openstack/keystone/blob/master/doc/source/upgrading.rst","commit_id":"01bc7796fa320f382b4e43623ca8ae16de289f72"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"690ea16b84279b07a460c68485483adce4e5d755","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added an option ``--check`` to ``keystone-manage db_sync``, the option will"},{"line_number":4,"context_line":"    allow a user to check the status of rolling upgrades in the database."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"1a430d35_80616807","line":4,"in_reply_to":"1a430d35_b7614cd5","updated":"2017-02-08 23:33:23.000000000","message":"Done","commit_id":"01bc7796fa320f382b4e43623ca8ae16de289f72"}]}
