)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"744b0acf42a219db98a145f2f4f1b0eb96b738f8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enables MySQL Cluster Support for Nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implements minor fixes to the SQL Alchemy and Alembic scripts in"},{"line_number":10,"context_line":"Nova to support the MySQL Cluster DB. This includes the usage"},{"line_number":11,"context_line":"of the boolean mysql_enable_ndb setting from oslo.db from bug 1564110."},{"line_number":12,"context_line":"This allows operators to select from MySQL (InnoDB) or MySQL Cluster"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1f1a1f67_48cd462f","line":9,"range":{"start_line":9,"start_character":46,"end_line":9,"end_character":53},"updated":"2017-07-18 20:13:25.000000000","message":"There are no alembic scripts in nova.","commit_id":"52eda217676b36f19b1e35328c5a55bbf3b0a473"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"744b0acf42a219db98a145f2f4f1b0eb96b738f8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enables MySQL Cluster Support for Nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implements minor fixes to the SQL Alchemy and Alembic scripts in"},{"line_number":10,"context_line":"Nova to support the MySQL Cluster DB. This includes the usage"},{"line_number":11,"context_line":"of the boolean mysql_enable_ndb setting from oslo.db from bug 1564110."},{"line_number":12,"context_line":"This allows operators to select from MySQL (InnoDB) or MySQL Cluster"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1f1a1f67_28d0cac8","line":9,"range":{"start_line":9,"start_character":34,"end_line":9,"end_character":41},"updated":"2017-07-18 20:13:25.000000000","message":"sqlalchemy-migrate\n\nIt\u0027s a different thing:\n\nhttps://github.com/openstack/sqlalchemy-migrate","commit_id":"52eda217676b36f19b1e35328c5a55bbf3b0a473"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"aea5d96ed2e0138e16263654050d93ffcab383bd","unresolved":false,"context_lines":[{"line_number":2926,"context_line":"        needs_create \u003d True"},{"line_number":2927,"context_line":""},{"line_number":2928,"context_line":"    try:"},{"line_number":2929,"context_line":"        if CONF.database.mysql_enable_ndb:"},{"line_number":2930,"context_line":"            if needs_create:"},{"line_number":2931,"context_line":"                info_cache.save(context.session)"},{"line_number":2932,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_cf6290ad","line":2929,"updated":"2017-03-16 19:58:03.000000000","message":"this needs to be abstracted into oslo.db enginefacade and also needs to internally consult the dialect-level flag, never CONF.database so that functions remain agnostic of a specific configuration.","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"c8bfa7e819261c2932ddeee6c27922fdcf20f974","unresolved":false,"context_lines":[{"line_number":2926,"context_line":"        needs_create \u003d True"},{"line_number":2927,"context_line":""},{"line_number":2928,"context_line":"    try:"},{"line_number":2929,"context_line":"        if CONF.database.mysql_enable_ndb:"},{"line_number":2930,"context_line":"            if needs_create:"},{"line_number":2931,"context_line":"                info_cache.save(context.session)"},{"line_number":2932,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_bf3b99ea","line":2929,"in_reply_to":"1a1ced50_35728ee6","updated":"2017-03-17 20:02:48.000000000","message":"I\u0027ll take a look at adding this functionality next after next week.","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"83e2e58b91cb56c8188988be44fb4bc2f9aa04dd","unresolved":false,"context_lines":[{"line_number":2926,"context_line":"        needs_create \u003d True"},{"line_number":2927,"context_line":""},{"line_number":2928,"context_line":"    try:"},{"line_number":2929,"context_line":"        if CONF.database.mysql_enable_ndb:"},{"line_number":2930,"context_line":"            if needs_create:"},{"line_number":2931,"context_line":"                info_cache.save(context.session)"},{"line_number":2932,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_35728ee6","line":2929,"in_reply_to":"1a1ced50_7b815a8f","updated":"2017-03-17 01:12:49.000000000","message":"this is why we use facades!   context_manager.writer.savepoint.xyz is all part of oslo.db.   \n\nA quick way to make the savepoint not happen is to just disable it based on the \"ndb\" flag here: https://github.com/openstack/oslo.db/blob/master/oslo_db/sqlalchemy/enginefacade.py#L930 \n\nHowever, in this particular block, and others that use savepoints, it\u0027s not really safe to get a DBDuplicateError - the ORM rolls back the enclosing transaction when this occurs, which is not what\u0027s wanted here.     so even though we can hit this in enginefacade very easily, it might not be the correct approach considering what we expect a savepoint block to do.\n\nIn the case of NDB, we perhaps want to either make a whole different session / connection / transaction in parallel to the one going on here, or we would want to disable the savepoint below the level of the ORM, so that the ORM follows along with savepoint semantics and doesn\u0027t rollback the transaction.\n\nWhich leads to how that would be done.    We\u0027d just stick some more event handlers in oslo_db.sqlalchemy.ndb to intercept the savepoint instruction at the execution level, and just have them ignored.   That is, we just block savepoints completely.   (If we had our \"ndb+pymysql\" dialect, that would be even easier).    That would again be a \"before_execute()\" or \"before_cursor_execute()\" event handler that just intercepts savepoints, either looking for objects like expression.SavepointClause or for strings like \"^SAVEPOINT .*\" and rewrites them as do-nothings.\n\nndb would need to be able to continue to commit a transaction in which an integrity error was just emitted.   Some databases can\u0027t do that.","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"48f9575c7b2993bc12eb59521ffc7d2c314bebe1","unresolved":false,"context_lines":[{"line_number":2926,"context_line":"        needs_create \u003d True"},{"line_number":2927,"context_line":""},{"line_number":2928,"context_line":"    try:"},{"line_number":2929,"context_line":"        if CONF.database.mysql_enable_ndb:"},{"line_number":2930,"context_line":"            if needs_create:"},{"line_number":2931,"context_line":"                info_cache.save(context.session)"},{"line_number":2932,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_7b815a8f","line":2929,"in_reply_to":"1a1ced50_cf6290ad","updated":"2017-03-16 22:53:39.000000000","message":"Hi Mike. Do you have examples on how to intercept savepoints and disable them from oslo_db? I don\u0027t see any examples of this. I agree, it would be ideal to move that logic into our ndb module.","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"83e2e58b91cb56c8188988be44fb4bc2f9aa04dd","unresolved":false,"context_lines":[{"line_number":2938,"context_line":"                else:"},{"line_number":2939,"context_line":"                    info_cache.update(values)"},{"line_number":2940,"context_line":"    except db_exc.DBDuplicateEntry:"},{"line_number":2941,"context_line":"        # NOTE(sirp): Possible race if two greenthreads attempt to"},{"line_number":2942,"context_line":"        # recreate the instance cache entry at the same time. First one"},{"line_number":2943,"context_line":"        # wins."},{"line_number":2944,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_f809cbde","line":2941,"updated":"2017-03-17 01:12:49.000000000","message":"... namely here.  if we didn\u0027t do a savepoint, it\u0027s not safe to retry this operation.   a retry will fail because the whole enclosing transaction will have been rolled back.","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"c8bfa7e819261c2932ddeee6c27922fdcf20f974","unresolved":false,"context_lines":[{"line_number":2938,"context_line":"                else:"},{"line_number":2939,"context_line":"                    info_cache.update(values)"},{"line_number":2940,"context_line":"    except db_exc.DBDuplicateEntry:"},{"line_number":2941,"context_line":"        # NOTE(sirp): Possible race if two greenthreads attempt to"},{"line_number":2942,"context_line":"        # recreate the instance cache entry at the same time. First one"},{"line_number":2943,"context_line":"        # wins."},{"line_number":2944,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_3f308901","line":2941,"in_reply_to":"1a1ced50_f809cbde","updated":"2017-03-17 20:02:48.000000000","message":"I\u0027ll work on disabling this after next week.","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"aea5d96ed2e0138e16263654050d93ffcab383bd","unresolved":false,"context_lines":[{"line_number":4340,"context_line":"    security_group_ref.rules"},{"line_number":4341,"context_line":"    security_group_ref.update(values)"},{"line_number":4342,"context_line":"    try:"},{"line_number":4343,"context_line":"        if CONF.database.mysql_enable_ndb:"},{"line_number":4344,"context_line":"            security_group_ref.save(context.session)"},{"line_number":4345,"context_line":"        else:"},{"line_number":4346,"context_line":"            with get_context_manager(context).writer.savepoint.using(context):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_ef574cc8","line":4343,"updated":"2017-03-16 19:58:03.000000000","message":"needs to be abstracted into enginefacade","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"aea5d96ed2e0138e16263654050d93ffcab383bd","unresolved":false,"context_lines":[{"line_number":5287,"context_line":"            for spec_ref in spec_refs:"},{"line_number":5288,"context_line":"                key \u003d spec_ref[\"key\"]"},{"line_number":5289,"context_line":"                existing_keys.add(key)"},{"line_number":5290,"context_line":"                if CONF.database.mysql_enable_ndb:"},{"line_number":5291,"context_line":"                    spec_ref.update({\"value\": specs[key]})"},{"line_number":5292,"context_line":"                else:"},{"line_number":5293,"context_line":"                    with get_context_manager(context).writer.savepoint.using("}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_0f5d88e9","line":5290,"updated":"2017-03-16 19:58:03.000000000","message":"etc","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"}],"nova/db/sqlalchemy/migrate_repo/versions/216_havana.py":[{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"aea5d96ed2e0138e16263654050d93ffcab383bd","unresolved":false,"context_lines":[{"line_number":1416,"context_line":"        # mysql-specific index by leftmost 100 chars.  (mysql gets angry if the"},{"line_number":1417,"context_line":"        # index key length is too long.)"},{"line_number":1418,"context_line":"        # This index is too long for MySQL Cluster (NDB)."},{"line_number":1419,"context_line":"        if CONF.database.mysql_enable_ndb is False:"},{"line_number":1420,"context_line":"            sql \u003d (\"create index migrations_by_host_nodes_and_status_idx ON \""},{"line_number":1421,"context_line":"                   \"migrations (deleted, source_compute(100), \""},{"line_number":1422,"context_line":"                   \"dest_compute(100), source_node(100), dest_node(100), \""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_ef0e6ce4","line":1419,"updated":"2017-03-16 19:58:03.000000000","message":"never refer to CONF, make this:\n\n    if oslo_db.sqlalchemy.ndb.ndb_enabled(migrate_engine):","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"48f9575c7b2993bc12eb59521ffc7d2c314bebe1","unresolved":false,"context_lines":[{"line_number":1416,"context_line":"        # mysql-specific index by leftmost 100 chars.  (mysql gets angry if the"},{"line_number":1417,"context_line":"        # index key length is too long.)"},{"line_number":1418,"context_line":"        # This index is too long for MySQL Cluster (NDB)."},{"line_number":1419,"context_line":"        if CONF.database.mysql_enable_ndb is False:"},{"line_number":1420,"context_line":"            sql \u003d (\"create index migrations_by_host_nodes_and_status_idx ON \""},{"line_number":1421,"context_line":"                   \"migrations (deleted, source_compute(100), \""},{"line_number":1422,"context_line":"                   \"dest_compute(100), source_node(100), dest_node(100), \""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_db35eef7","line":1419,"in_reply_to":"1a1ced50_ef0e6ce4","updated":"2017-03-16 22:53:39.000000000","message":"That\u0027s reasonable. I\u0027ll work on making this change.","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"b72f0eeaba42eef06e6fb85ba8f6d7d1ec9e3bf8","unresolved":false,"context_lines":[{"line_number":1414,"context_line":"        # mysql-specific index by leftmost 100 chars.  (mysql gets angry if the"},{"line_number":1415,"context_line":"        # index key length is too long.)"},{"line_number":1416,"context_line":"        # This index is too long for MySQL Cluster (NDB)."},{"line_number":1417,"context_line":"        if ndb.ndb_status(migrate_engine) is False:"},{"line_number":1418,"context_line":"            sql \u003d (\"create index migrations_by_host_nodes_and_status_idx ON \""},{"line_number":1419,"context_line":"                   \"migrations (deleted, source_compute(100), \""},{"line_number":1420,"context_line":"                   \"dest_compute(100), source_node(100), dest_node(100), \""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff346bd7_2f609e32","line":1417,"updated":"2017-07-22 02:25:11.000000000","message":"\"if not ndb.ndb_status(migrate_engine)\"","commit_id":"88d41d2cf73adebf08e9209117588db6981defeb"}],"nova/db/sqlalchemy/migrate_repo/versions/249_remove_duplicate_index.py":[{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"aea5d96ed2e0138e16263654050d93ffcab383bd","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    # Remove the foreign key so that the index can be removed correctly"},{"line_number":30,"context_line":"    block_device_mapping \u003d Table(\u0027block_device_mapping\u0027, meta, autoload\u003dTrue)"},{"line_number":31,"context_line":"    instances \u003d Table(\u0027instances\u0027, meta, autoload\u003dTrue)"},{"line_number":32,"context_line":"    fkey \u003d ForeignKeyConstraint(columns\u003d[block_device_mapping.c.instance_uuid],"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_ef258c5c","line":29,"updated":"2017-03-16 19:58:03.000000000","message":"\"so that the index can be removed per NDB limitations\", I don\u0027t want people who read this to be misled that it\u0027s incorrect to drop an index w/o touching FK constraints","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"48f9575c7b2993bc12eb59521ffc7d2c314bebe1","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    # Remove the foreign key so that the index can be removed correctly"},{"line_number":30,"context_line":"    block_device_mapping \u003d Table(\u0027block_device_mapping\u0027, meta, autoload\u003dTrue)"},{"line_number":31,"context_line":"    instances \u003d Table(\u0027instances\u0027, meta, autoload\u003dTrue)"},{"line_number":32,"context_line":"    fkey \u003d ForeignKeyConstraint(columns\u003d[block_device_mapping.c.instance_uuid],"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_96b6ed3b","line":29,"in_reply_to":"1a1ced50_ef258c5c","updated":"2017-03-16 22:53:39.000000000","message":"I\u0027ll remove this comment. FYI, there are plenty of other examples across services where these scripts will remove and recreate FK constraints when making these kinds of changes that pre-date any of my work here. InnoDB doesn\u0027t require it, but other MySQL engines do. Still a good practice in my opinion.","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"aea5d96ed2e0138e16263654050d93ffcab383bd","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    # Remove the foreign key so that the index can be removed correctly"},{"line_number":30,"context_line":"    block_device_mapping \u003d Table(\u0027block_device_mapping\u0027, meta, autoload\u003dTrue)"},{"line_number":31,"context_line":"    instances \u003d Table(\u0027instances\u0027, meta, autoload\u003dTrue)"},{"line_number":32,"context_line":"    fkey \u003d ForeignKeyConstraint(columns\u003d[block_device_mapping.c.instance_uuid],"},{"line_number":33,"context_line":"                                refcolumns\u003d[instances.c.uuid])"},{"line_number":34,"context_line":"    fkey.drop()"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_efb3cc08","line":32,"updated":"2017-03-16 19:58:03.000000000","message":"why create the ForeignKeyConstraint by hand here when you\u0027ve emitted all the SQL to autoload it?   do like this:\n\n    fks \u003d [const for const in instances.constraints if isinstance(const, ForeignKeyConstraint)]\n    for fk in fks:\n        fk.drop()\n\n    # ...\n\n    for fk in fks:\n        fk.create()\n\nNote also, if we were using Alembic we could automate this part.","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"48f9575c7b2993bc12eb59521ffc7d2c314bebe1","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    # Remove the foreign key so that the index can be removed correctly"},{"line_number":30,"context_line":"    block_device_mapping \u003d Table(\u0027block_device_mapping\u0027, meta, autoload\u003dTrue)"},{"line_number":31,"context_line":"    instances \u003d Table(\u0027instances\u0027, meta, autoload\u003dTrue)"},{"line_number":32,"context_line":"    fkey \u003d ForeignKeyConstraint(columns\u003d[block_device_mapping.c.instance_uuid],"},{"line_number":33,"context_line":"                                refcolumns\u003d[instances.c.uuid])"},{"line_number":34,"context_line":"    fkey.drop()"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_f65721c8","line":32,"in_reply_to":"1a1ced50_efb3cc08","updated":"2017-03-16 22:53:39.000000000","message":"I\u0027m following the same syntax and styling here used in other scripts in this directory to keep things consistent. You can look here: http://git.openstack.org/cgit/openstack/nova/tree/nova/db/sqlalchemy/migrate_repo/versions","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a10bee813091e0e24e98b672841ffdf67c6f2f2c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    # Remove the foreign key before dropping index"},{"line_number":30,"context_line":"    block_device_mapping \u003d Table(\u0027block_device_mapping\u0027, meta, autoload\u003dTrue)"},{"line_number":31,"context_line":"    instances \u003d Table(\u0027instances\u0027, meta, autoload\u003dTrue)"},{"line_number":32,"context_line":"    fkey \u003d ForeignKeyConstraint(columns\u003d[block_device_mapping.c.instance_uuid],"},{"line_number":33,"context_line":"                                refcolumns\u003d[instances.c.uuid])"},{"line_number":34,"context_line":"    fkey.drop()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    bdm \u003d Table(\u0027block_device_mapping\u0027, meta, autoload\u003dTrue)"},{"line_number":37,"context_line":"    for index in bdm.indexes:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_c886f6b9","line":34,"range":{"start_line":29,"start_character":4,"end_line":34,"end_character":15},"updated":"2017-07-18 20:17:33.000000000","message":"You can\u0027t just do stuff like this in released migrations, and it\u0027s totally not conditional on anything. If you were going to do this, it would have to be conditional on mysql as the engine and the ndb stuff you care about.","commit_id":"52eda217676b36f19b1e35328c5a55bbf3b0a473"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"b72f0eeaba42eef06e6fb85ba8f6d7d1ec9e3bf8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    for index in bdm.indexes:"},{"line_number":37,"context_line":"        if index.name \u003d\u003d INDEX_NAME:"},{"line_number":38,"context_line":"            # Drop foreign key first"},{"line_number":39,"context_line":"            if migrate_engine.name !\u003d \u0027sqlite\u0027:"},{"line_number":40,"context_line":"                fkey.drop()"},{"line_number":41,"context_line":"            # Drop index"},{"line_number":42,"context_line":"            index.drop()"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff346bd7_cf4eb2c0","line":39,"updated":"2017-07-22 02:25:11.000000000","message":"\"if ndb.ndb_status(engine)\", the drop here isn\u0027t necessary for plain MySQL, others","commit_id":"88d41d2cf73adebf08e9209117588db6981defeb"}],"nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py":[{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"aea5d96ed2e0138e16263654050d93ffcab383bd","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    # MySQL Cluster creates non-NULL records by default. We can skip"},{"line_number":100,"context_line":"    # the checks and just configure the constraint."},{"line_number":101,"context_line":"    if CONF.database.mysql_enable_ndb is False:"},{"line_number":102,"context_line":"        # Scan the database first and fail if any NULL records found."},{"line_number":103,"context_line":"        process_null_records(meta, scan\u003dTrue)"},{"line_number":104,"context_line":"        # Now run the alter statements."}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_8f73384d","line":101,"updated":"2017-03-16 19:58:03.000000000","message":"if not oslo_db.sqlalchemy.ndb.ndb_enabled(migrate_engine):","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"48f9575c7b2993bc12eb59521ffc7d2c314bebe1","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    # MySQL Cluster creates non-NULL records by default. We can skip"},{"line_number":100,"context_line":"    # the checks and just configure the constraint."},{"line_number":101,"context_line":"    if CONF.database.mysql_enable_ndb is False:"},{"line_number":102,"context_line":"        # Scan the database first and fail if any NULL records found."},{"line_number":103,"context_line":"        process_null_records(meta, scan\u003dTrue)"},{"line_number":104,"context_line":"        # Now run the alter statements."}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_36f9b9c9","line":101,"in_reply_to":"1a1ced50_8f73384d","updated":"2017-03-16 22:53:39.000000000","message":"I\u0027ll make this change.","commit_id":"0a5b7183686c078b574a2618e990266d93cb3e46"}]}
