)]}'
{"nova/db/sqlalchemy/migrate_repo/versions/291_enforce_flavors_migrated.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"82c195cbaa9e908cd12c5bf0dac8c76f8d1b78b8","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        msg \u003d _(\u0027There are still %(count)i unmigrated flavor records. \u0027"},{"line_number":30,"context_line":"                \u0027Migration cannot continue until all instance flavor \u0027"},{"line_number":31,"context_line":"                \u0027records have been migrated to the new format. Please run \u0027"},{"line_number":32,"context_line":"                \u0027`nova-manage migrate-flavor-data\\\u0027 first.\u0027) % {\u0027count\u0027: count}"},{"line_number":33,"context_line":"        raise exception.ValidationError(detail\u003dmsg)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dac4157f_475f7ae5","line":32,"range":{"start_line":32,"start_character":16,"end_line":32,"end_character":18},"updated":"2015-04-21 08:23:29.000000000","message":"\u0027` \u003d\u003e \u0027\\\u0027","commit_id":"b96fec22167be79c06b6856d1b98c3f09ada720d"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"cfc1087e7dc87ef65df2f1c7cef46de5d52dd466","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        msg \u003d _(\u0027There are still %(count)i unmigrated flavor records. \u0027"},{"line_number":30,"context_line":"                \u0027Migration cannot continue until all instance flavor \u0027"},{"line_number":31,"context_line":"                \u0027records have been migrated to the new format. Please run \u0027"},{"line_number":32,"context_line":"                \u0027`nova-manage migrate-flavor-data\\\u0027 first.\u0027) % {\u0027count\u0027: count}"},{"line_number":33,"context_line":"        raise exception.ValidationError(detail\u003dmsg)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dac4157f_efc5388e","line":32,"in_reply_to":"dac4157f_475f7ae5","updated":"2015-04-21 13:54:36.000000000","message":"The command is also \u0027nova-manage db migrate_flavor_data\u0027","commit_id":"b96fec22167be79c06b6856d1b98c3f09ada720d"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"2ecb934f1df87d76655ce6709d17537a63ea827b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        raise exception.ValidationError(detail\u003dmsg)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def downgrade(migrate_engine):"},{"line_number":39,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ad0253b_95398444","line":38,"updated":"2015-04-28 15:47:57.000000000","message":"We\u0027ve eliminated all the downgrade() functions from all the DB migrations, so this and the corresponding test method should probably go away…","commit_id":"0721bab654cf80497802adcba27758de86ae2f53"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"036b583d69b4a6915c23fccfb80ef7c7ddae36b4","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def upgrade(migrate_engine):"},{"line_number":21,"context_line":"    meta \u003d MetaData(migrate_engine)"},{"line_number":22,"context_line":"    instances \u003d Table(\u0027instances\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":"    sysmeta \u003d Table(\u0027instance_system_metadata\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":"    count \u003d select([func.count()]).select_from(sysmeta).where("},{"line_number":25,"context_line":"        and_(instances.c.uuid \u003d\u003d sysmeta.c.instance_uuid,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5ad0253b_78ffd401","line":22,"updated":"2015-04-29 13:31:10.000000000","message":"We don\u0027t care about shadow tables at all?","commit_id":"b9c28cc20c59b97e134ec2002782980980f491f3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9f0e5b5fcf869dcbdba1a0bb667331a0334f7965","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def upgrade(migrate_engine):"},{"line_number":21,"context_line":"    meta \u003d MetaData(migrate_engine)"},{"line_number":22,"context_line":"    instances \u003d Table(\u0027instances\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":"    sysmeta \u003d Table(\u0027instance_system_metadata\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":"    count \u003d select([func.count()]).select_from(sysmeta).where("},{"line_number":25,"context_line":"        and_(instances.c.uuid \u003d\u003d sysmeta.c.instance_uuid,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3acd31a7_14c1f42e","line":22,"in_reply_to":"5ad0253b_7863541b","updated":"2015-04-29 14:11:00.000000000","message":"What if I restore a deleted server that has this unmigrated data?  If we remove the shim/online migration code, don\u0027t things break down?","commit_id":"b9c28cc20c59b97e134ec2002782980980f491f3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7036cbbf7252156ac8a68f8d1cdb1fee3eb14b77","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def upgrade(migrate_engine):"},{"line_number":21,"context_line":"    meta \u003d MetaData(migrate_engine)"},{"line_number":22,"context_line":"    instances \u003d Table(\u0027instances\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":"    sysmeta \u003d Table(\u0027instance_system_metadata\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":"    count \u003d select([func.count()]).select_from(sysmeta).where("},{"line_number":25,"context_line":"        and_(instances.c.uuid \u003d\u003d sysmeta.c.instance_uuid,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5ad0253b_7863541b","line":22,"in_reply_to":"5ad0253b_78ffd401","updated":"2015-04-29 13:50:07.000000000","message":"Nope, we don\u0027t even check deleted instances (see below) in the main table.","commit_id":"b9c28cc20c59b97e134ec2002782980980f491f3"}],"nova/tests/unit/db/test_migrations.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"82c195cbaa9e908cd12c5bf0dac8c76f8d1b78b8","unresolved":false,"context_lines":[{"line_number":882,"context_line":"        self.assertTrue(key_pairs.c.name.nullable)"},{"line_number":883,"context_line":""},{"line_number":884,"context_line":"    def _check_291(self, engine, data):"},{"line_number":885,"context_line":"        # NOTE(danms): This is a dummy migration that just does a consistency"},{"line_number":886,"context_line":"        # check"},{"line_number":887,"context_line":"        pass"},{"line_number":888,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dac4157f_270926de","line":885,"updated":"2015-04-21 08:23:29.000000000","message":"can we at least have the code validated and check the exception?","commit_id":"b96fec22167be79c06b6856d1b98c3f09ada720d"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c56489a61d78d49ad44729cfab4843ed300e972a","unresolved":false,"context_lines":[{"line_number":669,"context_line":"        key_pairs \u003d oslodbutils.get_table(engine, \u0027key_pairs\u0027)"},{"line_number":670,"context_line":"        self.assertFalse(key_pairs.c.name.nullable)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    def _post_downgrade_280(self, engine):"},{"line_number":673,"context_line":"        key_pairs \u003d oslodbutils.get_table(engine, \u0027key_pairs\u0027)"},{"line_number":674,"context_line":"        self.assertTrue(key_pairs.c.name.nullable)"},{"line_number":675,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5ad0253b_4a4e9fc2","line":672,"updated":"2015-04-28 18:41:22.000000000","message":"This test method should go away; probably came from a bad rebase…","commit_id":"49dabf4cf3b6147db4b1dfac590d6519c33d2229"}],"nova/tests/unit/db/test_sqlalchemy_migration.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c56489a61d78d49ad44729cfab4843ed300e972a","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        super(TestFlavorCheck, self).setUp()"},{"line_number":192,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":193,"context_line":"        self.migration \u003d importlib.import_module("},{"line_number":194,"context_line":"            \u0027nova.db.sqlalchemy.migrate_repo.versions.\u0027 +"},{"line_number":195,"context_line":"            \u0027291_enforce_flavors_migrated\u0027)"},{"line_number":196,"context_line":"        self.engine \u003d db_api.get_engine()"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5ad0253b_8adb97ed","line":194,"updated":"2015-04-28 18:41:22.000000000","message":"The \u0027+\u0027 operator here is redundant…","commit_id":"49dabf4cf3b6147db4b1dfac590d6519c33d2229"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f07ab08f8f22806765ac6148ee33ab1f773c7c7e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        super(TestFlavorCheck, self).setUp()"},{"line_number":192,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":193,"context_line":"        self.migration \u003d importlib.import_module("},{"line_number":194,"context_line":"            \u0027nova.db.sqlalchemy.migrate_repo.versions.\u0027 +"},{"line_number":195,"context_line":"            \u0027291_enforce_flavors_migrated\u0027)"},{"line_number":196,"context_line":"        self.engine \u003d db_api.get_engine()"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5ad0253b_b4d599ba","line":194,"in_reply_to":"5ad0253b_6a227bbb","updated":"2015-04-28 19:40:03.000000000","message":"\"The Redundant Department of Redundancy\" :)","commit_id":"49dabf4cf3b6147db4b1dfac590d6519c33d2229"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bdd1ea39b1df9a855526b433a5bff848cc9752e4","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        super(TestFlavorCheck, self).setUp()"},{"line_number":192,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":193,"context_line":"        self.migration \u003d importlib.import_module("},{"line_number":194,"context_line":"            \u0027nova.db.sqlalchemy.migrate_repo.versions.\u0027 +"},{"line_number":195,"context_line":"            \u0027291_enforce_flavors_migrated\u0027)"},{"line_number":196,"context_line":"        self.engine \u003d db_api.get_engine()"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5ad0253b_6a227bbb","line":194,"in_reply_to":"5ad0253b_8adb97ed","updated":"2015-04-28 18:45:12.000000000","message":"Hey, since when is a little redundancy a bad thing? :)","commit_id":"49dabf4cf3b6147db4b1dfac590d6519c33d2229"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bf5ef1bf6110466a7a83720d30a70dce65aafdef","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                system_metadata\u003d{\u0027foo\u0027: \u0027bar\u0027,"},{"line_number":213,"context_line":"                                                 \u0027instance_type_id\u0027: \u0027foo\u0027})"},{"line_number":214,"context_line":"        inst.create()"},{"line_number":215,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":216,"context_line":"                          self.migration.upgrade, self.engine)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def test_upgrade_flavor_deleted_instances(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5ad0253b_85bc896d","line":215,"updated":"2015-04-29 13:30:53.000000000","message":"nit: you could parse the ValidationError message and make sure the count is correct.","commit_id":"b9c28cc20c59b97e134ec2002782980980f491f3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bf5ef1bf6110466a7a83720d30a70dce65aafdef","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                                project_id\u003dself.context.project_id,"},{"line_number":259,"context_line":"                                system_metadata\u003dsysmeta)"},{"line_number":260,"context_line":"        inst.create()"},{"line_number":261,"context_line":"        inst.flavor"},{"line_number":262,"context_line":"        inst.save()"},{"line_number":263,"context_line":"        self.assertNotIn(\u0027instance_type_id\u0027, inst.system_metadata)"},{"line_number":264,"context_line":"        sysmeta \u003d db_api.instance_system_metadata_get(self.context,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5ad0253b_4512f163","line":261,"updated":"2015-04-29 13:30:53.000000000","message":"This does what?  Lazy loads the flavor into into the instance object and does the \"live\" migration?  Could use a comment explaining that in this test for those unfamiliar.","commit_id":"b9c28cc20c59b97e134ec2002782980980f491f3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7036cbbf7252156ac8a68f8d1cdb1fee3eb14b77","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                                project_id\u003dself.context.project_id,"},{"line_number":259,"context_line":"                                system_metadata\u003dsysmeta)"},{"line_number":260,"context_line":"        inst.create()"},{"line_number":261,"context_line":"        inst.flavor"},{"line_number":262,"context_line":"        inst.save()"},{"line_number":263,"context_line":"        self.assertNotIn(\u0027instance_type_id\u0027, inst.system_metadata)"},{"line_number":264,"context_line":"        sysmeta \u003d db_api.instance_system_metadata_get(self.context,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5ad0253b_18bb4074","line":261,"in_reply_to":"5ad0253b_4512f163","updated":"2015-04-29 13:50:07.000000000","message":"Yeh, that\u0027s what it does.","commit_id":"b9c28cc20c59b97e134ec2002782980980f491f3"}]}
