)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"081874b7f0743285b7249a09ca40f01ecd94de45","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Explicit MySQL engine designation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"By default the CI uses MyISAM MySQL engine which doesn\u0027t support foreign"},{"line_number":10,"context_line":"key constraint. Thus we must explicitly sign MySQL engine as InnoDB at"},{"line_number":11,"context_line":"every table declares foreign keys or which is a fk target."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a961159_d00b1c8c","line":9,"updated":"2014-12-10 23:37:45.000000000","message":"CI shouldn\u0027t be what\u0027s important here. Some deployments default to use of MyISAM.","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2ec7631899260e8c21c2fbd2c0fa1772eceebb86","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Explicit MySQL engine designation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"By default the CI uses MyISAM MySQL engine which doesn\u0027t support foreign"},{"line_number":10,"context_line":"key constraint. Thus we must explicitly sign MySQL engine as InnoDB at"},{"line_number":11,"context_line":"every table declares foreign keys or which is a fk target."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a961159_50ef85e9","line":9,"in_reply_to":"3a961159_d00b1c8c","updated":"2014-12-29 16:58:55.000000000","message":"Done","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"}],"keystone/common/sql/migration_helpers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"081874b7f0743285b7249a09ca40f01ecd94de45","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            if migrate_engine.name \u003d\u003d engine_name:"},{"line_number":247,"context_line":"                f(migrate_engine)"},{"line_number":248,"context_line":"            else:"},{"line_number":249,"context_line":"                pass"},{"line_number":250,"context_line":"        return wrap"},{"line_number":251,"context_line":"    return dec"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_506c8c35","line":249,"updated":"2014-12-10 23:37:45.000000000","message":"Would be nice to have a debug statement here.","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2ec7631899260e8c21c2fbd2c0fa1772eceebb86","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            if migrate_engine.name \u003d\u003d engine_name:"},{"line_number":247,"context_line":"                f(migrate_engine)"},{"line_number":248,"context_line":"            else:"},{"line_number":249,"context_line":"                pass"},{"line_number":250,"context_line":"        return wrap"},{"line_number":251,"context_line":"    return dec"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_30e2f901","line":249,"in_reply_to":"3a961159_506c8c35","updated":"2014-12-29 16:58:55.000000000","message":"Done","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"081874b7f0743285b7249a09ca40f01ecd94de45","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    :type migrate_engine: sqlalchemy.Engine"},{"line_number":260,"context_line":"    :param mysql_engine: name of MySQL engine to filter."},{"line_number":261,"context_line":"    :type mysql_engine: String"},{"line_number":262,"context_line":"    :param tables: List of a table names to check an engine."},{"line_number":263,"context_line":"    :type tables: List"},{"line_number":264,"context_line":"    :return: list of the tables which use the given engine."},{"line_number":265,"context_line":"    :rtype: List"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_50dacce8","line":262,"updated":"2014-12-10 23:37:45.000000000","message":"change \"of a table names\" to \"of table names\"\n\nchange \"check an engine\" to \"check the engine for\"","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2ec7631899260e8c21c2fbd2c0fa1772eceebb86","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    :type migrate_engine: sqlalchemy.Engine"},{"line_number":260,"context_line":"    :param mysql_engine: name of MySQL engine to filter."},{"line_number":261,"context_line":"    :type mysql_engine: String"},{"line_number":262,"context_line":"    :param tables: List of a table names to check an engine."},{"line_number":263,"context_line":"    :type tables: List"},{"line_number":264,"context_line":"    :return: list of the tables which use the given engine."},{"line_number":265,"context_line":"    :rtype: List"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_909f2d65","line":262,"in_reply_to":"3a961159_50dacce8","updated":"2014-12-29 16:58:55.000000000","message":"Done","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"081874b7f0743285b7249a09ca40f01ecd94de45","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                  \"`TABLE_NAME` IN %(tables)s AND\""},{"line_number":272,"context_line":"                  \"`ENGINE`\u003d\u0027%(engine)s\u0027;\")"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    updated \u003d []"},{"line_number":275,"context_line":"    with migrate_engine.begin() as conn:"},{"line_number":276,"context_line":"        check_req \u003d check_tmpl % {\u0027database\u0027: migrate_engine.url.database,"},{"line_number":277,"context_line":"                                  \u0027tables\u0027: six.text_type(tables),"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_d0c31ceb","line":274,"updated":"2014-12-10 23:37:45.000000000","message":"why is this called updated? suggest change the name to \"table_names\" or something.","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2ec7631899260e8c21c2fbd2c0fa1772eceebb86","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                  \"`TABLE_NAME` IN %(tables)s AND\""},{"line_number":272,"context_line":"                  \"`ENGINE`\u003d\u0027%(engine)s\u0027;\")"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    updated \u003d []"},{"line_number":275,"context_line":"    with migrate_engine.begin() as conn:"},{"line_number":276,"context_line":"        check_req \u003d check_tmpl % {\u0027database\u0027: migrate_engine.url.database,"},{"line_number":277,"context_line":"                                  \u0027tables\u0027: six.text_type(tables),"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_302119fd","line":274,"in_reply_to":"3a961159_d0c31ceb","updated":"2014-12-29 16:58:55.000000000","message":"Done","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"081874b7f0743285b7249a09ca40f01ecd94de45","unresolved":false,"context_lines":[{"line_number":283,"context_line":"    return updated"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"def change_mysql_engine(migrate_engine, to_engine, tables):"},{"line_number":287,"context_line":"    \"\"\"Change table sdefault mysql engine."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    :param migrate_engine: Sqlalchemy engine instance used by a migration"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_707fc8ab","line":286,"updated":"2014-12-10 23:37:45.000000000","message":"I\u0027d prefer it if mysql-specific functions were in a mysql package.","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"081874b7f0743285b7249a09ca40f01ecd94de45","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"def change_mysql_engine(migrate_engine, to_engine, tables):"},{"line_number":287,"context_line":"    \"\"\"Change table sdefault mysql engine."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    :param migrate_engine: Sqlalchemy engine instance used by a migration"},{"line_number":290,"context_line":"                           script."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_d06a3ced","line":287,"updated":"2014-12-10 23:37:45.000000000","message":"remove \"sdefault\"","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2ec7631899260e8c21c2fbd2c0fa1772eceebb86","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"def change_mysql_engine(migrate_engine, to_engine, tables):"},{"line_number":287,"context_line":"    \"\"\"Change table sdefault mysql engine."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    :param migrate_engine: Sqlalchemy engine instance used by a migration"},{"line_number":290,"context_line":"                           script."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_90772d08","line":287,"in_reply_to":"3a961159_d06a3ced","updated":"2014-12-29 16:58:55.000000000","message":"Done","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"081874b7f0743285b7249a09ca40f01ecd94de45","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    :param migrate_engine: Sqlalchemy engine instance used by a migration"},{"line_number":290,"context_line":"                           script."},{"line_number":291,"context_line":"    :type migrate_engine: sqlalchemy.Engine"},{"line_number":292,"context_line":"    :param to_engine: name of a desired MySQL engine."},{"line_number":293,"context_line":"    :type to_engine: String"},{"line_number":294,"context_line":"    :param tables: List of a table names to change an engine."},{"line_number":295,"context_line":"    :type tables: List"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_10484486","line":292,"updated":"2014-12-10 23:37:45.000000000","message":"the docs should say what the allowed engines are.","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2ec7631899260e8c21c2fbd2c0fa1772eceebb86","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    :param migrate_engine: Sqlalchemy engine instance used by a migration"},{"line_number":290,"context_line":"                           script."},{"line_number":291,"context_line":"    :type migrate_engine: sqlalchemy.Engine"},{"line_number":292,"context_line":"    :param to_engine: name of a desired MySQL engine."},{"line_number":293,"context_line":"    :type to_engine: String"},{"line_number":294,"context_line":"    :param tables: List of a table names to change an engine."},{"line_number":295,"context_line":"    :type tables: List"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_f0d4f1be","line":292,"in_reply_to":"3a961159_10484486","updated":"2014-12-29 16:58:55.000000000","message":"Done","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"081874b7f0743285b7249a09ca40f01ecd94de45","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    \"\"\""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    if to_engine \u003d\u003d \u0027MyISAM\u0027:"},{"line_number":301,"context_line":"        from_engine \u003d \u0027InnoDB\u0027"},{"line_number":302,"context_line":"    elif to_engine \u003d\u003d \u0027InnoDB\u0027:"},{"line_number":303,"context_line":"        from_engine \u003d \u0027MyISAM\u0027"},{"line_number":304,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_7056e82b","line":301,"updated":"2014-12-10 23:37:45.000000000","message":"Seems like rather than query for the specific from_engine it would be better to just find all tables that aren\u0027t the correct engine and change them to the correct one.","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2ec7631899260e8c21c2fbd2c0fa1772eceebb86","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    \"\"\""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    if to_engine \u003d\u003d \u0027MyISAM\u0027:"},{"line_number":301,"context_line":"        from_engine \u003d \u0027InnoDB\u0027"},{"line_number":302,"context_line":"    elif to_engine \u003d\u003d \u0027InnoDB\u0027:"},{"line_number":303,"context_line":"        from_engine \u003d \u0027MyISAM\u0027"},{"line_number":304,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_2b70ce72","line":301,"in_reply_to":"3a961159_7056e82b","updated":"2014-12-29 16:58:55.000000000","message":"Done","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"081874b7f0743285b7249a09ca40f01ecd94de45","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    elif to_engine \u003d\u003d \u0027InnoDB\u0027:"},{"line_number":303,"context_line":"        from_engine \u003d \u0027MyISAM\u0027"},{"line_number":304,"context_line":"    else:"},{"line_number":305,"context_line":"        raise sql.exc.DatabaseError(\u0027Engine %s is not supported.\u0027 % to_engine)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    updated \u003d _get_tables_by_engine(migrate_engine, from_engine, tables)"},{"line_number":308,"context_line":"    alter_tmpl \u003d \"ALTER TABLE `%s` ENGINE\u003d\u0027%s\u0027;\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_3079c0c8","line":305,"updated":"2014-12-10 23:37:45.000000000","message":"I don\u0027t think Keystone should be raising database errors.","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2ec7631899260e8c21c2fbd2c0fa1772eceebb86","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    elif to_engine \u003d\u003d \u0027InnoDB\u0027:"},{"line_number":303,"context_line":"        from_engine \u003d \u0027MyISAM\u0027"},{"line_number":304,"context_line":"    else:"},{"line_number":305,"context_line":"        raise sql.exc.DatabaseError(\u0027Engine %s is not supported.\u0027 % to_engine)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    updated \u003d _get_tables_by_engine(migrate_engine, from_engine, tables)"},{"line_number":308,"context_line":"    alter_tmpl \u003d \"ALTER TABLE `%s` ENGINE\u003d\u0027%s\u0027;\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_4b6d1a99","line":305,"in_reply_to":"3a961159_3079c0c8","updated":"2014-12-29 16:58:55.000000000","message":"Done","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"081874b7f0743285b7249a09ca40f01ecd94de45","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    updated \u003d _get_tables_by_engine(migrate_engine, from_engine, tables)"},{"line_number":308,"context_line":"    alter_tmpl \u003d \"ALTER TABLE `%s` ENGINE\u003d\u0027%s\u0027;\""},{"line_number":309,"context_line":"    alter_query \u003d \u0027 \u0027.join([alter_tmpl % (i, to_engine) for i in updated])"},{"line_number":310,"context_line":"    migrate_engine.execute(alter_query)"},{"line_number":311,"context_line":"    return updated"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_103f64d7","line":309,"updated":"2014-12-10 23:37:45.000000000","message":"is there a limit to the size of a statement?","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2ec7631899260e8c21c2fbd2c0fa1772eceebb86","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    updated \u003d _get_tables_by_engine(migrate_engine, from_engine, tables)"},{"line_number":308,"context_line":"    alter_tmpl \u003d \"ALTER TABLE `%s` ENGINE\u003d\u0027%s\u0027;\""},{"line_number":309,"context_line":"    alter_query \u003d \u0027 \u0027.join([alter_tmpl % (i, to_engine) for i in updated])"},{"line_number":310,"context_line":"    migrate_engine.execute(alter_query)"},{"line_number":311,"context_line":"    return updated"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_0be152fe","line":309,"in_reply_to":"3a961159_103f64d7","updated":"2014-12-29 16:58:55.000000000","message":"Done","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e5a9443219e42ad80860c202c15218bb58ba775a","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            else:"},{"line_number":251,"context_line":"                msg \u003d (\"The actual engine is: %s. \""},{"line_number":252,"context_line":"                       \"The only allowed engine is: %s\")"},{"line_number":253,"context_line":"                LOG.debug(msg % (migrate_engine.name, engine_name))"},{"line_number":254,"context_line":"        return wrap"},{"line_number":255,"context_line":"    return dec"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_442b3633","line":253,"updated":"2014-12-30 15:12:59.000000000","message":"change % to ,","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4b3d2df1eb82ccfe6ffa173ca981c5c49542d7bc","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            else:"},{"line_number":251,"context_line":"                msg \u003d (\"The actual engine is: %s. \""},{"line_number":252,"context_line":"                       \"The only allowed engine is: %s\")"},{"line_number":253,"context_line":"                LOG.debug(msg % (migrate_engine.name, engine_name))"},{"line_number":254,"context_line":"        return wrap"},{"line_number":255,"context_line":"    return dec"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_bf8e9130","line":253,"in_reply_to":"3a961159_442b3633","updated":"2014-12-31 17:41:33.000000000","message":"Done","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e5a9443219e42ad80860c202c15218bb58ba775a","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    check_tmpl \u003d (\"SELECT `TABLE_NAME` FROM \""},{"line_number":273,"context_line":"                  \"`information_schema`.`TABLES` WHERE \""},{"line_number":274,"context_line":"                  \"`TABLE_SCHEMA`\u003d\u0027%(database)s\u0027 AND \""},{"line_number":275,"context_line":"                  \"`TABLE_NAME` IN %(tables)s AND\""},{"line_number":276,"context_line":"                  \"`ENGINE`\u003d\u0027%(engine)s\u0027;\")"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    with migrate_engine.begin() as conn:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_24be2aaf","line":275,"updated":"2014-12-30 15:12:59.000000000","message":"There\u0027s a space missing between AND and `ENGINE`... was this tested?","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4b3d2df1eb82ccfe6ffa173ca981c5c49542d7bc","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    check_tmpl \u003d (\"SELECT `TABLE_NAME` FROM \""},{"line_number":273,"context_line":"                  \"`information_schema`.`TABLES` WHERE \""},{"line_number":274,"context_line":"                  \"`TABLE_SCHEMA`\u003d\u0027%(database)s\u0027 AND \""},{"line_number":275,"context_line":"                  \"`TABLE_NAME` IN %(tables)s AND\""},{"line_number":276,"context_line":"                  \"`ENGINE`\u003d\u0027%(engine)s\u0027;\")"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    with migrate_engine.begin() as conn:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_5f25ad5a","line":275,"in_reply_to":"3a961159_24be2aaf","updated":"2014-12-31 17:41:33.000000000","message":"Hmmm... yes it used directly in migrations. The gates will fail if this query is broken. So this is strange to me too.","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e5a9443219e42ad80860c202c15218bb58ba775a","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    updated \u003d _get_tables_by_engine(migrate_engine, \u0027MyISAM\u0027, tables)"},{"line_number":300,"context_line":"    alter_tmpl \u003d \"ALTER TABLE `%s` ENGINE\u003d\u0027InnoDB\u0027;\""},{"line_number":301,"context_line":"    for query in [alter_tmpl % i for i in updated]:"},{"line_number":302,"context_line":"        migrate_engine.execute(query)"},{"line_number":303,"context_line":"    return updated"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_24438ab0","line":302,"updated":"2014-12-30 15:12:59.000000000","message":"keystone-manage should log a warning when it migrates a table so that we\u0027ll know about it in case something goes wrong.","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4b3d2df1eb82ccfe6ffa173ca981c5c49542d7bc","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    updated \u003d _get_tables_by_engine(migrate_engine, \u0027MyISAM\u0027, tables)"},{"line_number":300,"context_line":"    alter_tmpl \u003d \"ALTER TABLE `%s` ENGINE\u003d\u0027InnoDB\u0027;\""},{"line_number":301,"context_line":"    for query in [alter_tmpl % i for i in updated]:"},{"line_number":302,"context_line":"        migrate_engine.execute(query)"},{"line_number":303,"context_line":"    return updated"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_bf9cd15c","line":302,"in_reply_to":"3a961159_24438ab0","updated":"2014-12-31 17:41:33.000000000","message":"Done","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"bf5c11b4ad078c798c0bd183c10b32be17582bb7","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        sys.exit(1)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def only_with_engine(engine_name):"},{"line_number":243,"context_line":"    \"\"\"Run migration only with the given database engine (backend).\"\"\""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def dec(f):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_3ea28a4b","line":242,"updated":"2015-01-05 01:38:50.000000000","message":"there should be a unit test for this.","commit_id":"2303dfe185d247a0c628e8938cd025a0c6699a3a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"bf5c11b4ad078c798c0bd183c10b32be17582bb7","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    updated \u003d _get_tables_by_engine(migrate_engine, \u0027MyISAM\u0027, tables)"},{"line_number":300,"context_line":"    alter_tmpl \u003d \"ALTER TABLE `%s` ENGINE\u003d\u0027InnoDB\u0027;\""},{"line_number":301,"context_line":"    for query in [alter_tmpl % i for i in updated]:"},{"line_number":302,"context_line":"        LOG.debug(\"The table engine is changed: %s\", query)"},{"line_number":303,"context_line":"        migrate_engine.execute(query)"},{"line_number":304,"context_line":"    return updated"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_1ed14ecd","line":302,"updated":"2015-01-05 01:38:50.000000000","message":"This should be a warning.","commit_id":"2303dfe185d247a0c628e8938cd025a0c6699a3a"}],"keystone/contrib/endpoint_filter/migrate_repo/versions/003_fix_mysql_engine.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e7ec959cbb6dec827061c1dc0d112234d3d84ac4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        sql_tmpl \u003d \u0027ALTER TABLE %s ENGINE\u003dInnoDB;\u0027"},{"line_number":28,"context_line":"        table_names \u003d \u0027endpoint_group\u0027, \u0027project_endpoint_group\u0027"},{"line_number":29,"context_line":"        sql_query \u003d \u0027 \u0027.join([sql_tmpl % i for i in table_names])"},{"line_number":30,"context_line":"        migrate_engine.execute(sql_query)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        project_endpoint_group \u003d sql.Table(\u0027project_endpoint_group\u0027,"},{"line_number":33,"context_line":"                                           meta, autoload\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_0ba31501","line":30,"updated":"2014-12-05 22:32:29.000000000","message":"if the table is already innodb then no need to do this, so should check first if it\u0027s already innodb.","commit_id":"8fdcfaf015bbb8dc99dff35cb33f7f33f76d406f"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"a68f15c1ff89ed67ac79f8b26cc612c3dfb8c8b3","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    if migrate_engine.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":47,"context_line":"        sql_tmpl \u003d \u0027ALTER TABLE %s ENGINE\u003dMyISAM;\u0027"},{"line_number":48,"context_line":"        table_names \u003d \u0027endpoint_group\u0027, \u0027project_endpoint_group\u0027"},{"line_number":49,"context_line":"        sql_query \u003d \u0027 \u0027.join([sql_tmpl % i for i in table_names])"},{"line_number":50,"context_line":"        migrate_engine.execute(sql_query)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_3ac10a30","line":47,"updated":"2014-12-05 17:02:33.000000000","message":"What if it was not MyISAM to begin with?","commit_id":"8fdcfaf015bbb8dc99dff35cb33f7f33f76d406f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"44727f2b791b5790812f33de0a6a6a424290f186","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    if migrate_engine.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":47,"context_line":"        sql_tmpl \u003d \u0027ALTER TABLE %s ENGINE\u003dMyISAM;\u0027"},{"line_number":48,"context_line":"        table_names \u003d \u0027endpoint_group\u0027, \u0027project_endpoint_group\u0027"},{"line_number":49,"context_line":"        sql_query \u003d \u0027 \u0027.join([sql_tmpl % i for i in table_names])"},{"line_number":50,"context_line":"        migrate_engine.execute(sql_query)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_7d4aac5c","line":47,"in_reply_to":"5a890539_3ac10a30","updated":"2014-12-05 17:14:57.000000000","message":"++ is there any reason to offer a downgrade at all?","commit_id":"8fdcfaf015bbb8dc99dff35cb33f7f33f76d406f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e7ec959cbb6dec827061c1dc0d112234d3d84ac4","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    if migrate_engine.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":47,"context_line":"        sql_tmpl \u003d \u0027ALTER TABLE %s ENGINE\u003dMyISAM;\u0027"},{"line_number":48,"context_line":"        table_names \u003d \u0027endpoint_group\u0027, \u0027project_endpoint_group\u0027"},{"line_number":49,"context_line":"        sql_query \u003d \u0027 \u0027.join([sql_tmpl % i for i in table_names])"},{"line_number":50,"context_line":"        migrate_engine.execute(sql_query)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_6b3bb9c8","line":47,"in_reply_to":"5a890539_7d4aac5c","updated":"2014-12-05 22:32:29.000000000","message":"in the earlier fix for this in core tables, the downgrade didn\u0027t revert the changes, see http://git.openstack.org/cgit/openstack/keystone/tree/keystone/common/sql/migrate_repo/versions/027_set_engine_mysql_innodb.py?h\u003dstable/icehouse","commit_id":"8fdcfaf015bbb8dc99dff35cb33f7f33f76d406f"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"f233bd49e29376150bc8d8e3e031825ad4c52b2a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":28,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    global _updated"},{"line_number":31,"context_line":"    _updated \u003d migration_helpers.change_mysql_engine("},{"line_number":32,"context_line":"        migrate_engine, \u0027InnoDB\u0027, _TABLE_NAMES)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_e5099896","line":30,"updated":"2014-12-08 18:40:05.000000000","message":"This ain\u0027t gonna workl.\n\nThe migrations are run from different processes.\n\nJust drop the change of the table type on downgrade.  We can take that risk.","commit_id":"71f7edb055d783be8ce2467eec31cc4b216b653f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"081874b7f0743285b7249a09ca40f01ecd94de45","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":50,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    if \u0027project_endpoint_group\u0027 in _updated:"},{"line_number":53,"context_line":"        project_endpoint_group \u003d sql.Table(\u0027project_endpoint_group\u0027,"},{"line_number":54,"context_line":"                                           meta, autoload\u003dTrue)"},{"line_number":55,"context_line":"        fk_col \u003d \u0027endpoint_group_id\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_70042818","line":52,"updated":"2014-12-10 23:37:45.000000000","message":"Using _updated here isn\u0027t going to work since downgrade() isn\u0027t called in the same process as upgrade().","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2ec7631899260e8c21c2fbd2c0fa1772eceebb86","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":50,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    if \u0027project_endpoint_group\u0027 in _updated:"},{"line_number":53,"context_line":"        project_endpoint_group \u003d sql.Table(\u0027project_endpoint_group\u0027,"},{"line_number":54,"context_line":"                                           meta, autoload\u003dTrue)"},{"line_number":55,"context_line":"        fk_col \u003d \u0027endpoint_group_id\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_cb158a9c","line":52,"in_reply_to":"3a961159_70042818","updated":"2014-12-29 16:58:55.000000000","message":"Done","commit_id":"39a0e435f6df4489868d42dbb346c8e3505b0370"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e5a9443219e42ad80860c202c15218bb58ba775a","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":7,"id":"3a961159_441176ae","line":1,"updated":"2014-12-30 15:12:59.000000000","message":"it\u0027s not 2013.","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4b3d2df1eb82ccfe6ffa173ca981c5c49542d7bc","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":7,"id":"3a961159_1f2a45e7","line":1,"in_reply_to":"3a961159_441176ae","updated":"2014-12-31 17:41:33.000000000","message":"Done","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e5a9443219e42ad80860c202c15218bb58ba775a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        constraint \u003d [{\u0027table\u0027: project_endpoint_group,"},{"line_number":57,"context_line":"                       \u0027fk_column\u0027: fk_col,"},{"line_number":58,"context_line":"                       \u0027ref_column\u0027: endpoint_group.c.id}]"},{"line_number":59,"context_line":"        migration_helpers.remove_constraints(constraint)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_2471ca0c","line":59,"updated":"2014-12-30 15:12:59.000000000","message":"The downgrade shouldn\u0027t be removing constraints... the only databases that wouldn\u0027t have the constraints are the ones where myisam was the default.","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4b3d2df1eb82ccfe6ffa173ca981c5c49542d7bc","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        constraint \u003d [{\u0027table\u0027: project_endpoint_group,"},{"line_number":57,"context_line":"                       \u0027fk_column\u0027: fk_col,"},{"line_number":58,"context_line":"                       \u0027ref_column\u0027: endpoint_group.c.id}]"},{"line_number":59,"context_line":"        migration_helpers.remove_constraints(constraint)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ffd499ea","line":59,"in_reply_to":"3a961159_2471ca0c","updated":"2014-12-31 17:41:33.000000000","message":"Done","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"bf5c11b4ad078c798c0bd183c10b32be17582bb7","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    migration_helpers.change_mysql_engine(migrate_engine, _TABLE_NAMES)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    project_endpoint_group \u003d sql.Table(\u0027project_endpoint_group\u0027,"},{"line_number":31,"context_line":"                                       meta, autoload\u003dTrue)"},{"line_number":32,"context_line":"    fk_col \u003d \u0027endpoint_group_id\u0027"},{"line_number":33,"context_line":"    fk_cols \u003d (i.parent.name for i in project_endpoint_group.foreign_keys)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_9efb7e46","line":30,"updated":"2015-01-05 01:38:50.000000000","message":"seems like adding the foreign keys should only be done if \u0027project_endpoint_group\u0027 was in the list returned by change_mysql_engine(), and if the table is in the group then the fk needs to be added (no need to check first).","commit_id":"2303dfe185d247a0c628e8938cd025a0c6699a3a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"bf5c11b4ad078c798c0bd183c10b32be17582bb7","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def downgrade(migrate_engine):"},{"line_number":44,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_3ed44abc","line":44,"updated":"2015-01-05 01:38:50.000000000","message":"There should be a comment saying why there\u0027s nothing to do here.","commit_id":"2303dfe185d247a0c628e8938cd025a0c6699a3a"}],"keystone/contrib/federation/migrate_repo/versions/004_fix_mysql_engine.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e5a9443219e42ad80860c202c15218bb58ba775a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        constraint \u003d [{\u0027table\u0027: federation_protocol,"},{"line_number":57,"context_line":"                       \u0027fk_column\u0027: fk_col,"},{"line_number":58,"context_line":"                       \u0027ref_column\u0027: identity_provider.c.id}]"},{"line_number":59,"context_line":"        migration_helpers.add_constraints(constraint)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_84599e90","line":59,"updated":"2014-12-30 15:12:59.000000000","message":"The downgrade shouldn\u0027t be removing or adding (was this tested?) constraints... the only databases that wouldn\u0027t have the constraints are the ones where myisam was the default.","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4b3d2df1eb82ccfe6ffa173ca981c5c49542d7bc","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        constraint \u003d [{\u0027table\u0027: federation_protocol,"},{"line_number":57,"context_line":"                       \u0027fk_column\u0027: fk_col,"},{"line_number":58,"context_line":"                       \u0027ref_column\u0027: identity_provider.c.id}]"},{"line_number":59,"context_line":"        migration_helpers.add_constraints(constraint)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ffebb9a1","line":59,"in_reply_to":"3a961159_84599e90","updated":"2014-12-31 17:41:33.000000000","message":"Done","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"bf5c11b4ad078c798c0bd183c10b32be17582bb7","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    migration_helpers.change_mysql_engine(migrate_engine, _TABLE_NAMES)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    federation_protocol \u003d sql.Table(\u0027federation_protocol\u0027, meta, autoload\u003dTrue)"},{"line_number":31,"context_line":"    fk_col \u003d \u0027idp_id\u0027"},{"line_number":32,"context_line":"    fk_cols \u003d (i.parent.name for i in federation_protocol.foreign_keys)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_de9426ea","line":30,"updated":"2015-01-05 01:38:50.000000000","message":"similar comment here, if \u0027federation_protocol\u0027 is in the returned list then add the fks, otherwise nothing to do.","commit_id":"2303dfe185d247a0c628e8938cd025a0c6699a3a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"bf5c11b4ad078c798c0bd183c10b32be17582bb7","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def downgrade(migrate_engine):"},{"line_number":43,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_5edaf6e9","line":43,"updated":"2015-01-05 01:38:50.000000000","message":"There should be a comment saying why there\u0027s nothing to do in this case.","commit_id":"2303dfe185d247a0c628e8938cd025a0c6699a3a"}],"keystone/contrib/oauth1/migrate_repo/versions/006_fix_mysql_engine.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e5a9443219e42ad80860c202c15218bb58ba775a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                                \u0027fk_column\u0027: \u0027consumer_id\u0027,"},{"line_number":63,"context_line":"                                \u0027ref_column\u0027: consumer.c.id})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    migration_helpers.remove_constraints(constraints)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_a45cda7e","line":65,"updated":"2014-12-30 15:12:59.000000000","message":"The downgrade shouldn\u0027t be removing constraints... the only databases that wouldn\u0027t have the constraints are the ones where myisam was the default.","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4b3d2df1eb82ccfe6ffa173ca981c5c49542d7bc","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                                \u0027fk_column\u0027: \u0027consumer_id\u0027,"},{"line_number":63,"context_line":"                                \u0027ref_column\u0027: consumer.c.id})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    migration_helpers.remove_constraints(constraints)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_dff0bd93","line":65,"in_reply_to":"3a961159_a45cda7e","updated":"2014-12-31 17:41:33.000000000","message":"Done","commit_id":"50b83b35b22406ae1a974bbfe0a935b92e626697"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"bf5c11b4ad078c798c0bd183c10b32be17582bb7","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def downgrade(migrate_engine):"},{"line_number":46,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_7ed5f2b5","line":46,"updated":"2015-01-05 01:38:50.000000000","message":"Add a comment why nothing to do.","commit_id":"2303dfe185d247a0c628e8938cd025a0c6699a3a"}]}
