)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b9ec2a1e3af7c27a66408691e07f503cdeb87efd","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The normal provisioning system of generating anonymously-named"},{"line_number":25,"context_line":"databases within MySQL and Postgresql is in place, which allows"},{"line_number":26,"context_line":"tests to run concurrently in multiple processes withotu conflicts."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Icf2ea4a5f51dce412c6e93fda3950d0c9f17aa9f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_42c34e32","line":26,"range":{"start_line":26,"start_character":48,"end_line":26,"end_character":55},"updated":"2018-12-03 13:01:18.000000000","message":"nit:without","commit_id":"59618b386be91c8608d68ffec0332c420584df11"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"dc8b2462964a06fe1750658a8145e7f9ef7fb93e","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The normal provisioning system of generating anonymously-named"},{"line_number":25,"context_line":"databases within MySQL and Postgresql is in place, which allows"},{"line_number":26,"context_line":"tests to run concurrently in multiple processes withotu conflicts."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Icf2ea4a5f51dce412c6e93fda3950d0c9f17aa9f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_799cf8bd","line":26,"range":{"start_line":26,"start_character":48,"end_line":26,"end_character":55},"in_reply_to":"3f79a3b5_42c34e32","updated":"2018-12-03 15:55:01.000000000","message":"Done","commit_id":"59618b386be91c8608d68ffec0332c420584df11"}],"placement/tests/fixtures.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b9ec2a1e3af7c27a66408691e07f503cdeb87efd","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def setUp(self):"},{"line_number":62,"context_line":"        super(Database, self).setUp()"},{"line_number":63,"context_line":"        reset()"},{"line_number":64,"context_line":"        placement_db.configure(self.conf_fixture.conf)"},{"line_number":65,"context_line":"        migration.create_schema()"},{"line_number":66,"context_line":"        resource_provider._TRAITS_SYNCED \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_765168d5","side":"PARENT","line":63,"updated":"2018-12-03 13:01:18.000000000","message":"Why don\u0027t we need this reset() calls in this fixture any more? Don\u0027t we recreate the racy situation in nova functional test by this change?\n\nAnyhow, I\u0027ve started a series of nova functional test runs and I will report back in couple of hours.","commit_id":"764d0e255d5c252e9f2b49660328a4c25f7fca7e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cfc28c5cce068c0637cfdb8d893bf62a291f3e18","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def setUp(self):"},{"line_number":62,"context_line":"        super(Database, self).setUp()"},{"line_number":63,"context_line":"        reset()"},{"line_number":64,"context_line":"        placement_db.configure(self.conf_fixture.conf)"},{"line_number":65,"context_line":"        migration.create_schema()"},{"line_number":66,"context_line":"        resource_provider._TRAITS_SYNCED \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_43c82d4d","side":"PARENT","line":63,"in_reply_to":"3f79a3b5_03b0f540","updated":"2018-12-03 14:54:14.000000000","message":"Thanks for the explanation. Meanwhile I run 42 consecutive full nova functional test run and I could not reproduce to race. So I\u0027m happy with this change.","commit_id":"764d0e255d5c252e9f2b49660328a4c25f7fca7e"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"47aec247564f1d351adc38359e60d8f7c621b928","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def setUp(self):"},{"line_number":62,"context_line":"        super(Database, self).setUp()"},{"line_number":63,"context_line":"        reset()"},{"line_number":64,"context_line":"        placement_db.configure(self.conf_fixture.conf)"},{"line_number":65,"context_line":"        migration.create_schema()"},{"line_number":66,"context_line":"        resource_provider._TRAITS_SYNCED \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_03b0f540","side":"PARENT","line":63,"in_reply_to":"3f79a3b5_765168d5","updated":"2018-12-03 14:29:02.000000000","message":"all of the tests that use this fixture are running against SQLite \":memory:\", as is typical for every openstack application I\u0027ve seen.   The AdHocDbFixture is designed for this case where the \"memory\" database can just be disposed at the end of a test.   The fixture here uses `.create_all()` to build the schema in the database, as it was before, which is extremely fast with a sqlite memory database.\n\nif you wanted the regular API tests to also run against MySQL / PG, which was one of the original goals of the oslo_db fixtures, you\u0027d use the OpportunisticDbFixture to get database connectivity, the GeneratesSchema mixin which indicates how the database is built up, and then you would also need to define the teardown strategy which can be one of \"drop the schema\", easiest but also slowest per test since you need to re-create on each run, or it can use the DeletesFromSchema mixin or the RollsBackTransaction mixin which define the two other ways that you can reset the database after a test.   But again, every test suite I\u0027ve seen limits the Postgresql / MySQL use cases just to their migration tests which are actually easier to design for since they include the creation/dropping of the schema as part of the test itself.","commit_id":"764d0e255d5c252e9f2b49660328a4c25f7fca7e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c48a2af8c1fc8b09c1f089ac6a8126f2bf69e92b","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            engine)"},{"line_number":65,"context_line":"        self.addCleanup(_reset_facade)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.addCleanup(self.cleanup)"},{"line_number":68,"context_line":"        resource_provider._TRAITS_SYNCED \u003d False"},{"line_number":69,"context_line":"        resource_provider._RC_CACHE \u003d None"},{"line_number":70,"context_line":"        deploy.update_database()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_9a6e34c9","line":67,"updated":"2018-12-07 17:26:11.000000000","message":"just realized this adds a double cleanup (which doesn\u0027t break anything). I\u0027ll clean it up elsewhere","commit_id":"34f03c297e28ae2c46ab11debdb4bbe64df1acdc"}],"placement/tests/functional/db/test_migrations.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"dcd6364c3435d6b04e58b9c9333200c8a6c1cc68","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        return models.BASE.metadata"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_engine(self):"},{"line_number":218,"context_line":"        try:"},{"line_number":219,"context_line":"            return db_api.get_placement_engine()"},{"line_number":220,"context_line":"        except (db_exc.DBNonExistentDatabase, db_exc.DBConnectionError):"},{"line_number":221,"context_line":"            self.skipTest(\u0027%s not available\u0027 % self.DRIVER)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def db_sync(self, engine):"},{"line_number":224,"context_line":"        migration.upgrade(\u0027head\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_46a91b24","line":221,"range":{"start_line":218,"start_character":1,"end_line":221,"end_character":59},"updated":"2018-12-03 15:45:01.000000000","message":"My experiments suggest that this exception handling is not used. The tests are properly skipped (when a db server isn\u0027t available) with just\n\n    return db_api.get_placement_engine()\n\nhere.\n\nI also tried without defining get_engine, and that lead to failure.","commit_id":"59618b386be91c8608d68ffec0332c420584df11"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"dc8b2462964a06fe1750658a8145e7f9ef7fb93e","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        return models.BASE.metadata"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_engine(self):"},{"line_number":218,"context_line":"        try:"},{"line_number":219,"context_line":"            return db_api.get_placement_engine()"},{"line_number":220,"context_line":"        except (db_exc.DBNonExistentDatabase, db_exc.DBConnectionError):"},{"line_number":221,"context_line":"            self.skipTest(\u0027%s not available\u0027 % self.DRIVER)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def db_sync(self, engine):"},{"line_number":224,"context_line":"        migration.upgrade(\u0027head\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_59333cf0","line":221,"range":{"start_line":218,"start_character":1,"end_line":221,"end_character":59},"in_reply_to":"3f79a3b5_46a91b24","updated":"2018-12-03 15:55:01.000000000","message":"right I was being cautious when i was first getting this to run and i missed this.   overall all of these methods are meant to be simple plugins without the implementor needing to worry about skipping tests or anything like that.","commit_id":"59618b386be91c8608d68ffec0332c420584df11"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"a02e105ff2a73a6bf075d7e2f6b9808f428cf55e","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from alembic import script"},{"line_number":28,"context_line":"import mock"},{"line_number":29,"context_line":"from oslo_db import exception as db_exc"},{"line_number":30,"context_line":"from oslo_db.sqlalchemy import test_fixtures"},{"line_number":31,"context_line":"from oslo_db.sqlalchemy import test_migrations"},{"line_number":32,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_f25c9d80","line":29,"updated":"2018-12-03 19:04:44.000000000","message":"oops, sorry thanks for fixing","commit_id":"a049de9b8d97c9c99df47d86e33385ffd7bc9496"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f323657e0cff9c065b883702b3bdc97b362f185c","unresolved":false,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"class ModelsMigrationsSyncPostgresql(_TestModelsMigrations,"},{"line_number":236,"context_line":"                                    test_fixtures.OpportunisticDBTestMixin,"},{"line_number":237,"context_line":"                                    test_base.BaseTestCase):"},{"line_number":238,"context_line":"    FIXTURE \u003d PostgresqlOpportunisticFixture"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_51a54cb2","line":236,"range":{"start_line":236,"start_character":36,"end_line":236,"end_character":37},"updated":"2018-12-03 22:34:42.000000000","message":"micro-nit: needs one more space of indentation.","commit_id":"34f03c297e28ae2c46ab11debdb4bbe64df1acdc"}]}
