)]}'
{".coveragerc":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5c436ec2816f920b5bacf95d95810bd48ab96f21","unresolved":false,"context_lines":[{"line_number":5,"context_line":"[report]"},{"line_number":6,"context_line":"ignore_errors \u003d True"},{"line_number":7,"context_line":"precision \u003d 3"},{"line_number":8,"context_line":"omit \u003d *migrations/*"}],"source_content_type":"application/octet-stream","patch_set":30,"id":"9a68dd71_68c3da89","line":8,"updated":"2016-01-25 06:38:36.000000000","message":"Let\u0027s ignore just first migration, because all other should be added with unit tests.","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"}],"/COMMIT_MSG":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cf5ad4e7fe30793e53a7a20d6c03f61b678ab14f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"that was autogenerated from models that we have."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"As well this patch adds CLI commands for DB management"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I7caa090aa5c4c6563b7e34d0d09baa039a3aa718"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"7a5de9d1_d8925a9f","line":17,"updated":"2016-01-28 14:17:33.000000000","message":"I suppose that Illia should be there as \"Co-Author\"","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"93154afcc5cc066358266ab2df6443271e8ee3e4","unresolved":false,"context_lines":[{"line_number":14,"context_line":"that was autogenerated from models that we have."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"As well this patch adds CLI commands for DB management"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I7caa090aa5c4c6563b7e34d0d09baa039a3aa718"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"7a5de9d1_ffd138ce","line":17,"in_reply_to":"7a5de9d1_d8925a9f","updated":"2016-01-28 15:42:02.000000000","message":"Done","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"}],"rally/cli/manage.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"1db267e92a4b064a3722acf040866a76663829d3","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from rally.common import db"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class DBCommands(object):"},{"line_number":28,"context_line":"    \"\"\"Commands for DB management.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def recreate(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa69d971_eeedf0b7","line":27,"updated":"2016-01-08 16:03:18.000000000","message":"Our cli commands are placed under cli/commands/.. What is the reason for placing here this file?","commit_id":"e23b4e645d0be82275b8f85c766d3e0ade5a98cc"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0b1ba56303149177721a38a42c34c5551b0ee7e8","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def recreate(self):"},{"line_number":31,"context_line":"        \"\"\"Drop and create Rally database.\"\"\""},{"line_number":32,"context_line":"        db.db_drop()"},{"line_number":33,"context_line":"        db.schema_create()"},{"line_number":34,"context_line":"        envutils.clear_env()"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_eabe71fe","line":32,"updated":"2016-01-21 09:12:34.000000000","message":"let\u0027s change this method as well to schema_drop()","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"4112434f41da96eb7829a825d9b2abb513b38475","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def recreate(self):"},{"line_number":31,"context_line":"        \"\"\"Drop and create Rally database.\"\"\""},{"line_number":32,"context_line":"        db.db_drop()"},{"line_number":33,"context_line":"        db.schema_create()"},{"line_number":34,"context_line":"        envutils.clear_env()"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_38861566","line":32,"in_reply_to":"9a68dd71_eabe71fe","updated":"2016-01-21 12:40:16.000000000","message":"Done","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0b1ba56303149177721a38a42c34c5551b0ee7e8","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        db.schema_create()"},{"line_number":34,"context_line":"        envutils.clear_env()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def create(self):"},{"line_number":37,"context_line":"        db.schema_create()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @cliutils.args(\"--revision\", help\u003d\"Upgrade to specified revision UUID\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_6ab4c1f1","line":36,"updated":"2016-01-21 09:12:34.000000000","message":"We should ad doc strings to all methods. It\u0027s important doc strings are used as a help messages in CLI.","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"4112434f41da96eb7829a825d9b2abb513b38475","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        db.schema_create()"},{"line_number":34,"context_line":"        envutils.clear_env()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def create(self):"},{"line_number":37,"context_line":"        db.schema_create()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @cliutils.args(\"--revision\", help\u003d\"Upgrade to specified revision UUID\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_b8abe5d5","line":36,"in_reply_to":"9a68dd71_6ab4c1f1","updated":"2016-01-21 12:40:16.000000000","message":"Done","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0b1ba56303149177721a38a42c34c5551b0ee7e8","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        db.schema_create()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @cliutils.args(\"--revision\", help\u003d\"Upgrade to specified revision UUID\")"},{"line_number":40,"context_line":"    def upgrade(self, revision):"},{"line_number":41,"context_line":"        db.schema_upgrade(revision)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @cliutils.args(\"--revision\", help\u003d\"Downgrade to specified revision UUID\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_9e4db674","line":40,"updated":"2016-01-21 09:12:34.000000000","message":"This is really bad interface for end user perspective. \n\nThere are 2 major use cases: \n\n  - I upgrade my code and would like to upgrade my DB to make it work with code \n\n  - I downgrade my code and would like to downgrade my DB to make it work with code\n\n\nThese 2 cases should NOT require revision UUID at all. \n\nBasically we need to have --revision as optional argument and if it is not specifed used UUID of latest revision","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"4112434f41da96eb7829a825d9b2abb513b38475","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        db.schema_create()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @cliutils.args(\"--revision\", help\u003d\"Upgrade to specified revision UUID\")"},{"line_number":40,"context_line":"    def upgrade(self, revision):"},{"line_number":41,"context_line":"        db.schema_upgrade(revision)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @cliutils.args(\"--revision\", help\u003d\"Downgrade to specified revision UUID\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_d56d4405","line":40,"in_reply_to":"9a68dd71_9e4db674","updated":"2016-01-21 12:40:16.000000000","message":"I absolutely agree with \u0027upgrade\u0027. I fixed that.\nBut I strongly disagree with \u0027downgrade\u0027. We MUST downgrade the schema BEFORE downgrading the code since only current (newer) version of the code contains information about what exactly must be done to downgrade.\nIn such case we could assume that user wants to downgrade to previous revision but here I prefer to know exactly.\nSo I propose to left \u0027--revision\u0027 parameter as mandatory for \u0027downgrade\u0027 method.","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0b1ba56303149177721a38a42c34c5551b0ee7e8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        db.schema_revision(message, autogenerate)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @cliutils.args(\"--revision\", help\u003d\"Stamp to specified revision UUID\")"},{"line_number":55,"context_line":"    def stamp(self, revision):"},{"line_number":56,"context_line":"        db.schema_stamp(revision)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def version(self):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_fe48725d","line":55,"updated":"2016-01-21 09:12:34.000000000","message":"we should have some manual for non familiar with alembic users here. Like what does stamp and how/where to use it","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"4112434f41da96eb7829a825d9b2abb513b38475","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        db.schema_revision(message, autogenerate)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @cliutils.args(\"--revision\", help\u003d\"Stamp to specified revision UUID\")"},{"line_number":55,"context_line":"    def stamp(self, revision):"},{"line_number":56,"context_line":"        db.schema_stamp(revision)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def version(self):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_f8a87ddd","line":55,"in_reply_to":"9a68dd71_fe48725d","updated":"2016-01-21 12:40:16.000000000","message":"Agree. Can we have it in separate patch?\n\nPS In fact I\u0027m not really sure that we should provide\nrevision/stamp functionality to end user. I believe that the use cases for that are rather rare and the tools are dangerous.","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"12d09c66b58945ef409ea5de24d9109827fd39a9","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        db.schema_upgrade()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def downgrade(self, revision):"},{"line_number":48,"context_line":"        \"\"\"Downgrade Rally database.\"\"\""},{"line_number":49,"context_line":"        db.schema_downgrade(revision)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def version(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a68dd71_a39631ee","line":48,"updated":"2016-01-22 03:44:14.000000000","message":"you should add param section for revision number and at least explain end user how to find this UUID.","commit_id":"cd5d2e343c4721175ff43972c8e19dcdb46716b4"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"296790901ba173bb707ea5064179a1733a3cf746","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        db.schema_upgrade()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def downgrade(self, revision):"},{"line_number":48,"context_line":"        \"\"\"Downgrade Rally database.\"\"\""},{"line_number":49,"context_line":"        db.schema_downgrade(revision)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def version(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a68dd71_49ec2a8f","line":48,"in_reply_to":"9a68dd71_a39631ee","updated":"2016-01-22 10:06:12.000000000","message":"Done","commit_id":"cd5d2e343c4721175ff43972c8e19dcdb46716b4"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5c436ec2816f920b5bacf95d95810bd48ab96f21","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        This will delete all existing data."},{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        db.schema_cleanup()"},{"line_number":36,"context_line":"        db.schema_create()"},{"line_number":37,"context_line":"        envutils.clear_env()"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_88408e08","line":35,"updated":"2016-01-25 06:38:36.000000000","message":"Why it\u0027s cleanup and not drop? \n\nCleanup for me seems like just remove all records (but not remove all tables)","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"5dd9dc4746d830a04eb43ed1612d2aa05797d5dd","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        This will delete all existing data."},{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        db.schema_cleanup()"},{"line_number":36,"context_line":"        db.schema_create()"},{"line_number":37,"context_line":"        envutils.clear_env()"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_4b7e036b","line":35,"in_reply_to":"9a68dd71_88408e08","updated":"2016-01-25 12:12:33.000000000","message":"Well, it\u0027s \u0027cleanup\u0027 because you suggested it so,  https://review.openstack.org/#/c/264701/28/rally/common/db/sqlalchemy/api.py@79.\n\nAnd for me \u0027schema cleanup\u0027 means \u0027remove all schema elements (tables, indexes etc\u0027) as opposed to \u0027data cleanup\u0027 that would mean \u0027remove all records\u0027","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5c436ec2816f920b5bacf95d95810bd48ab96f21","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        db.schema_create()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def upgrade(self):"},{"line_number":44,"context_line":"        \"\"\"Upgrade Rally database.\"\"\""},{"line_number":45,"context_line":"        db.schema_upgrade()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @cliutils.args(\"--revision\","}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_484ff636","line":44,"updated":"2016-01-25 06:38:36.000000000","message":"Upgrade Rally database to the latest state.","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"5dd9dc4746d830a04eb43ed1612d2aa05797d5dd","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        db.schema_create()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def upgrade(self):"},{"line_number":44,"context_line":"        \"\"\"Upgrade Rally database.\"\"\""},{"line_number":45,"context_line":"        db.schema_upgrade()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @cliutils.args(\"--revision\","}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_4b5a83f3","line":44,"in_reply_to":"9a68dd71_484ff636","updated":"2016-01-25 12:12:33.000000000","message":"Done","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5c436ec2816f920b5bacf95d95810bd48ab96f21","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    @cliutils.args(\"--revision\","},{"line_number":48,"context_line":"                   help\u003d(\"Downgrade to specified revision UUID. \""},{"line_number":49,"context_line":"                         \"Current revision of DB could be found by calling \""},{"line_number":50,"context_line":"                         \"\u0027rally-manage db version\u0027\"))"},{"line_number":51,"context_line":"    def downgrade(self, revision):"},{"line_number":52,"context_line":"        \"\"\"Downgrade Rally database.\"\"\""},{"line_number":53,"context_line":"        db.schema_downgrade(revision)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_08557ec4","line":50,"updated":"2016-01-25 06:38:36.000000000","message":"rally-manage db revision","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"5dd9dc4746d830a04eb43ed1612d2aa05797d5dd","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    @cliutils.args(\"--revision\","},{"line_number":48,"context_line":"                   help\u003d(\"Downgrade to specified revision UUID. \""},{"line_number":49,"context_line":"                         \"Current revision of DB could be found by calling \""},{"line_number":50,"context_line":"                         \"\u0027rally-manage db version\u0027\"))"},{"line_number":51,"context_line":"    def downgrade(self, revision):"},{"line_number":52,"context_line":"        \"\"\"Downgrade Rally database.\"\"\""},{"line_number":53,"context_line":"        db.schema_downgrade(revision)"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_eb757763","line":50,"in_reply_to":"9a68dd71_08557ec4","updated":"2016-01-25 12:12:33.000000000","message":"Done","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5c436ec2816f920b5bacf95d95810bd48ab96f21","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        \"\"\"Downgrade Rally database.\"\"\""},{"line_number":53,"context_line":"        db.schema_downgrade(revision)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def revision(self):"},{"line_number":56,"context_line":"        \"\"\"Print current Rally database revision UUID.\"\"\""},{"line_number":57,"context_line":"        print(db.schema_revision())"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_c892064c","line":55,"updated":"2016-01-25 06:38:36.000000000","message":"btw can we have another one very simple method here: \n\n\n  def list_revisions():\n     that will show table: \n\n      revision_uuid, date, tag","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"6376e5f10b3d3cf84eb98e1374c6e9f7697b0690","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def upgrade(self):"},{"line_number":44,"context_line":"        \"\"\"Upgrade Rally database to the latest state.\"\"\""},{"line_number":45,"context_line":"        db.schema_upgrade()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @cliutils.args(\"--revision\","},{"line_number":48,"context_line":"                   help\u003d(\"Downgrade to specified revision UUID. \""}],"source_content_type":"text/x-python","patch_set":33,"id":"9a68dd71_075bd72f","line":45,"updated":"2016-01-26 16:03:29.000000000","message":"Is there a use case for upgrading to a specific revision? The only way to do that would be to upgrade to the latest, then downgrade to the desired.","commit_id":"03997b64a4bbc8557eb988e94d866a4dc8c29d1a"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"37a6a73f6995a235637dc040c01e7bee51efb8c7","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def upgrade(self):"},{"line_number":44,"context_line":"        \"\"\"Upgrade Rally database to the latest state.\"\"\""},{"line_number":45,"context_line":"        db.schema_upgrade()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @cliutils.args(\"--revision\","},{"line_number":48,"context_line":"                   help\u003d(\"Downgrade to specified revision UUID. \""}],"source_content_type":"text/x-python","patch_set":33,"id":"9a68dd71_4c9d6f58","line":45,"in_reply_to":"9a68dd71_075bd72f","updated":"2016-01-26 17:02:03.000000000","message":"Well, I didn\u0027t found it yet. Initially this functionality was implemented, but I believe it is rather dangerous, and as we discussed with Boris, we can\u0027t come up with the immediate need for it. It would be rather easy to enable it anyway. We plan to add a \u0027history\u0027 command, so more direct upgrade could be possible.\n\nAnyway, there is one particular usecase for schema upgrade -- user updated Rally package and they upgrade their DB to match. I have no idea why would user want something else.\n\nAs for downgrade, the usecase is, like user upgraded rally and DB and then decided to rollback. The only reason why we require revision for downgrade is that we don\u0027t know where user started so we want them to be exact.","commit_id":"03997b64a4bbc8557eb988e94d866a4dc8c29d1a"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cf5ad4e7fe30793e53a7a20d6c03f61b678ab14f","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        This will delete all existing data."},{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        db.schema_cleanup()"},{"line_number":36,"context_line":"        db.schema_create()"},{"line_number":37,"context_line":"        envutils.clear_env()"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"7a5de9d1_98ff02aa","line":35,"updated":"2016-01-28 14:17:33.000000000","message":"I prefer to make all these calls via rally.api","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"38c39f1b0202b31a6f2b0840f9ac4cd0d2588dc5","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        This will delete all existing data."},{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        db.schema_cleanup()"},{"line_number":36,"context_line":"        db.schema_create()"},{"line_number":37,"context_line":"        envutils.clear_env()"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"7a5de9d1_29af9e95","line":35,"in_reply_to":"7a5de9d1_98ff02aa","updated":"2016-01-28 14:57:44.000000000","message":"Well, you can\u0027t actually. Rally API does not contain methods for schema manipulation. And we have \u0027rally-manage\u0027 for the reason - it does stuff that is not in the API.","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"}],"rally/common/db/api.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"12d09c66b58945ef409ea5de24d9109827fd39a9","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    return get_impl().schema_create()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def schema_downgrade(version):"},{"line_number":94,"context_line":"    \"\"\"Downgrade DB schema to specified version.\"\"\""},{"line_number":95,"context_line":"    return get_impl().schema_downgrade(version)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"9a68dd71_9e890029","line":93,"updated":"2016-01-22 03:44:14.000000000","message":"I would suggest to use here \"revision\" instead of \"version\" so we won\u0027t have two names for the same thing","commit_id":"cd5d2e343c4721175ff43972c8e19dcdb46716b4"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"296790901ba173bb707ea5064179a1733a3cf746","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    return get_impl().schema_create()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def schema_downgrade(version):"},{"line_number":94,"context_line":"    \"\"\"Downgrade DB schema to specified version.\"\"\""},{"line_number":95,"context_line":"    return get_impl().schema_downgrade(version)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"9a68dd71_a9fda63b","line":93,"in_reply_to":"9a68dd71_9e890029","updated":"2016-01-22 10:06:12.000000000","message":"Done","commit_id":"cd5d2e343c4721175ff43972c8e19dcdb46716b4"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5c436ec2816f920b5bacf95d95810bd48ab96f21","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def engine_reset():"},{"line_number":69,"context_line":"    \"\"\"Recreate engine.\"\"\""},{"line_number":70,"context_line":"    get_impl().engine_reset()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_a8b232e3","line":69,"updated":"2016-01-25 06:38:36.000000000","message":"description doesn\u0027t match to the method name","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"5dd9dc4746d830a04eb43ed1612d2aa05797d5dd","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def engine_reset():"},{"line_number":69,"context_line":"    \"\"\"Recreate engine.\"\"\""},{"line_number":70,"context_line":"    get_impl().engine_reset()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_cbebd3da","line":69,"in_reply_to":"9a68dd71_a8b232e3","updated":"2016-01-25 12:12:33.000000000","message":"Done","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"}],"rally/common/db/sqlalchemy/api.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0b1ba56303149177721a38a42c34c5551b0ee7e8","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            context \u003d alembic_migration.MigrationContext.configure(conn)"},{"line_number":94,"context_line":"            return context.get_current_revision()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def schema_upgrade(self, revision, config\u003dNone):"},{"line_number":97,"context_line":"        \"\"\"Used for upgrading database."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        :param revision: Desired database version"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_dee7ae3e","line":96,"updated":"2016-01-21 09:12:34.000000000","message":"So there is code revision \u003d revision or \"head\" which actually means that this argument is optional, so it makes sense to put revision\u003dNone in signature of this method","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"4112434f41da96eb7829a825d9b2abb513b38475","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            context \u003d alembic_migration.MigrationContext.configure(conn)"},{"line_number":94,"context_line":"            return context.get_current_revision()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def schema_upgrade(self, revision, config\u003dNone):"},{"line_number":97,"context_line":"        \"\"\"Used for upgrading database."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        :param revision: Desired database version"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_58f3c99e","line":96,"in_reply_to":"9a68dd71_dee7ae3e","updated":"2016-01-21 12:40:16.000000000","message":"Done","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0b1ba56303149177721a38a42c34c5551b0ee7e8","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        models.BASE.metadata.create_all(engine)"},{"line_number":122,"context_line":"        self.schema_stamp(\"head\", config\u003dconfig)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def schema_downgrade(self, revision, config\u003dNone):"},{"line_number":125,"context_line":"        \"\"\"Used for downgrading database."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        :param version: Desired database version"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_9ed05655","line":124,"updated":"2016-01-21 09:12:34.000000000","message":"same here","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"4112434f41da96eb7829a825d9b2abb513b38475","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        models.BASE.metadata.create_all(engine)"},{"line_number":122,"context_line":"        self.schema_stamp(\"head\", config\u003dconfig)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def schema_downgrade(self, revision, config\u003dNone):"},{"line_number":125,"context_line":"        \"\"\"Used for downgrading database."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        :param version: Desired database version"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_d8e8197f","line":124,"in_reply_to":"9a68dd71_9ed05655","updated":"2016-01-21 12:40:16.000000000","message":"I would rather have \u0027revision\u0027 mandatory here. Pls see my answer in rally/cli/manage.py","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"12d09c66b58945ef409ea5de24d9109827fd39a9","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        _FACADE \u003d None"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def db_create(self):"},{"line_number":80,"context_line":"        models.create_db()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def schema_drop(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a68dd71_3e79f42f","line":79,"updated":"2016-01-22 03:44:14.000000000","message":"Let\u0027s keep the same pattern over code it should be called: \n\n schema_cleanup\n schema_create","commit_id":"cd5d2e343c4721175ff43972c8e19dcdb46716b4"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"296790901ba173bb707ea5064179a1733a3cf746","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        _FACADE \u003d None"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def db_create(self):"},{"line_number":80,"context_line":"        models.create_db()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def schema_drop(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a68dd71_dc21b64e","line":79,"in_reply_to":"9a68dd71_3e79f42f","updated":"2016-01-22 10:06:12.000000000","message":"Agree for \u0027create\u0027. In fact we do have more sofisticated \u0027schema_create\u0027, see L107. I\u0027ll just remove this one.\n\nAs for \u0027schema_cleanup\u0027, we now have two separate methods, \u0027db_cleanup\u0027 and \u0027schema_drop\u0027 that do two separate things.\nI believe that you suggested to rename \u0027schema_drop\u0027 to \u0027schema_cleanup\u0027. Am I right? I\u0027d also suggest to rename \u0027db_cleanup\u0027 to, say, \u0027engine_reset\u0027 to highlight the difference.","commit_id":"cd5d2e343c4721175ff43972c8e19dcdb46716b4"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"c079615e748ca62c34283bc15597006acf3a00b1","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        engine \u003d engine or get_engine()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # NOTE(viktors): If we will use metadata.create_all() for non empty db"},{"line_number":124,"context_line":"        #                schema, it will only add the new tables, but leave"},{"line_number":125,"context_line":"        #                existing as is. So we should avoid of this situation."},{"line_number":126,"context_line":"        if self.schema_revision(engine\u003dengine) is not None:"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a5de9d1_d59f834e","line":123,"updated":"2016-01-28 13:55:07.000000000","message":"Who is viktors?","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3b32f6353c2cd7f134b10a7d5ec194d8455db0e3","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        engine \u003d engine or get_engine()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # NOTE(viktors): If we will use metadata.create_all() for non empty db"},{"line_number":124,"context_line":"        #                schema, it will only add the new tables, but leave"},{"line_number":125,"context_line":"        #                existing as is. So we should avoid of this situation."},{"line_number":126,"context_line":"        if self.schema_revision(engine\u003dengine) is not None:"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a5de9d1_ebb09edf","line":123,"in_reply_to":"7a5de9d1_180d5237","updated":"2016-01-28 14:24:30.000000000","message":"Maybe we do not need this comment, at least from \u0027viktors\u0027? If someone ask viktors about his comment in this rally module, he will probably answer \"I haven\u0027t ever contributed to rally\" :)","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cf5ad4e7fe30793e53a7a20d6c03f61b678ab14f","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        engine \u003d engine or get_engine()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # NOTE(viktors): If we will use metadata.create_all() for non empty db"},{"line_number":124,"context_line":"        #                schema, it will only add the new tables, but leave"},{"line_number":125,"context_line":"        #                existing as is. So we should avoid of this situation."},{"line_number":126,"context_line":"        if self.schema_revision(engine\u003dengine) is not None:"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a5de9d1_180d5237","line":123,"in_reply_to":"7a5de9d1_d59f834e","updated":"2016-01-28 14:17:33.000000000","message":"As far as I understand, this part of code was copy-pasted from another project(ironic?!) and comment was copy-pasted too :)","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"963f5a055fc213e00f881d10d190a1bdb76ef0a5","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        engine \u003d engine or get_engine()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # NOTE(viktors): If we will use metadata.create_all() for non empty db"},{"line_number":124,"context_line":"        #                schema, it will only add the new tables, but leave"},{"line_number":125,"context_line":"        #                existing as is. So we should avoid of this situation."},{"line_number":126,"context_line":"        if self.schema_revision(engine\u003dengine) is not None:"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a5de9d1_2e27a4b7","line":123,"in_reply_to":"7a5de9d1_ebb09edf","updated":"2016-01-28 14:30:33.000000000","message":"I know him, he will look at the code at first:)","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"}],"rally/common/db/sqlalchemy/migrations/README":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0b1ba56303149177721a38a42c34c5551b0ee7e8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Generic single-database configuration."}],"source_content_type":"application/octet-stream","patch_set":25,"id":"9a68dd71_3e528a68","line":1,"updated":"2016-01-21 09:12:34.000000000","message":"This file: \n\n  - Should have extension .rst\n  - Be proper .rst\n  - Contain short instruction how to upgrade/downgrade and create new migration","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"}],"rally/common/db/sqlalchemy/migrations/README.rst":[{"author":{"_account_id":14168,"name":"Alexandr Nevenchannyy","email":"anevenchannyy@mirantis.com","username":"anevenchannyy"},"change_message_id":"6511bd9a0258e538533b1ce0ad77b74634a0dcd1","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    rally-manage db revision"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"- Upgrade existing DB to the latest state."},{"line_number":20,"context_line":"         "},{"line_number":21,"context_line":"  This is needed when previously existing Rally installation is being"},{"line_number":22,"context_line":"  upgraded to a newer version. In this case user should issue command"},{"line_number":23,"context_line":"           "}],"source_content_type":"text/x-rst","patch_set":33,"id":"9a68dd71_621f2eb8","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":9},"updated":"2016-01-26 13:18:40.000000000","message":"Please remove tailing spaces","commit_id":"03997b64a4bbc8557eb988e94d866a4dc8c29d1a"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"37a6a73f6995a235637dc040c01e7bee51efb8c7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    rally-manage db revision"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"- Upgrade existing DB to the latest state."},{"line_number":20,"context_line":"         "},{"line_number":21,"context_line":"  This is needed when previously existing Rally installation is being"},{"line_number":22,"context_line":"  upgraded to a newer version. In this case user should issue command"},{"line_number":23,"context_line":"           "}],"source_content_type":"text/x-rst","patch_set":33,"id":"9a68dd71_ccd71fec","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":9},"in_reply_to":"9a68dd71_621f2eb8","updated":"2016-01-26 17:02:03.000000000","message":"Done","commit_id":"03997b64a4bbc8557eb988e94d866a4dc8c29d1a"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cf5ad4e7fe30793e53a7a20d6c03f61b678ab14f","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Database migration in Rally"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Information for users"},{"line_number":6,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Rally supports DB schema versioning (schema versions are called *revisions*)"}],"source_content_type":"text/x-rst","patch_set":34,"id":"7a5de9d1_58674a25","line":5,"range":{"start_line":5,"start_character":17,"end_line":5,"end_character":21},"updated":"2016-01-28 14:17:33.000000000","message":"Users will note see this doc. Let\u0027s move it to doc directory","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"38c39f1b0202b31a6f2b0840f9ac4cd0d2588dc5","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Database migration in Rally"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Information for users"},{"line_number":6,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Rally supports DB schema versioning (schema versions are called *revisions*)"}],"source_content_type":"text/x-rst","patch_set":34,"id":"7a5de9d1_e9ac2637","line":5,"range":{"start_line":5,"start_character":17,"end_line":5,"end_character":21},"in_reply_to":"7a5de9d1_58674a25","updated":"2016-01-28 14:57:44.000000000","message":"Agree","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"1bb9b7318367313a376d40dfbda5e363035e1023","unresolved":false,"context_lines":[{"line_number":28,"context_line":"  **AFTER** upgrading Rally package. DB schema"},{"line_number":29,"context_line":"  will get upgraded to the latest state and all existing data will be kept."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"- Downgrade existind DB to a previous revision."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  This command could be useful if user wants to return to an earlier version"},{"line_number":34,"context_line":"  of Rally. This could be done by issuing command"}],"source_content_type":"text/x-rst","patch_set":34,"id":"7a5de9d1_292a3e2d","line":31,"updated":"2016-01-28 14:47:31.000000000","message":"existing","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"38c39f1b0202b31a6f2b0840f9ac4cd0d2588dc5","unresolved":false,"context_lines":[{"line_number":28,"context_line":"  **AFTER** upgrading Rally package. DB schema"},{"line_number":29,"context_line":"  will get upgraded to the latest state and all existing data will be kept."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"- Downgrade existind DB to a previous revision."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  This command could be useful if user wants to return to an earlier version"},{"line_number":34,"context_line":"  of Rally. This could be done by issuing command"}],"source_content_type":"text/x-rst","patch_set":34,"id":"7a5de9d1_49645a21","line":31,"in_reply_to":"7a5de9d1_292a3e2d","updated":"2016-01-28 14:57:44.000000000","message":"Done","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"}],"rally/common/db/sqlalchemy/migrations/env.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0b1ba56303149177721a38a42c34c5551b0ee7e8","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# this is the Alembic Config object, which provides"},{"line_number":21,"context_line":"# access to the values within the .ini file in use."},{"line_number":22,"context_line":"config \u003d context.config"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# Interpret the config file for Python logging."},{"line_number":25,"context_line":"# This line sets up loggers basically."}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_dee56ea8","line":22,"updated":"2016-01-21 09:12:34.000000000","message":"Actually I would prefer to avoid creating this variable, because it\u0027s used only once on line 26, which makes this alias useless","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"4112434f41da96eb7829a825d9b2abb513b38475","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# this is the Alembic Config object, which provides"},{"line_number":21,"context_line":"# access to the values within the .ini file in use."},{"line_number":22,"context_line":"config \u003d context.config"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# Interpret the config file for Python logging."},{"line_number":25,"context_line":"# This line sets up loggers basically."}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_d8b6d989","line":22,"in_reply_to":"9a68dd71_dee56ea8","updated":"2016-01-21 12:40:16.000000000","message":"Done","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cf5ad4e7fe30793e53a7a20d6c03f61b678ab14f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            context.run_migrations()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"run_migrations_online()"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a5de9d1_f83b96e9","line":46,"updated":"2016-01-28 14:17:33.000000000","message":"What about `if __name__ \u003d\u003d \"__main__\":` ?","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"93154afcc5cc066358266ab2df6443271e8ee3e4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            context.run_migrations()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"run_migrations_online()"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a5de9d1_9cca8fa0","line":46,"in_reply_to":"7a5de9d1_49bd3a67","updated":"2016-01-28 15:42:02.000000000","message":"Oops. Not sure how exactly, but it breaks the whole thing. Rolled back.","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"38c39f1b0202b31a6f2b0840f9ac4cd0d2588dc5","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            context.run_migrations()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"run_migrations_online()"}],"source_content_type":"text/x-python","patch_set":34,"id":"7a5de9d1_49bd3a67","line":46,"in_reply_to":"7a5de9d1_f83b96e9","updated":"2016-01-28 14:57:44.000000000","message":"Sounds reasonable. Will do","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"}],"rally/common/db/sqlalchemy/migrations/script.py.mako":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cf5ad4e7fe30793e53a7a20d6c03f61b678ab14f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"${message}"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Revision ID: ${up_revision}"},{"line_number":4,"context_line":"Revises: ${down_revision | comma,n}"}],"source_content_type":"application/octet-stream","patch_set":34,"id":"7a5de9d1_eb097e2d","line":1,"updated":"2016-01-28 14:17:33.000000000","message":"Does it possible to use alembic with jinja2?","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3b32f6353c2cd7f134b10a7d5ec194d8455db0e3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"${message}"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Revision ID: ${up_revision}"},{"line_number":4,"context_line":"Revises: ${down_revision | comma,n}"}],"source_content_type":"application/octet-stream","patch_set":34,"id":"7a5de9d1_abe866e3","line":1,"in_reply_to":"7a5de9d1_eb097e2d","updated":"2016-01-28 14:24:30.000000000","message":"AFAIK this is not possible :(","commit_id":"92ff9f31cee6493d6b0d5badf3c9b458f14cdf48"}],"rally/common/db/sqlalchemy/migrations/versions/ca3626f62937_init_migration.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0b1ba56303149177721a38a42c34c5551b0ee7e8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    dialect \u003d api.get_engine().dialect"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    deployments_columns \u003d ["},{"line_number":26,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":27,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":28,"context_line":"        sa.Column(\u0027id\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":29,"context_line":"        sa.Column(\u0027uuid\u0027, sa.String(length\u003d36), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_be9afa12","line":26,"updated":"2016-01-21 09:12:34.000000000","message":"I know it\u0027s generated by alembic, but let\u0027s replace all \u0027 with \" for consistency","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"4112434f41da96eb7829a825d9b2abb513b38475","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    dialect \u003d api.get_engine().dialect"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    deployments_columns \u003d ["},{"line_number":26,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":27,"context_line":"        sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":28,"context_line":"        sa.Column(\u0027id\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":29,"context_line":"        sa.Column(\u0027uuid\u0027, sa.String(length\u003d36), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_d83b39ea","line":26,"in_reply_to":"9a68dd71_be9afa12","updated":"2016-01-21 12:40:16.000000000","message":"Done","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5c436ec2816f920b5bacf95d95810bd48ab96f21","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"Init migration"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Revision ID: ca3626f62937"},{"line_number":4,"context_line":"Revises:"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_88e64ee6","line":1,"updated":"2016-01-25 06:38:36.000000000","message":"Maybe we should just fix all pep issues in this module, seems like it\u0027s not hard.","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"5dd9dc4746d830a04eb43ed1612d2aa05797d5dd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"Init migration"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Revision ID: ca3626f62937"},{"line_number":4,"context_line":"Revises:"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_2b34ef47","line":1,"in_reply_to":"9a68dd71_88e64ee6","updated":"2016-01-25 12:12:33.000000000","message":"Done","commit_id":"adf669c2568b4d544f4f538265bff02185beb4de"}],"tests/unit/common/db/test_migrations.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0b1ba56303149177721a38a42c34c5551b0ee7e8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013: Mirantis Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_011bab73","line":1,"updated":"2016-01-21 09:12:34.000000000","message":"it\u0027s already 2016","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"4112434f41da96eb7829a825d9b2abb513b38475","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013: Mirantis Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_8351d6da","line":1,"in_reply_to":"9a68dd71_011bab73","updated":"2016-01-21 12:40:16.000000000","message":"Done","commit_id":"d6f74de70df3df39b76a6843224d6aa60e47376d"}]}
