)]}'
{"placement/db/sqlalchemy/alembic/env.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c4e422dc0be04a23cd193c5036bb086112f40c9c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        context.run_migrations()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def run_migrations_online():"},{"line_number":68,"context_line":"    \"\"\"Run migrations in \u0027online\u0027 mode."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    In this scenario we need to create an Engine"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_51528812","line":67,"updated":"2018-10-29 21:10:53.000000000","message":"I did some experiments with creating a revision, initially following the instructions you made, but then trying to to automate things using \u0027revision --autogenerate\u0027 and learned a bit about what\u0027s wrong with this method.\n\nI\u0027ll post a follow up that shows what we could do here if we want to be able to use autogenerate (which I think we do).","commit_id":"90724d68210ec30e2c33e29da7a342573e9eccad"}],"placement/db/sqlalchemy/alembic/versions/b4ed3a175331_initial.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a155375b7649d00b1d7bd3f78b7e053c284b6d98","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def upgrade():"},{"line_number":33,"context_line":"    # ### commands auto generated by Alembic - please adjust! ###"},{"line_number":34,"context_line":"    op.create_table(\u0027allocations\u0027,"},{"line_number":35,"context_line":"    sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"    sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_ab1056ac","line":33,"updated":"2018-10-29 13:39:22.000000000","message":"Do we need to adjust it?\nBtw the indent is off below in couple of places","commit_id":"d877559efd86619255f9be467736a2a65b7a91e5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7a4865b4506cfbce20329a2d28689a1f07248ab7","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def upgrade():"},{"line_number":33,"context_line":"    # ### commands auto generated by Alembic - please adjust! ###"},{"line_number":34,"context_line":"    op.create_table(\u0027allocations\u0027,"},{"line_number":35,"context_line":"    sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dTrue),"},{"line_number":36,"context_line":"    sa.Column(\u0027updated_at\u0027, sa.DateTime(), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_a1863515","line":33,"in_reply_to":"3f79a3b5_ab1056ac","updated":"2018-10-29 15:03:57.000000000","message":"Yeah, all of this is auto-generated. As such I don\u0027t think tweaking it for formatting is warranted, unless we want to do that as part of a \"we know the author paid attention because they bothered to reformat the alembic stuff\"?","commit_id":"d877559efd86619255f9be467736a2a65b7a91e5"}],"placement/db/sqlalchemy/migration.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"00fbb05b9475e80cad24b8aacf2eb62f7fcb69e9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    return config"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def version(config\u003dNone, engine\u003dNone):"},{"line_number":39,"context_line":"    \"\"\"Current database version."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    :returns: Database version"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_beb47982","line":38,"updated":"2018-10-23 19:39:39.000000000","message":"Whereas upgrade and downgrade can work without much doing, version(), by itself, doesn\u0027t seem to work unless you pre-create the engine. That is: env.py\u0027s work isn\u0027t happening for this.","commit_id":"ee0290194cd8e30ebeeae8e04c1ad0b34b0097f4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0a6d5b2f1fc26b78c0d6dbb148744b679a69fc54","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    Can be used for initial installation instead of upgrade(\"head\")."},{"line_number":66,"context_line":"    \"\"\""},{"line_number":67,"context_line":"    if engine is None:"},{"line_number":68,"context_line":"        engine \u003d enginefacade.writer.get_engine()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    # NOTE(viktors): If we will use metadata.create_all() for non empty db"},{"line_number":71,"context_line":"    #                schema, it will only add the new tables, but leave"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_fe60b1a6","line":68,"updated":"2018-10-23 19:17:59.000000000","message":"Either get_engine() here, or perhaps don\u0027t bother to have it?","commit_id":"ee0290194cd8e30ebeeae8e04c1ad0b34b0097f4"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"6fc35c6e465aa6edf640e0da7576714adbc1a30d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    Can be used for initial installation instead of upgrade(\"head\")."},{"line_number":66,"context_line":"    \"\"\""},{"line_number":67,"context_line":"    if engine is None:"},{"line_number":68,"context_line":"        engine \u003d enginefacade.writer.get_engine()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    # NOTE(viktors): If we will use metadata.create_all() for non empty db"},{"line_number":71,"context_line":"    #                schema, it will only add the new tables, but leave"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_6b3ce2bf","line":68,"in_reply_to":"3f79a3b5_fe60b1a6","updated":"2018-10-31 16:25:26.000000000","message":"This was stolen^H^H^H^H borrowed from ironic. It\u0027s redundant now.","commit_id":"ee0290194cd8e30ebeeae8e04c1ad0b34b0097f4"}],"placement/db_api.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"640c07836cfd1835d71ead768e431285d5a5e8cb","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    try:"},{"line_number":28,"context_line":"        placement_context_manager.configure("},{"line_number":29,"context_line":"                **_get_db_conf(conf.placement_database))"},{"line_number":30,"context_line":"    except TypeError as e:"},{"line_number":31,"context_line":"        placement_context_manager.make_new_manager()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_452dcdfa","line":30,"updated":"2018-10-30 21:26:49.000000000","message":"Have a look at https://review.openstack.org/#/c/612444/ which addresses the underlying problem with this in a different way and which will conflict here.  I would guess the way in that other review is more correct because unless there\u0027s new info that way has some special cases it needs to handle.","commit_id":"f3045a1120595be4ab69da1031707148bc4fd464"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"842e7d347259374338abff32472be99a11931c6a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    try:"},{"line_number":28,"context_line":"        placement_context_manager.configure("},{"line_number":29,"context_line":"                **_get_db_conf(conf.placement_database))"},{"line_number":30,"context_line":"    except TypeError:"},{"line_number":31,"context_line":"        placement_context_manager.make_new_manager()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_77918d45","line":30,"updated":"2018-10-31 14:20:09.000000000","message":"repeating my comment from previous patch:\n\nHave a look at https://review.openstack.org/#/c/612444/ which\naddresses the underlying problem with this in a different way and\nwhich will conflict here.  I would guess the way in that other\nreview is more correct because unless there\u0027s new info that way has\nsome special cases it needs to handle.","commit_id":"47504375e981f87a9920086f46a88678ffa3dfb3"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"6fc35c6e465aa6edf640e0da7576714adbc1a30d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_bedffd09","side":"PARENT","line":2,"updated":"2018-10-31 16:25:26.000000000","message":"Looks like a rebase goof","commit_id":"245d8d0603c081bb257c2a8ccb3b52131da1e321"}],"placement/tests/fixtures.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a762a72430c4b4c330ce3f23aef96968c253142f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        super(Database, self).setUp()"},{"line_number":43,"context_line":"        # NOTE(cdent): Instead of upgrade here we could also do create_schema"},{"line_number":44,"context_line":"        # here (assuming it works). That would be faster than running"},{"line_number":45,"context_line":"        # migrations (once we actually have some migrations)."},{"line_number":46,"context_line":"        # The migration commands will look in alembic\u0027s env.py which itself"},{"line_number":47,"context_line":"        # has access to the oslo config for things like the database"},{"line_number":48,"context_line":"        # connection string."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_5661a50f","line":45,"updated":"2018-10-22 21:57:33.000000000","message":"Keep in mind that alembic doesn\u0027t \"run\" migrations in the sense of starting at the beginning and applying each change. It simply creates the structure from the given revision, or, if there is a an existing schema, goes directly from that to the desired state, even if there are a whole bunch of intermediate steps. It essentially does out of the box what the schema caching we created with sqla migrations does to speed things up.","commit_id":"74758636a45f6abe7f709d92faa2917778c3c294"}],"placement/tests/functional/db/test_migrations.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6f023701dfe125ed624fc0ed241eec90a9c41ca0","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            self.assertNotEqual(v1, v2)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"class TestMigrationsMySQL(MigrationCheckersMixin,"},{"line_number":222,"context_line":"                          WalkVersionsMixin,"},{"line_number":223,"context_line":"                          test_fixtures.OpportunisticDBTestMixin,"},{"line_number":224,"context_line":"                          test_base.BaseTestCase):"},{"line_number":225,"context_line":"    FIXTURE \u003d test_fixtures.MySQLOpportunisticFixture"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"class TestMigrationsPostgreSQL(MigrationCheckersMixin,"},{"line_number":229,"context_line":"                               WalkVersionsMixin,"},{"line_number":230,"context_line":"                               test_fixtures.OpportunisticDBTestMixin,"},{"line_number":231,"context_line":"                               test_base.BaseTestCase):"},{"line_number":232,"context_line":"    FIXTURE \u003d test_fixtures.PostgresqlOpportunisticFixture"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"class ModelsMigrationSyncMixin(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_f75b5d20","line":232,"range":{"start_line":221,"start_character":0,"end_line":232,"end_character":58},"updated":"2018-10-31 14:07:19.000000000","message":"Are these actually getting tested? Because I thought you needed this https://github.com/openstack/nova/blob/master/tools/test-setup.sh for infra to setup the mysql/postgresql backends?","commit_id":"47504375e981f87a9920086f46a88678ffa3dfb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"55a352caad9686658d592e56bbe417bce3bb2eae","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            self.assertNotEqual(v1, v2)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"class TestMigrationsMySQL(MigrationCheckersMixin,"},{"line_number":222,"context_line":"                          WalkVersionsMixin,"},{"line_number":223,"context_line":"                          test_fixtures.OpportunisticDBTestMixin,"},{"line_number":224,"context_line":"                          test_base.BaseTestCase):"},{"line_number":225,"context_line":"    FIXTURE \u003d test_fixtures.MySQLOpportunisticFixture"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"class TestMigrationsPostgreSQL(MigrationCheckersMixin,"},{"line_number":229,"context_line":"                               WalkVersionsMixin,"},{"line_number":230,"context_line":"                               test_fixtures.OpportunisticDBTestMixin,"},{"line_number":231,"context_line":"                               test_base.BaseTestCase):"},{"line_number":232,"context_line":"    FIXTURE \u003d test_fixtures.PostgresqlOpportunisticFixture"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"class ModelsMigrationSyncMixin(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_b7cac5a0","line":232,"range":{"start_line":221,"start_character":0,"end_line":232,"end_character":58},"in_reply_to":"3f79a3b5_17ae19e4","updated":"2018-10-31 14:11:11.000000000","message":"Looks like zuul infra will run tools/test-setup.sh if it exists and is executable:\n\nhttp://git.openstack.org/cgit/openstack-infra/zuul-jobs/tree/roles/test-setup/tasks/main.yaml\n\nSo just copy that from the nova repo into a change below this in the series and we can see if it does the trick.","commit_id":"47504375e981f87a9920086f46a88678ffa3dfb3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c89d93319fffcf68ffcd69fba4f1d8dc688eeea2","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            self.assertNotEqual(v1, v2)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"class TestMigrationsMySQL(MigrationCheckersMixin,"},{"line_number":222,"context_line":"                          WalkVersionsMixin,"},{"line_number":223,"context_line":"                          test_fixtures.OpportunisticDBTestMixin,"},{"line_number":224,"context_line":"                          test_base.BaseTestCase):"},{"line_number":225,"context_line":"    FIXTURE \u003d test_fixtures.MySQLOpportunisticFixture"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"class TestMigrationsPostgreSQL(MigrationCheckersMixin,"},{"line_number":229,"context_line":"                               WalkVersionsMixin,"},{"line_number":230,"context_line":"                               test_fixtures.OpportunisticDBTestMixin,"},{"line_number":231,"context_line":"                               test_base.BaseTestCase):"},{"line_number":232,"context_line":"    FIXTURE \u003d test_fixtures.PostgresqlOpportunisticFixture"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"class ModelsMigrationSyncMixin(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_17ae19e4","line":232,"range":{"start_line":221,"start_character":0,"end_line":232,"end_character":58},"in_reply_to":"3f79a3b5_f75b5d20","updated":"2018-10-31 14:08:33.000000000","message":"Like I suspected, this isn\u0027t run:\n\nhttp://logs.openstack.org/41/611441/9/check/openstack-tox-functional-py35/fba1eb7/job-output.txt.gz#_2018-10-31_13_53_26_203352\n\nnor mysql:\n\nhttp://logs.openstack.org/41/611441/9/check/openstack-tox-functional-py35/fba1eb7/job-output.txt.gz#_2018-10-31_13_53_26_454042","commit_id":"47504375e981f87a9920086f46a88678ffa3dfb3"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"1f36db9db167e2693d7221021b4220e3666e7d4f","unresolved":false,"context_lines":[{"line_number":235,"context_line":"class ModelsMigrationSyncMixin(object):"},{"line_number":236,"context_line":"    def setUp(self):"},{"line_number":237,"context_line":"        super(ModelsMigrationSyncMixin, self).setUp()"},{"line_number":238,"context_line":"        self.engine \u003d enginefacade.writer.get_engine()"},{"line_number":239,"context_line":"        self.useFixture(fixtures.Timeout(MIGRATIONS_TIMEOUT,"},{"line_number":240,"context_line":"                                         gentle\u003dTrue))"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_0c27eb68","line":238,"updated":"2018-10-31 17:44:29.000000000","message":"Before calling this we need configure the database and get the right engine.","commit_id":"3f2a8cdaa9db922a0100b352f0a75fbc42c3b539"}],"placement/tests/unit/test_migrations.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"694e932b48c5674b4393c42895416e0d33fe80f9","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        self.assertEqual(upgraded, self._migrate_up.call_args_list)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"class MigrationCheckersMixin(object):"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def setUp(self):"},{"line_number":185,"context_line":"        super(MigrationCheckersMixin, self).setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_a045a874","line":182,"updated":"2018-10-17 21:41:25.000000000","message":"These comes from Ironic, I guess?","commit_id":"8f3f9e340d288c5962e77afe05d4064a1c5f24f9"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"abe47415a548a576051bc35a924b8fefd95a137a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        self.assertEqual(upgraded, self._migrate_up.call_args_list)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"class MigrationCheckersMixin(object):"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def setUp(self):"},{"line_number":185,"context_line":"        super(MigrationCheckersMixin, self).setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_4225a7be","line":182,"in_reply_to":"3f79a3b5_a045a874","updated":"2018-10-18 15:29:25.000000000","message":"Yeah, I just copied the file and did s/ironic/placement. I\u0027ve already started cleaning things up.","commit_id":"8f3f9e340d288c5962e77afe05d4064a1c5f24f9"}],"tools/test-setup.sh":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f1d00934d031e0097f8a3a9203d8d3f7ff7f7e4d","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# Now create our database."},{"line_number":30,"context_line":"mysql -u $DB_USER -p$DB_PW -h 127.0.0.1 -e \""},{"line_number":31,"context_line":"    SET default_storage_engine\u003dMYISAM;"},{"line_number":32,"context_line":"    DROP DATABASE IF EXISTS openstack_citest;"},{"line_number":33,"context_line":"    CREATE DATABASE openstack_citest CHARACTER SET utf8;\""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-sh","patch_set":10,"id":"3f79a3b5_772d0dfb","line":31,"updated":"2018-10-31 14:22:35.000000000","message":"MYISAM, still?","commit_id":"acb040b5c29fba0586116e5b604d2232404f1e05"}]}
