)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"245990fc23fa36ebe931d0ce638df164b451f8cc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Move redelegated_trust_id out of extras"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently new created trust store the redelegated_trust_id attribute in"},{"line_number":10,"context_line":"extas. This patch adds a migrtion the moves the attribte out of extras"},{"line_number":11,"context_line":"and defines it on trust schema."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5a5ae5dd_19005265","line":9,"updated":"2016-02-08 16:30:15.000000000","message":"stores","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b81e1153b3d78e4eef1d1f2e6947fd72d2de0dd3","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Move redelegated_trust_id out of extras"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently new created trust store the redelegated_trust_id attribute in"},{"line_number":10,"context_line":"extas. This patch adds a migrtion the moves the attribte out of extras"},{"line_number":11,"context_line":"and defines it on trust schema."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a57f1b5_583a2dcf","line":9,"in_reply_to":"5a5ae5dd_19005265","updated":"2016-02-09 18:29:10.000000000","message":"Done","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"245990fc23fa36ebe931d0ce638df164b451f8cc","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Move redelegated_trust_id out of extras"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently new created trust store the redelegated_trust_id attribute in"},{"line_number":10,"context_line":"extas. This patch adds a migrtion the moves the attribte out of extras"},{"line_number":11,"context_line":"and defines it on trust schema."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If496152e40d2213a03faad5645667220fddfcf62"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5a5ae5dd_79f14694","line":10,"updated":"2016-02-08 16:30:15.000000000","message":"extras / migration / attribute","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b81e1153b3d78e4eef1d1f2e6947fd72d2de0dd3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Move redelegated_trust_id out of extras"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently new created trust store the redelegated_trust_id attribute in"},{"line_number":10,"context_line":"extas. This patch adds a migrtion the moves the attribte out of extras"},{"line_number":11,"context_line":"and defines it on trust schema."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If496152e40d2213a03faad5645667220fddfcf62"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a57f1b5_7837e9e3","line":10,"in_reply_to":"5a5ae5dd_79f14694","updated":"2016-02-09 18:29:10.000000000","message":"Done","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"245990fc23fa36ebe931d0ce638df164b451f8cc","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently new created trust store the redelegated_trust_id attribute in"},{"line_number":10,"context_line":"extas. This patch adds a migrtion the moves the attribte out of extras"},{"line_number":11,"context_line":"and defines it on trust schema."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If496152e40d2213a03faad5645667220fddfcf62"},{"line_number":14,"context_line":"Partial-Bug: 1539766"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5a5ae5dd_d93dda2b","line":11,"updated":"2016-02-08 16:30:15.000000000","message":"s/on/on the/","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b81e1153b3d78e4eef1d1f2e6947fd72d2de0dd3","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently new created trust store the redelegated_trust_id attribute in"},{"line_number":10,"context_line":"extas. This patch adds a migrtion the moves the attribte out of extras"},{"line_number":11,"context_line":"and defines it on trust schema."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If496152e40d2213a03faad5645667220fddfcf62"},{"line_number":14,"context_line":"Partial-Bug: 1539766"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a57f1b5_1834b5dc","line":11,"in_reply_to":"5a5ae5dd_d93dda2b","updated":"2016-02-09 18:29:10.000000000","message":"Done","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6bffacfc97bbdf39b9957c985c9637427eb05be9","unresolved":false,"context_lines":[{"line_number":11,"context_line":"and defines it on the trust schema."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If496152e40d2213a03faad5645667220fddfcf62"},{"line_number":14,"context_line":"Partial-Bug: 1539766"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7a77a97e_1d877410","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":20},"updated":"2016-11-14 21:56:11.000000000","message":"this bug is released, mark this as \"Related-Bug\" or open a new one","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"58f7d22669129538efd65afabf956039d00c036d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"and defines it on the trust schema."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If496152e40d2213a03faad5645667220fddfcf62"},{"line_number":14,"context_line":"Partial-Bug: 1539766"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5a74a57a_4ae6b1e8","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":20},"in_reply_to":"7a77a97e_1d877410","updated":"2016-11-28 21:59:10.000000000","message":"Done. For now I just made this a related bug.","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"bfd53f733d9c0f90f1fd04ddf05fad9dbb24d1e5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     David Stanek \u003cdstanek@dstanek.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-11-28 21:27:48 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Move redelegated_trust_id out of extras"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently new created trust stores the redelegated_trust_id attribute in"},{"line_number":10,"context_line":"extras. This patch adds a migration the moves the attribute out of extras"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5a74a57a_c4a448bb","line":7,"updated":"2016-11-29 17:16:53.000000000","message":"Add redelegation_count to this review as demonstrated in https://review.openstack.org/#/c/172090","commit_id":"24d1adb324dd8dec9c194dbacd4b7572b98b9aee"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"47faef3e03b41ac5e15ebc556573b1f9ca92bf34","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     David Stanek \u003cdstanek@dstanek.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-11-28 21:27:48 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Move redelegated_trust_id out of extras"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently new created trust stores the redelegated_trust_id attribute in"},{"line_number":10,"context_line":"extras. This patch adds a migration the moves the attribute out of extras"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5a74a57a_49a3e34f","line":7,"in_reply_to":"5a74a57a_c4a448bb","updated":"2016-11-29 22:57:57.000000000","message":"It\u0027d be nice to have less migrations to clean all this up.. ++","commit_id":"24d1adb324dd8dec9c194dbacd4b7572b98b9aee"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4c2cee69ac938ed220e8ce2509b065d7184a87e7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Co-Authored-By: David Stanek \u003cdstanek@dstanek.com\u003e"},{"line_number":15,"context_line":"Co-Authored-By: Alexander Makarov \u003camakarov@mirantis.com\u003e"},{"line_number":16,"context_line":"Change-Id: If496152e40d2213a03faad5645667220fddfcf62"},{"line_number":17,"context_line":"Related-Bug: 1539766"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba5201f7_d1fa9042","line":17,"updated":"2017-01-05 19:19:37.000000000","message":"not sure how this refactoring relates to that bug","commit_id":"2cd86483cb800ebc7fbd6f0954ba09b9d69bf9ae"}],"keystone/common/sql/contract_repo/versions/011_extract_redelegation_data_from_extras.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4c2cee69ac938ed220e8ce2509b065d7184a87e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ba5201f7_d1a8d022","updated":"2017-01-05 19:19:37.000000000","message":"these should be updated to 012","commit_id":"2cd86483cb800ebc7fbd6f0954ba09b9d69bf9ae"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1d5eefed32e3851322584fe2a5760b8c4ac60cf8","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# A null initial migration to open this repo. Do not re-use replace this with"},{"line_number":14,"context_line":"# a real migration, add additional ones in subsequent version scripts."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"def upgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_32eeb2ec","line":14,"range":{"start_line":13,"start_character":0,"end_line":14,"end_character":70},"updated":"2017-01-05 22:01:24.000000000","message":"remove this comment, it\u0027s incorrect","commit_id":"2cd86483cb800ebc7fbd6f0954ba09b9d69bf9ae"}],"keystone/common/sql/contract_repo/versions/011_move_redelegated_trust_id.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"bfd53f733d9c0f90f1fd04ddf05fad9dbb24d1e5","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# A null initial migration to open this repo. Do not re-use replace this with"},{"line_number":14,"context_line":"# a real migration, add additional ones in subsequent version scripts."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_e43f8485","line":13,"updated":"2016-11-29 17:16:53.000000000","message":"grrrrr.... remove this.","commit_id":"24d1adb324dd8dec9c194dbacd4b7572b98b9aee"}],"keystone/common/sql/data_migration_repo/versions/011_extract_redelegation_data_from_extras.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4c2cee69ac938ed220e8ce2509b065d7184a87e7","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    # Loop through all the trusts and move the redelegeated trust id out of"},{"line_number":25,"context_line":"    # extras."},{"line_number":26,"context_line":"    for trust in trust_list:"},{"line_number":27,"context_line":"        if trust.extra is not None and trust.extra !\u003d \u0027{}\u0027:"},{"line_number":28,"context_line":"            extra_dict \u003d jsonutils.loads(trust.extra)"},{"line_number":29,"context_line":"        else:"},{"line_number":30,"context_line":"            extra_dict \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_9179e8ca","line":27,"range":{"start_line":27,"start_character":39,"end_line":27,"end_character":58},"updated":"2017-01-05 19:19:37.000000000","message":"this could be removed","commit_id":"2cd86483cb800ebc7fbd6f0954ba09b9d69bf9ae"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4c2cee69ac938ed220e8ce2509b065d7184a87e7","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        new_values \u003d {}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        if \u0027redelegated_trust_id\u0027 in extra_dict:"},{"line_number":35,"context_line":"            redelegated_trust_id \u003d extra_dict.pop(\u0027redelegated_trust_id\u0027)"},{"line_number":36,"context_line":"            new_values[\u0027redelegated_trust_id\u0027] \u003d redelegated_trust_id"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        if \u0027redelegation_count\u0027 in extra_dict:"},{"line_number":39,"context_line":"            redelegation_count \u003d extra_dict.pop(\u0027redelegation_count\u0027)"},{"line_number":40,"context_line":"            new_values[\u0027redelegation_count\u0027] \u003d redelegation_count"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        if new_values:"},{"line_number":43,"context_line":"            new_values[\u0027extra\u0027] \u003d jsonutils.dumps(extra_dict)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"            clause \u003d trust_table.c.id \u003d\u003d trust.id"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_31383cef","line":42,"range":{"start_line":34,"start_character":0,"end_line":42,"end_character":22},"updated":"2017-01-05 19:19:37.000000000","message":"could be replaced by:\n\n    new_values[\u0027redelegated_trust_id\u0027] \u003d extra_dict.pop(\u0027redelegated_trust_id\u0027, None)\n    new_values[\u0027redelegation_count\u0027] \u003d extra_dict.pop(\u0027redelegation_count\u0027, None)","commit_id":"2cd86483cb800ebc7fbd6f0954ba09b9d69bf9ae"}],"keystone/common/sql/data_migration_repo/versions/011_move_redelegated_trust_id.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"bfd53f733d9c0f90f1fd04ddf05fad9dbb24d1e5","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    # Loop through all the trusts and move the redelegeated trust id out of"},{"line_number":25,"context_line":"    # extras."},{"line_number":26,"context_line":"    for trust in trust_list:"},{"line_number":27,"context_line":"        if trust.extra is not None:"},{"line_number":28,"context_line":"            extra_dict \u003d jsonutils.loads(trust.extra)"},{"line_number":29,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_4447581d","line":26,"updated":"2016-11-29 17:16:53.000000000","message":"We probably want to paginate this","commit_id":"24d1adb324dd8dec9c194dbacd4b7572b98b9aee"}],"keystone/common/sql/migrate_repo/versions/088_move_redelegated_trust_id.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"245990fc23fa36ebe931d0ce638df164b451f8cc","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from oslo_serialization import jsonutils"},{"line_number":14,"context_line":"import sqlalchemy as sql"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"_TRUST_TABLE_NAME \u003d \u0027trust\u0027"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_f981b6c3","line":15,"updated":"2016-02-08 16:30:15.000000000","message":"(nit) add newline here","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b81e1153b3d78e4eef1d1f2e6947fd72d2de0dd3","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from oslo_serialization import jsonutils"},{"line_number":14,"context_line":"import sqlalchemy as sql"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"_TRUST_TABLE_NAME \u003d \u0027trust\u0027"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_383171ed","line":15,"in_reply_to":"5a5ae5dd_f981b6c3","updated":"2016-02-09 18:29:10.000000000","message":"Done","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"245990fc23fa36ebe931d0ce638df164b451f8cc","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    # Create new column to store the redelegated trust id"},{"line_number":28,"context_line":"    trust_table.create_column(redelegated_trust_id_column)"},{"line_number":29,"context_line":"    trust_list \u003d list(trust_table.select().execute())"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # Loop through all the trust and move the redelegeated trust id out of"},{"line_number":32,"context_line":"    # extas."}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_19d372d6","line":29,"updated":"2016-02-08 16:30:15.000000000","message":"What happens if there is a large number of trusts?","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b81e1153b3d78e4eef1d1f2e6947fd72d2de0dd3","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    # Create new column to store the redelegated trust id"},{"line_number":28,"context_line":"    trust_table.create_column(redelegated_trust_id_column)"},{"line_number":29,"context_line":"    trust_list \u003d list(trust_table.select().execute())"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # Loop through all the trust and move the redelegeated trust id out of"},{"line_number":32,"context_line":"    # extas."}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_58af8de3","line":29,"in_reply_to":"5a5ae5dd_19d372d6","updated":"2016-02-09 18:29:10.000000000","message":"It would take some time to parse through all the trust. Is there a way in keystone to do inline migration in batch format?","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"245990fc23fa36ebe931d0ce638df164b451f8cc","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            }"},{"line_number":46,"context_line":"            if redelegated_trust_id:"},{"line_number":47,"context_line":"                new_values[\u0027redelegated_trust_id\u0027] \u003d redelegated_trust_id"},{"line_number":48,"context_line":"            f \u003d trust_table.c.id \u003d\u003d trust.id"},{"line_number":49,"context_line":"            update \u003d trust_table.update().where(f).values(new_values)"},{"line_number":50,"context_line":"            migrate_engine.execute(update)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_b98c9eda","line":48,"updated":"2016-02-08 16:30:15.000000000","message":"f?","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b81e1153b3d78e4eef1d1f2e6947fd72d2de0dd3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            }"},{"line_number":46,"context_line":"            if redelegated_trust_id:"},{"line_number":47,"context_line":"                new_values[\u0027redelegated_trust_id\u0027] \u003d redelegated_trust_id"},{"line_number":48,"context_line":"            f \u003d trust_table.c.id \u003d\u003d trust.id"},{"line_number":49,"context_line":"            update \u003d trust_table.update().where(f).values(new_values)"},{"line_number":50,"context_line":"            migrate_engine.execute(update)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_f851990f","line":48,"in_reply_to":"5a5ae5dd_b98c9eda","updated":"2016-02-09 18:29:10.000000000","message":"Done","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"bc2c1bcdc9c4cbc392f3e597819bf9c0acfe6c0f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import sqlalchemy as sql"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"_TRUST_TABLE_NAME \u003d \u0027trust\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def upgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba0121b8_b2bb42c3","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":17},"updated":"2016-04-01 15:10:25.000000000","message":"nit: you are only using this once, so you don\u0027t need a global name","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"58f7d22669129538efd65afabf956039d00c036d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import sqlalchemy as sql"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"_TRUST_TABLE_NAME \u003d \u0027trust\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def upgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_6ae9adb6","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":17},"in_reply_to":"ba0121b8_b2bb42c3","updated":"2016-11-28 21:59:10.000000000","message":"Done","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"2542fa946c194d8d288cf010b218176900796baf","unresolved":false,"context_lines":[{"line_number":17,"context_line":"_TRUST_TABLE_NAME \u003d \u0027trust\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def upgrade(migrate_engine):"},{"line_number":21,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":22,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_83242360","line":20,"updated":"2016-02-12 03:38:18.000000000","message":"Do this as two migrations.  The first creates the column, the second migrates the data.  Othewise, if the migrate fails, the table will be in an unstable state.","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"bc2c1bcdc9c4cbc392f3e597819bf9c0acfe6c0f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"_TRUST_TABLE_NAME \u003d \u0027trust\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def upgrade(migrate_engine):"},{"line_number":21,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":22,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba0121b8_6d5c2f19","line":20,"in_reply_to":"3a57f1b5_83242360","updated":"2016-04-01 15:10:25.000000000","message":"++","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"58f7d22669129538efd65afabf956039d00c036d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"_TRUST_TABLE_NAME \u003d \u0027trust\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def upgrade(migrate_engine):"},{"line_number":21,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":22,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_aacf4554","line":20,"in_reply_to":"3a57f1b5_83242360","updated":"2016-11-28 21:59:10.000000000","message":"Done","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"bc2c1bcdc9c4cbc392f3e597819bf9c0acfe6c0f","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    trust_table \u003d sql.Table(_TRUST_TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":25,"context_line":"    redelegated_trust_id_column \u003d sql.Column(\u0027redelegated_trust_id\u0027,"},{"line_number":26,"context_line":"                                             sql.String(64))"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # Create new column to store the redelegated trust id"},{"line_number":29,"context_line":"    trust_table.create_column(redelegated_trust_id_column)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba0121b8_4d6b2bb7","line":26,"range":{"start_line":26,"start_character":58,"end_line":26,"end_character":60},"updated":"2016-04-01 15:10:25.000000000","message":"Do you need a foreign key relationship for this column?","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"58f7d22669129538efd65afabf956039d00c036d","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    trust_table \u003d sql.Table(_TRUST_TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":25,"context_line":"    redelegated_trust_id_column \u003d sql.Column(\u0027redelegated_trust_id\u0027,"},{"line_number":26,"context_line":"                                             sql.String(64))"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # Create new column to store the redelegated trust id"},{"line_number":29,"context_line":"    trust_table.create_column(redelegated_trust_id_column)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_2a0a558a","line":26,"range":{"start_line":26,"start_character":58,"end_line":26,"end_character":60},"in_reply_to":"ba0121b8_4d6b2bb7","updated":"2016-11-28 21:59:10.000000000","message":"We could add one, but we currently don\u0027t have that. We could in theory break people....but it\u0027s probably very unlikely.","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"2542fa946c194d8d288cf010b218176900796baf","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    trust_list \u003d list(trust_table.select().execute())"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    # Loop through all the trust and move the redelegeated trust id out of"},{"line_number":33,"context_line":"    # extas."},{"line_number":34,"context_line":"    for trust in trust_list:"},{"line_number":35,"context_line":"        if trust.extra is not None:"},{"line_number":36,"context_line":"            extra_dict \u003d jsonutils.loads(trust.extra)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_63f9e7c6","line":33,"updated":"2016-02-12 03:38:18.000000000","message":"extras","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"58f7d22669129538efd65afabf956039d00c036d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    trust_list \u003d list(trust_table.select().execute())"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    # Loop through all the trust and move the redelegeated trust id out of"},{"line_number":33,"context_line":"    # extas."},{"line_number":34,"context_line":"    for trust in trust_list:"},{"line_number":35,"context_line":"        if trust.extra is not None:"},{"line_number":36,"context_line":"            extra_dict \u003d jsonutils.loads(trust.extra)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_6a00cd66","line":33,"in_reply_to":"3a57f1b5_63f9e7c6","updated":"2016-11-28 21:59:10.000000000","message":"Done","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"}],"keystone/tests/unit/test_sql_upgrade.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4c2cee69ac938ed220e8ce2509b065d7184a87e7","unresolved":false,"context_lines":[{"line_number":1897,"context_line":"        self.contract(11)"},{"line_number":1898,"context_line":""},{"line_number":1899,"context_line":"        # test target data layout"},{"line_number":1900,"context_line":"        upgraded_trust \u003d list(self.select_table(\u0027trust\u0027).execute())[0]"},{"line_number":1901,"context_line":"        self.assertDictEqual({\u0027other\u0027: trust[\u0027other\u0027]},"},{"line_number":1902,"context_line":"                             jsonutils.loads(upgraded_trust.extra))"},{"line_number":1903,"context_line":"        self.assertEqual(trust[\u0027redelegated_trust_id\u0027],"},{"line_number":1904,"context_line":"                         upgraded_trust.redelegated_trust_id)"},{"line_number":1905,"context_line":"        self.assertEqual(trust[\u0027redelegation_count\u0027],"},{"line_number":1906,"context_line":"                         upgraded_trust.redelegation_count)"},{"line_number":1907,"context_line":""},{"line_number":1908,"context_line":""},{"line_number":1909,"context_line":"class MySQLOpportunisticFullMigration(FullMigration):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_e3d560b9","line":1906,"range":{"start_line":1900,"start_character":0,"end_line":1906,"end_character":59},"updated":"2017-01-05 19:19:37.000000000","message":"Nicely tested","commit_id":"2cd86483cb800ebc7fbd6f0954ba09b9d69bf9ae"}],"keystone/trust/backends/sql.py":[{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"bc2c1bcdc9c4cbc392f3e597819bf9c0acfe6c0f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    deleted_at \u003d sql.Column(sql.DateTime)"},{"line_number":43,"context_line":"    expires_at \u003d sql.Column(sql.DateTime)"},{"line_number":44,"context_line":"    remaining_uses \u003d sql.Column(sql.Integer, nullable\u003dTrue)"},{"line_number":45,"context_line":"    redelegated_trust_id \u003d sql.Column(sql.String(64))"},{"line_number":46,"context_line":"    extra \u003d sql.Column(sql.JsonBlob())"},{"line_number":47,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint("},{"line_number":48,"context_line":"                      \u0027trustor_user_id\u0027, \u0027trustee_user_id\u0027, \u0027project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba0121b8_8d8f0374","line":45,"range":{"start_line":45,"start_character":51,"end_line":45,"end_character":53},"updated":"2016-04-01 15:10:25.000000000","message":"Foreign key relationship?","commit_id":"1de799720b7d04ce35366319a0a5fcc24167b585"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"47faef3e03b41ac5e15ebc556573b1f9ca92bf34","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    __tablename__ \u003d \u0027trust\u0027"},{"line_number":32,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027trustor_user_id\u0027, \u0027trustee_user_id\u0027,"},{"line_number":33,"context_line":"                  \u0027project_id\u0027, \u0027impersonation\u0027, \u0027expires_at\u0027,"},{"line_number":34,"context_line":"                  \u0027remaining_uses\u0027, \u0027deleted_at\u0027, \u0027redelegated_trust_id\u0027]"},{"line_number":35,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":36,"context_line":"    # user id of owner"},{"line_number":37,"context_line":"    trustor_user_id \u003d sql.Column(sql.String(64), nullable\u003dFalse,)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_e9610f13","line":34,"updated":"2016-11-29 22:57:57.000000000","message":"I agree with David here. We should take this opportunity to graduate redelegated_count to a first class attribute as well.","commit_id":"24d1adb324dd8dec9c194dbacd4b7572b98b9aee"}],"keystone/trust/schema.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"245990fc23fa36ebe931d0ce638df164b451f8cc","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    # checking that a role is a list of IDs and/or names."},{"line_number":41,"context_line":"    \u0027roles\u0027: validation.add_array_type(parameter_types.id_string),"},{"line_number":42,"context_line":"    \u0027redelegated_trust_id\u0027: {"},{"line_number":43,"context_line":"        \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"},{"line_number":44,"context_line":"    }"},{"line_number":45,"context_line":"}"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_f46c5dd1","line":43,"updated":"2016-02-08 16:30:15.000000000","message":"Should this be an id_string?","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b81e1153b3d78e4eef1d1f2e6947fd72d2de0dd3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    # checking that a role is a list of IDs and/or names."},{"line_number":41,"context_line":"    \u0027roles\u0027: validation.add_array_type(parameter_types.id_string),"},{"line_number":42,"context_line":"    \u0027redelegated_trust_id\u0027: {"},{"line_number":43,"context_line":"        \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"},{"line_number":44,"context_line":"    }"},{"line_number":45,"context_line":"}"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_18b9152f","line":43,"in_reply_to":"5a5ae5dd_f46c5dd1","updated":"2016-02-09 18:29:10.000000000","message":"Done","commit_id":"64607b88e1ed9a706845b29fd2ed14519fe086b9"}]}
