)]}'
{"keystone/common/sql/contract_repo/versions/012_protocol_cascade_delete_for_federated_user.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"41edeb868797c4e76aa0ad4051e024665f062e94","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":29,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":30,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id],"},{"line_number":31,"context_line":"        ondelete\u003d\u0027CASCADE\u0027).create()"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5201f7_f5e0472b","line":31,"range":{"start_line":31,"start_character":27,"end_line":31,"end_character":36},"updated":"2017-01-06 12:01:09.000000000","message":"the test is failing because you are using \"create\" in a `contract` phase.\n\nI guess it\u0027s not possible to create a new one in the expand phase and delete the old one in the contract phase?\n\nYou may have to include this migration in the list of migrations that are exempt [1]\n\n[1] https://github.com/openstack/keystone/blob/master/keystone/tests/unit/test_sql_banned_operations.py#L226-L244","commit_id":"e328ee18ad2c6174796e7c8431798b605190640b"}],"keystone/common/sql/contract_repo/versions/013_protocol_cascade_delete_for_federated_user.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"ad43e63a817462adbfd4e5805bf42277f324d76e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":25,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":26,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id]).drop()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":29,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":30,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id],"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_0f1b41cb","line":27,"updated":"2017-01-11 15:55:20.000000000","message":"what happens if a user decides to authenticate using a protocol between these two operations?","commit_id":"5f3aec4f578b799dcd7dd5372f3a9571bf9d293f"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"ead9afa07c43c41202bcb51f9251d112b4c425cd","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":25,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":26,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id]).drop()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":29,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":30,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id],"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_b1228fa1","line":27,"in_reply_to":"ba5201f7_0f1b41cb","updated":"2017-01-11 18:11:19.000000000","message":"the auth process remains unaffected, don\u0027t think it relies in this FK.","commit_id":"5f3aec4f578b799dcd7dd5372f3a9571bf9d293f"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"db899c1d21c70a3a5e98008a23b6c10829caab16","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":25,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":26,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id]).drop()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":29,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":30,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id],"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_b90a6e88","line":27,"in_reply_to":"ba5201f7_b1228fa1","updated":"2017-01-11 21:52:59.000000000","message":"i wonder how we could check it.\n\nMaybe we could (for test purposes) break this into 2 parts. The first one, in expand, will drop the Fk, the second in contract will create it again. And between expand and contract authenticate using a protocol.\n\nI will probably perform this exercise tomorrow if nobody does it first.","commit_id":"5f3aec4f578b799dcd7dd5372f3a9571bf9d293f"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"dbdb9dc99e7634914c8be843b42f48d3d3396549","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":25,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":26,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id]).drop()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":29,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":30,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id],"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a3c09a3_2d2b02ed","line":27,"in_reply_to":"ba5201f7_b90a6e88","updated":"2017-01-13 16:33:22.000000000","message":"tried this, seems to work fine","commit_id":"5f3aec4f578b799dcd7dd5372f3a9571bf9d293f"}],"keystone/common/sql/expand_repo/versions/012_protocol_cascade_delete_for_federated_user.py":[{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"ad324081d3b6a6a8a1d0ac8b693e59a3145aed1d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    federated_table \u003d sql.Table(\u0027federated_user\u0027, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":"    protocol_table \u003d sql.Table(\u0027federation_protocol\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":25,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":26,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id]).drop()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":29,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_a715f949","line":26,"range":{"start_line":24,"start_character":4,"end_line":26,"end_character":73},"updated":"2017-01-04 22:07:07.000000000","message":"shouldn\u0027t this be in the contract repo?","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"62409272f3d1944591b5a642681c3e6cc385b2dc","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":25,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":26,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id]).drop()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":29,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_fb6cf836","line":26,"in_reply_to":"ba5201f7_6a8f582a","updated":"2017-01-05 00:34:36.000000000","message":"it is indeed part of the contract phase... Since it is a drop/create, the semantic is from a \"alter\" operation. I\u0027m not familiar with the inners of the database migration, but I guess each phase is executed atomically - if this is true, I think we are safe here? Will put both in the contract phase, please let me know if any issues can happen here.","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b9ca5ffb559151360a48413d64c304089196a4e3","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":25,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"},{"line_number":26,"context_line":"        refcolumns\u003d[protocol_table.c.id, protocol_table.c.idp_id]).drop()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    migrate.ForeignKeyConstraint("},{"line_number":29,"context_line":"        columns\u003d[federated_table.c.protocol_id, federated_table.c.idp_id],"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_6a8f582a","line":26,"in_reply_to":"ba5201f7_a715f949","updated":"2017-01-04 22:32:50.000000000","message":"Yeah - I would think so. If we remove the foreign key constraint momentarily we have a small slice of time where it\u0027s possible to do things on the federated_table and protocol_table without the constraint being enforced, since we\u0027re not making the tables read only either.\n\nDo we have the ability to do the following with triggers? \n\n- create a new foreign key constraint using a specific name (expand phase)\n- drop the old foreign key constraint (contract phase)\n- rename the new constraint (contract phase)","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"}],"keystone/tests/unit/test_sql_banned_operations.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"ad43e63a817462adbfd4e5805bf42277f324d76e","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        # phase. Adding an exception here to pass data migrations banned tests,"},{"line_number":283,"context_line":"        # otherwise fails."},{"line_number":284,"context_line":"        4,"},{"line_number":285,"context_line":"        # Migration 013 updates a foreign key constraint at the federated_user"},{"line_number":286,"context_line":"        # table. It is a composite key pointing to the procotol.id and"},{"line_number":287,"context_line":"        # protocol.idp_id columns. Since we can\u0027t create a new foreign key"},{"line_number":288,"context_line":"        # before dropping the old one, adding an exception here to pass the"},{"line_number":289,"context_line":"        # data migration banned tests."},{"line_number":290,"context_line":"        13"},{"line_number":291,"context_line":"    ]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_4f3d498e","line":290,"range":{"start_line":285,"start_character":0,"end_line":290,"end_character":10},"updated":"2017-01-11 15:55:20.000000000","message":"Why will this not cause problems for rolling upgrades? The Note above tells me to ask.","commit_id":"5f3aec4f578b799dcd7dd5372f3a9571bf9d293f"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"ead9afa07c43c41202bcb51f9251d112b4c425cd","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        # phase. Adding an exception here to pass data migrations banned tests,"},{"line_number":283,"context_line":"        # otherwise fails."},{"line_number":284,"context_line":"        4,"},{"line_number":285,"context_line":"        # Migration 013 updates a foreign key constraint at the federated_user"},{"line_number":286,"context_line":"        # table. It is a composite key pointing to the procotol.id and"},{"line_number":287,"context_line":"        # protocol.idp_id columns. Since we can\u0027t create a new foreign key"},{"line_number":288,"context_line":"        # before dropping the old one, adding an exception here to pass the"},{"line_number":289,"context_line":"        # data migration banned tests."},{"line_number":290,"context_line":"        13"},{"line_number":291,"context_line":"    ]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_d169d3bf","line":290,"range":{"start_line":285,"start_character":0,"end_line":290,"end_character":10},"in_reply_to":"ba5201f7_4f3d498e","updated":"2017-01-11 18:11:19.000000000","message":"added more details. Basically, since it happens in the same phase, so no time for issues to arise. At least, this is my understanding.","commit_id":"5f3aec4f578b799dcd7dd5372f3a9571bf9d293f"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"29f33759760c1127548d33bcf7c4d87cec35c420","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        # timestamp to datetime and updates the initial value in the contract"},{"line_number":282,"context_line":"        # phase. Adding an exception here to pass data migrations banned tests,"},{"line_number":283,"context_line":"        # otherwise fails."},{"line_number":284,"context_line":"        4,"},{"line_number":285,"context_line":"        # Migration 013 updates a foreign key constraint at the federated_user"},{"line_number":286,"context_line":"        # table. It is a composite key pointing to the procotol.id and"},{"line_number":287,"context_line":"        # protocol.idp_id columns. Since we can\u0027t create a new foreign key"},{"line_number":288,"context_line":"        # before dropping the old one and the operations happens in the same"},{"line_number":289,"context_line":"        # upgrade phase, adding an exception here to pass the data migration"},{"line_number":290,"context_line":"        # banned tests."},{"line_number":291,"context_line":"        13"},{"line_number":292,"context_line":"    ]"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_2ca86b1f","line":291,"range":{"start_line":284,"start_character":8,"end_line":291,"end_character":10},"updated":"2017-01-13 15:10:12.000000000","message":"Why is this needed? I understand the contract exception, but you are not doing any data migration, so why do you need a data migration exception?","commit_id":"2a6093b811374aa913224b13a23811dc559035a0"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"1d34b4a460b4b575e52ac1f5af3bb47cdb6c248a","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        # timestamp to datetime and updates the initial value in the contract"},{"line_number":282,"context_line":"        # phase. Adding an exception here to pass data migrations banned tests,"},{"line_number":283,"context_line":"        # otherwise fails."},{"line_number":284,"context_line":"        4,"},{"line_number":285,"context_line":"        # Migration 013 updates a foreign key constraint at the federated_user"},{"line_number":286,"context_line":"        # table. It is a composite key pointing to the procotol.id and"},{"line_number":287,"context_line":"        # protocol.idp_id columns. Since we can\u0027t create a new foreign key"},{"line_number":288,"context_line":"        # before dropping the old one and the operations happens in the same"},{"line_number":289,"context_line":"        # upgrade phase, adding an exception here to pass the data migration"},{"line_number":290,"context_line":"        # banned tests."},{"line_number":291,"context_line":"        13"},{"line_number":292,"context_line":"    ]"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_efe4923c","line":291,"range":{"start_line":284,"start_character":8,"end_line":291,"end_character":10},"in_reply_to":"7a3c09a3_2ca86b1f","updated":"2017-01-13 15:54:16.000000000","message":"yeah... the fact is that this fails too, maybe it is an error in the tests.","commit_id":"2a6093b811374aa913224b13a23811dc559035a0"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"3c60d62e8d3fd647e0dce9e69461f9859ab2aa0c","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        # timestamp to datetime and updates the initial value in the contract"},{"line_number":282,"context_line":"        # phase. Adding an exception here to pass data migrations banned tests,"},{"line_number":283,"context_line":"        # otherwise fails."},{"line_number":284,"context_line":"        4,"},{"line_number":285,"context_line":"        # Migration 013 updates a foreign key constraint at the federated_user"},{"line_number":286,"context_line":"        # table. It is a composite key pointing to the procotol.id and"},{"line_number":287,"context_line":"        # protocol.idp_id columns. Since we can\u0027t create a new foreign key"},{"line_number":288,"context_line":"        # before dropping the old one and the operations happens in the same"},{"line_number":289,"context_line":"        # upgrade phase, adding an exception here to pass the data migration"},{"line_number":290,"context_line":"        # banned tests."},{"line_number":291,"context_line":"        13"},{"line_number":292,"context_line":"    ]"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_4da68ec2","line":291,"range":{"start_line":284,"start_character":8,"end_line":291,"end_character":10},"in_reply_to":"7a3c09a3_efe4923c","updated":"2017-01-13 16:31:26.000000000","message":"If it fails, then to me it would be a bug, as it shouldn\u0027t be needed if you are not doing any data migrations.","commit_id":"2a6093b811374aa913224b13a23811dc559035a0"}],"keystone/tests/unit/test_sql_upgrade.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b9ca5ffb559151360a48413d64c304089196a4e3","unresolved":false,"context_lines":[{"line_number":1840,"context_line":"    def test_protocol_cascade_delete_for_federated_user(self):"},{"line_number":1841,"context_line":"        if self.engine.name \u003d\u003d \u0027sqlite\u0027:"},{"line_number":1842,"context_line":"            self.skipTest(\u0027sqlite backend does not support foreign keys\u0027)"},{"line_number":1843,"context_line":""},{"line_number":1844,"context_line":"        self.expand(12)"},{"line_number":1845,"context_line":"        self.migrate(12)"},{"line_number":1846,"context_line":"        self.contract(12)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_8a0abc77","line":1843,"updated":"2017-01-04 22:32:50.000000000","message":"We could upgrade to 11 and assert that we aren\u0027t able to delete protocols because of the inadequate foreign key constraint.","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"62409272f3d1944591b5a642681c3e6cc385b2dc","unresolved":false,"context_lines":[{"line_number":1840,"context_line":"    def test_protocol_cascade_delete_for_federated_user(self):"},{"line_number":1841,"context_line":"        if self.engine.name \u003d\u003d \u0027sqlite\u0027:"},{"line_number":1842,"context_line":"            self.skipTest(\u0027sqlite backend does not support foreign keys\u0027)"},{"line_number":1843,"context_line":""},{"line_number":1844,"context_line":"        self.expand(12)"},{"line_number":1845,"context_line":"        self.migrate(12)"},{"line_number":1846,"context_line":"        self.contract(12)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_7bd7284b","line":1843,"in_reply_to":"ba5201f7_8a0abc77","updated":"2017-01-05 00:34:36.000000000","message":"Done","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b9ca5ffb559151360a48413d64c304089196a4e3","unresolved":false,"context_lines":[{"line_number":1885,"context_line":""},{"line_number":1886,"context_line":"            return federated_user, federated_table"},{"line_number":1887,"context_line":""},{"line_number":1888,"context_line":"        protocol, protocol_table \u003d _create_protocol()"},{"line_number":1889,"context_line":"        federated_user, federated_table \u003d _create_federated_user("},{"line_number":1890,"context_line":"            protocol[\u0027idp_id\u0027], protocol[\u0027id\u0027])"},{"line_number":1891,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_8a339c61","line":1888,"updated":"2017-01-04 22:32:50.000000000","message":"nit: if we\u0027re not reusing these we could just leave them inline in the function and use a comment to explain what they are doing.","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"62409272f3d1944591b5a642681c3e6cc385b2dc","unresolved":false,"context_lines":[{"line_number":1885,"context_line":""},{"line_number":1886,"context_line":"            return federated_user, federated_table"},{"line_number":1887,"context_line":""},{"line_number":1888,"context_line":"        protocol, protocol_table \u003d _create_protocol()"},{"line_number":1889,"context_line":"        federated_user, federated_table \u003d _create_federated_user("},{"line_number":1890,"context_line":"            protocol[\u0027idp_id\u0027], protocol[\u0027id\u0027])"},{"line_number":1891,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_5bd2645d","line":1888,"in_reply_to":"ba5201f7_8a339c61","updated":"2017-01-05 00:34:36.000000000","message":"I prefer to have them like that so we can keep things more organized.","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"530d443d140ba0671071b8390fd9a37947cc2cbc","unresolved":false,"context_lines":[{"line_number":1912,"context_line":"        self.migrate(12)"},{"line_number":1913,"context_line":"        self.contract(12)"},{"line_number":1914,"context_line":""},{"line_number":1915,"context_line":"        # This test requires a bit of setup to proper work, first we create an"},{"line_number":1916,"context_line":"        # identity provider, mapping and a protocol. Then, we create a"},{"line_number":1917,"context_line":"        # federated user and delete the protocol. We expect the federated user"},{"line_number":1918,"context_line":"        # to be deleted as well."}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_22147e4b","line":1915,"range":{"start_line":1915,"start_character":47,"end_line":1915,"end_character":53},"updated":"2017-01-12 04:28:21.000000000","message":"properly?","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"47c89a96d4b39de3f1a3bde86cefcd6f96210fc2","unresolved":false,"context_lines":[{"line_number":1912,"context_line":"        self.migrate(12)"},{"line_number":1913,"context_line":"        self.contract(12)"},{"line_number":1914,"context_line":""},{"line_number":1915,"context_line":"        # This test requires a bit of setup to proper work, first we create an"},{"line_number":1916,"context_line":"        # identity provider, mapping and a protocol. Then, we create a"},{"line_number":1917,"context_line":"        # federated user and delete the protocol. We expect the federated user"},{"line_number":1918,"context_line":"        # to be deleted as well."}],"source_content_type":"text/x-python","patch_set":16,"id":"9a57fde8_443a0238","line":1915,"range":{"start_line":1915,"start_character":47,"end_line":1915,"end_character":53},"in_reply_to":"ba5201f7_22147e4b","updated":"2017-01-12 14:03:14.000000000","message":"Done","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"530d443d140ba0671071b8390fd9a37947cc2cbc","unresolved":false,"context_lines":[{"line_number":1923,"context_line":"            domain \u003d {"},{"line_number":1924,"context_line":"                \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":1925,"context_line":"                \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1926,"context_line":"                \u0027domain_id\u0027: resource_base.NULL_DOMAIN_ID,"},{"line_number":1927,"context_line":"                \u0027is_domain\u0027: True,"},{"line_number":1928,"context_line":"                \u0027parent_id\u0027: None,"},{"line_number":1929,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_45142c43","line":1926,"range":{"start_line":1926,"start_character":29,"end_line":1926,"end_character":57},"updated":"2017-01-12 04:28:21.000000000","message":"this would never be the domain id, use uuid.uuid4().hex","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"47c89a96d4b39de3f1a3bde86cefcd6f96210fc2","unresolved":false,"context_lines":[{"line_number":1923,"context_line":"            domain \u003d {"},{"line_number":1924,"context_line":"                \u0027id\u0027: uuid.uuid4().hex,"},{"line_number":1925,"context_line":"                \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1926,"context_line":"                \u0027domain_id\u0027: resource_base.NULL_DOMAIN_ID,"},{"line_number":1927,"context_line":"                \u0027is_domain\u0027: True,"},{"line_number":1928,"context_line":"                \u0027parent_id\u0027: None,"},{"line_number":1929,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a57fde8_643f0626","line":1926,"range":{"start_line":1926,"start_character":29,"end_line":1926,"end_character":57},"in_reply_to":"ba5201f7_45142c43","updated":"2017-01-12 14:03:14.000000000","message":"Done","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"530d443d140ba0671071b8390fd9a37947cc2cbc","unresolved":false,"context_lines":[{"line_number":1925,"context_line":"                \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1926,"context_line":"                \u0027domain_id\u0027: resource_base.NULL_DOMAIN_ID,"},{"line_number":1927,"context_line":"                \u0027is_domain\u0027: True,"},{"line_number":1928,"context_line":"                \u0027parent_id\u0027: None,"},{"line_number":1929,"context_line":"            }"},{"line_number":1930,"context_line":"            self.insert_dict(session, \u0027project\u0027, domain)"},{"line_number":1931,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_a2006e03","line":1928,"range":{"start_line":1928,"start_character":29,"end_line":1928,"end_character":33},"updated":"2017-01-12 04:28:21.000000000","message":"now this should be \"resource_base.NULL_DOMAIN_ID\"","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"47c89a96d4b39de3f1a3bde86cefcd6f96210fc2","unresolved":false,"context_lines":[{"line_number":1925,"context_line":"                \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1926,"context_line":"                \u0027domain_id\u0027: resource_base.NULL_DOMAIN_ID,"},{"line_number":1927,"context_line":"                \u0027is_domain\u0027: True,"},{"line_number":1928,"context_line":"                \u0027parent_id\u0027: None,"},{"line_number":1929,"context_line":"            }"},{"line_number":1930,"context_line":"            self.insert_dict(session, \u0027project\u0027, domain)"},{"line_number":1931,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a57fde8_843cea30","line":1928,"range":{"start_line":1928,"start_character":29,"end_line":1928,"end_character":33},"in_reply_to":"ba5201f7_a2006e03","updated":"2017-01-12 14:03:14.000000000","message":"Done","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"530d443d140ba0671071b8390fd9a37947cc2cbc","unresolved":false,"context_lines":[{"line_number":1961,"context_line":""},{"line_number":1962,"context_line":"            return federated_user, federated_table"},{"line_number":1963,"context_line":""},{"line_number":1964,"context_line":"        protocol, protocol_table \u003d _create_protocol()"},{"line_number":1965,"context_line":"        federated_user, federated_table \u003d _create_federated_user("},{"line_number":1966,"context_line":"            protocol[\u0027idp_id\u0027], protocol[\u0027id\u0027])"},{"line_number":1967,"context_line":""},{"line_number":1968,"context_line":"        # before updating the foreign key, we won\u0027t be able to delete the"},{"line_number":1969,"context_line":"        # protocol"},{"line_number":1970,"context_line":"        self.assertRaises(db_exception.DBError,"},{"line_number":1971,"context_line":"                          session.execute,"},{"line_number":1972,"context_line":"                          protocol_table.delete().where("},{"line_number":1973,"context_line":"                              protocol_table.c.id \u003d\u003d protocol[\u0027id\u0027]))"},{"line_number":1974,"context_line":""},{"line_number":1975,"context_line":"        self.expand(13)"},{"line_number":1976,"context_line":"        self.migrate(13)"},{"line_number":1977,"context_line":"        self.contract(13)"},{"line_number":1978,"context_line":""},{"line_number":1979,"context_line":"        # now we are able to delete the protocol"},{"line_number":1980,"context_line":"        session.execute("},{"line_number":1981,"context_line":"            protocol_table.delete().where("},{"line_number":1982,"context_line":"                protocol_table.c.id \u003d\u003d protocol[\u0027id\u0027]))"},{"line_number":1983,"context_line":""},{"line_number":1984,"context_line":"        # assert the cascade deletion worked"},{"line_number":1985,"context_line":"        federated_users \u003d session.query(federated_table).filter_by("},{"line_number":1986,"context_line":"            protocol_id\u003dfederated_user[\u0027protocol_id\u0027]).all()"},{"line_number":1987,"context_line":"        self.assertThat(federated_users, matchers.HasLength(0))"},{"line_number":1988,"context_line":""},{"line_number":1989,"context_line":""},{"line_number":1990,"context_line":"class MySQLOpportunisticFullMigration(FullMigration):"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_e5528012","line":1987,"range":{"start_line":1964,"start_character":0,"end_line":1987,"end_character":63},"updated":"2017-01-12 04:28:21.000000000","message":"great test!","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"}],"keystone/tests/unit/test_v3_federation.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b9ca5ffb559151360a48413d64c304089196a4e3","unresolved":false,"context_lines":[{"line_number":2925,"context_line":""},{"line_number":2926,"context_line":"        # Authenticate to create a new federated_user entry with a foreign"},{"line_number":2927,"context_line":"        # key pointing to the protocol"},{"line_number":2928,"context_line":"        self._authenticate_via_saml()"},{"line_number":2929,"context_line":""},{"line_number":2930,"context_line":"        # Now we should be able to delete the protocol"},{"line_number":2931,"context_line":"        self.federation_api.delete_protocol(self.IDP, protocol[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_8a81dcc5","line":2928,"updated":"2017-01-04 22:32:50.000000000","message":"We can assert here that a new shadow user has been persisted in the backend.","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"62409272f3d1944591b5a642681c3e6cc385b2dc","unresolved":false,"context_lines":[{"line_number":2925,"context_line":""},{"line_number":2926,"context_line":"        # Authenticate to create a new federated_user entry with a foreign"},{"line_number":2927,"context_line":"        # key pointing to the protocol"},{"line_number":2928,"context_line":"        self._authenticate_via_saml()"},{"line_number":2929,"context_line":""},{"line_number":2930,"context_line":"        # Now we should be able to delete the protocol"},{"line_number":2931,"context_line":"        self.federation_api.delete_protocol(self.IDP, protocol[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_3b19207a","line":2928,"in_reply_to":"ba5201f7_8a81dcc5","updated":"2017-01-05 00:34:36.000000000","message":"Done","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b9ca5ffb559151360a48413d64c304089196a4e3","unresolved":false,"context_lines":[{"line_number":2928,"context_line":"        self._authenticate_via_saml()"},{"line_number":2929,"context_line":""},{"line_number":2930,"context_line":"        # Now we should be able to delete the protocol"},{"line_number":2931,"context_line":"        self.federation_api.delete_protocol(self.IDP, protocol[\u0027id\u0027])"},{"line_number":2932,"context_line":""},{"line_number":2933,"context_line":"    def _authenticate_via_saml(self):"},{"line_number":2934,"context_line":"        r \u003d self._issue_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_aa5dc07a","line":2931,"updated":"2017-01-04 22:32:50.000000000","message":"We can also assert here that the newly created shadow user from line 2928 is no longer here as a result of deleting the protocol. This would be nice because that\u0027s the only difference between the old foreign key constraint and the new one.","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"62409272f3d1944591b5a642681c3e6cc385b2dc","unresolved":false,"context_lines":[{"line_number":2928,"context_line":"        self._authenticate_via_saml()"},{"line_number":2929,"context_line":""},{"line_number":2930,"context_line":"        # Now we should be able to delete the protocol"},{"line_number":2931,"context_line":"        self.federation_api.delete_protocol(self.IDP, protocol[\u0027id\u0027])"},{"line_number":2932,"context_line":""},{"line_number":2933,"context_line":"    def _authenticate_via_saml(self):"},{"line_number":2934,"context_line":"        r \u003d self._issue_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_207d6fb1","line":2931,"in_reply_to":"ba5201f7_aa5dc07a","updated":"2017-01-05 00:34:36.000000000","message":"this is a bit tricky since it depends on the database running - if we run the tests using sqlite, the user will still be there. We also don\u0027t have an API to fetch federated users, there is a chance that the main \"user\"entry is left without its \"child\" (maybe this is another bug?)","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"29f33759760c1127548d33bcf7c4d87cec35c420","unresolved":false,"context_lines":[{"line_number":3007,"context_line":"            self.assertNotIn(project[\u0027id\u0027], user_project_ids)"},{"line_number":3008,"context_line":"            user_project_ids.append(project[\u0027id\u0027])"},{"line_number":3009,"context_line":""},{"line_number":3010,"context_line":"    def test_delete_protocol_after_federated_authentication(self):"},{"line_number":3011,"context_line":"        # Create a protocol"},{"line_number":3012,"context_line":"        protocol \u003d self.proto_ref(mapping_id\u003dself.mapping[\u0027id\u0027])"},{"line_number":3013,"context_line":"        self.federation_api.create_protocol("},{"line_number":3014,"context_line":"            self.IDP, protocol[\u0027id\u0027], protocol)"},{"line_number":3015,"context_line":""},{"line_number":3016,"context_line":"        # Authenticate to create a new federated_user entry with a foreign"},{"line_number":3017,"context_line":"        # key pointing to the protocol"},{"line_number":3018,"context_line":"        r \u003d self._issue_unscoped_token()"},{"line_number":3019,"context_line":"        user_id \u003d r.json_body[\u0027token\u0027][\u0027user\u0027][\u0027id\u0027]"},{"line_number":3020,"context_line":"        self.assertNotEmpty(self.identity_api.get_user(user_id))"},{"line_number":3021,"context_line":""},{"line_number":3022,"context_line":"        # Now we should be able to delete the protocol"},{"line_number":3023,"context_line":"        self.federation_api.delete_protocol(self.IDP, protocol[\u0027id\u0027])"},{"line_number":3024,"context_line":""},{"line_number":3025,"context_line":"    def _authenticate_via_saml(self):"},{"line_number":3026,"context_line":"        r \u003d self._issue_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_6731aca2","line":3023,"range":{"start_line":3010,"start_character":4,"end_line":3023,"end_character":69},"updated":"2017-01-13 15:10:12.000000000","message":"What\u0027s the value of this test, it passes before this change.","commit_id":"2a6093b811374aa913224b13a23811dc559035a0"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"1d34b4a460b4b575e52ac1f5af3bb47cdb6c248a","unresolved":false,"context_lines":[{"line_number":3007,"context_line":"            self.assertNotIn(project[\u0027id\u0027], user_project_ids)"},{"line_number":3008,"context_line":"            user_project_ids.append(project[\u0027id\u0027])"},{"line_number":3009,"context_line":""},{"line_number":3010,"context_line":"    def test_delete_protocol_after_federated_authentication(self):"},{"line_number":3011,"context_line":"        # Create a protocol"},{"line_number":3012,"context_line":"        protocol \u003d self.proto_ref(mapping_id\u003dself.mapping[\u0027id\u0027])"},{"line_number":3013,"context_line":"        self.federation_api.create_protocol("},{"line_number":3014,"context_line":"            self.IDP, protocol[\u0027id\u0027], protocol)"},{"line_number":3015,"context_line":""},{"line_number":3016,"context_line":"        # Authenticate to create a new federated_user entry with a foreign"},{"line_number":3017,"context_line":"        # key pointing to the protocol"},{"line_number":3018,"context_line":"        r \u003d self._issue_unscoped_token()"},{"line_number":3019,"context_line":"        user_id \u003d r.json_body[\u0027token\u0027][\u0027user\u0027][\u0027id\u0027]"},{"line_number":3020,"context_line":"        self.assertNotEmpty(self.identity_api.get_user(user_id))"},{"line_number":3021,"context_line":""},{"line_number":3022,"context_line":"        # Now we should be able to delete the protocol"},{"line_number":3023,"context_line":"        self.federation_api.delete_protocol(self.IDP, protocol[\u0027id\u0027])"},{"line_number":3024,"context_line":""},{"line_number":3025,"context_line":"    def _authenticate_via_saml(self):"},{"line_number":3026,"context_line":"        r \u003d self._issue_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_af48ca2e","line":3023,"range":{"start_line":3010,"start_character":4,"end_line":3023,"end_character":69},"in_reply_to":"7a3c09a3_6731aca2","updated":"2017-01-13 15:54:16.000000000","message":"actually it doesn\u0027t if using a database (not sqlite). Our gate only runs tests against mysql.","commit_id":"2a6093b811374aa913224b13a23811dc559035a0"}],"releasenotes/notes/bug-1642692-d669c8fcf9e171d9.yaml":[{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"ad324081d3b6a6a8a1d0ac8b693e59a3145aed1d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    The federated user entry will be deleted if the protocol which it was first"},{"line_number":6,"context_line":"    authenticated is deleted."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ba5201f7_e70b8128","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":5},"updated":"2017-01-04 22:07:07.000000000","message":"extra line","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"62409272f3d1944591b5a642681c3e6cc385b2dc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    The federated user entry will be deleted if the protocol which it was first"},{"line_number":6,"context_line":"    authenticated is deleted."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ba5201f7_dbfbb4bf","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":5},"in_reply_to":"ba5201f7_e70b8128","updated":"2017-01-05 00:34:36.000000000","message":"seems like it is the correct way: https://github.com/openstack/keystone/blob/master/releasenotes/notes/bug-1547684-911aed68a0d3df17.yaml","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b9ca5ffb559151360a48413d64c304089196a4e3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    The federated user entry will be deleted if the protocol which it was first"},{"line_number":6,"context_line":"    authenticated is deleted."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ba5201f7_0ae40caa","line":6,"updated":"2017-01-04 22:32:50.000000000","message":"Does it make sense to include a warning here for deployers? Are there any cases where they need to be extra careful when removing a protocol? Is there a specific workflow where this is valuable?","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"62409272f3d1944591b5a642681c3e6cc385b2dc","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    The federated user entry will be deleted if the protocol which it was first"},{"line_number":6,"context_line":"    authenticated is deleted."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ba5201f7_bbe0b0fb","line":6,"in_reply_to":"ba5201f7_0ae40caa","updated":"2017-01-05 00:34:36.000000000","message":"hmm think this is minor, we only hit the issue because of the functional tests, otherwise I don\u0027t think that deleting a protocol is usual.","commit_id":"ec22012e7e67da267b17f96ae5ece8def78a40b3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"530d443d140ba0671071b8390fd9a37947cc2cbc","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    The federated user entry will be deleted if the protocol which it was first"},{"line_number":6,"context_line":"    authenticated is deleted."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_a55cf819","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":28},"updated":"2017-01-12 04:28:21.000000000","message":"All federated user entries*","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"530d443d140ba0671071b8390fd9a37947cc2cbc","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    The federated user entry will be deleted if the protocol which it was first"},{"line_number":6,"context_line":"    authenticated is deleted."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_c59bbcc7","line":5,"range":{"start_line":5,"start_character":52,"end_line":5,"end_character":60},"updated":"2017-01-12 04:28:21.000000000","message":"``protocol``","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"47c89a96d4b39de3f1a3bde86cefcd6f96210fc2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    The federated user entry will be deleted if the protocol which it was first"},{"line_number":6,"context_line":"    authenticated is deleted."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"9a57fde8_c47432ff","line":5,"range":{"start_line":5,"start_character":52,"end_line":5,"end_character":60},"in_reply_to":"ba5201f7_c59bbcc7","updated":"2017-01-12 14:03:14.000000000","message":"Done","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"530d443d140ba0671071b8390fd9a37947cc2cbc","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    The federated user entry will be deleted if the protocol which it was first"},{"line_number":6,"context_line":"    authenticated is deleted."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_05a224fc","line":6,"range":{"start_line":5,"start_character":61,"end_line":6,"end_character":29},"updated":"2017-01-12 04:28:21.000000000","message":"it used to first authenticate is deleted.","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"47c89a96d4b39de3f1a3bde86cefcd6f96210fc2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    The federated user entry will be deleted if the protocol which it was first"},{"line_number":6,"context_line":"    authenticated is deleted."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"9a57fde8_245a5e84","line":6,"range":{"start_line":5,"start_character":61,"end_line":6,"end_character":29},"in_reply_to":"ba5201f7_05a224fc","updated":"2017-01-12 14:03:14.000000000","message":"Done","commit_id":"bfc351df13a2abc7e09d91f1c6c1af4c2c538945"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"29f33759760c1127548d33bcf7c4d87cec35c420","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    All federated user entries will be deleted if the ``protocol`` it used"},{"line_number":6,"context_line":"    to first authenticate is deleted."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"7a3c09a3_67d8cc54","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":5},"updated":"2017-01-13 15:10:12.000000000","message":"I this correct?","commit_id":"2a6093b811374aa913224b13a23811dc559035a0"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"1d34b4a460b4b575e52ac1f5af3bb47cdb6c248a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    All federated user entries will be deleted if the ``protocol`` it used"},{"line_number":6,"context_line":"    to first authenticate is deleted."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"7a3c09a3_cf5516c7","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":5},"in_reply_to":"7a3c09a3_67d8cc54","updated":"2017-01-13 15:54:16.000000000","message":"yes...","commit_id":"2a6093b811374aa913224b13a23811dc559035a0"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"29f33759760c1127548d33bcf7c4d87cec35c420","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    All federated user entries will be deleted if the ``protocol`` it used"},{"line_number":6,"context_line":"    to first authenticate is deleted."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"7a3c09a3_87993871","line":5,"range":{"start_line":5,"start_character":8,"end_line":5,"end_character":22},"updated":"2017-01-13 15:10:12.000000000","message":"hmm... the user won\u0027t actually be deleted, only the federated attributes.","commit_id":"2a6093b811374aa913224b13a23811dc559035a0"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"1d34b4a460b4b575e52ac1f5af3bb47cdb6c248a","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    [`bug 1642692 \u003chttps://bugs.launchpad.net/keystone/+bug/1642692\u003e`_]"},{"line_number":5,"context_line":"    All federated user entries will be deleted if the ``protocol`` it used"},{"line_number":6,"context_line":"    to first authenticate is deleted."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"7a3c09a3_ef52d2dc","line":5,"range":{"start_line":5,"start_character":8,"end_line":5,"end_character":22},"in_reply_to":"7a3c09a3_87993871","updated":"2017-01-13 15:54:16.000000000","message":"Done","commit_id":"2a6093b811374aa913224b13a23811dc559035a0"}]}
