)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"eabcdfdd9aef0ef8fb493bb492880a0f4a913b3b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"[1] https://github.com/openstack/keystone/blob/2bd88d3/keystone/common/sql/expand_repo/versions/014_expand_add_domain_id_to_user_table.py#L140-L141"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: If5bdb6f5eef80b50b000aed5188ce7da4dfd1083"},{"line_number":28,"context_line":"Closes-bug: #1718747"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5f93b717_b2d9cf57","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":20},"updated":"2018-01-31 21:19:12.000000000","message":"This is a pretty straight forward change, but is there a way we can add a test? Also, a release note would be good, especially if people are writing their own identity backends that would need to deal with the is_sql bit...","commit_id":"8898776f3aff3d7e628cfe5ce8760d10d1ae695a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3fe56ac981d134b8fd0ee246b9c74f5018e803e3","unresolved":false,"context_lines":[{"line_number":25,"context_line":"[1] https://github.com/openstack/keystone/blob/2bd88d3/keystone/common/sql/expand_repo/versions/014_expand_add_domain_id_to_user_table.py#L140-L141"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: If5bdb6f5eef80b50b000aed5188ce7da4dfd1083"},{"line_number":28,"context_line":"Closes-bug: #1718747"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5f93b717_1261a305","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":20},"in_reply_to":"5f93b717_b269cff9","updated":"2018-01-31 21:40:42.000000000","message":"That\u0027d be perfect, thanks!","commit_id":"8898776f3aff3d7e628cfe5ce8760d10d1ae695a"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4fca0c45881742bfac193f721f899b6c751508ba","unresolved":false,"context_lines":[{"line_number":25,"context_line":"[1] https://github.com/openstack/keystone/blob/2bd88d3/keystone/common/sql/expand_repo/versions/014_expand_add_domain_id_to_user_table.py#L140-L141"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: If5bdb6f5eef80b50b000aed5188ce7da4dfd1083"},{"line_number":28,"context_line":"Closes-bug: #1718747"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5f93b717_b269cff9","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":20},"in_reply_to":"5f93b717_b2d9cf57","updated":"2018-01-31 21:39:05.000000000","message":"\u003e This is a pretty straight forward change, but is there a way we can\n \u003e add a test? \n\nWith how our unit tests behave on sqlite there\u0027s not a good way to expose it in our unit tests, but Sam wrote a tempest test for it already. I\u0027ll update the commit message to reference it.\n\nAlso, a release note would be good, especially if\n \u003e people are writing their own identity backends that would need to\n \u003e deal with the is_sql bit...\n\nGood call, will do.","commit_id":"8898776f3aff3d7e628cfe5ce8760d10d1ae695a"}],"keystone/common/sql/contract_repo/versions/038_contract_drop_domain_fk.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5e5f26efe1523b3be018804150f71a04b727bbd6","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    fk \u003d migrate.ForeignKeyConstraint(columns\u003d[user_table.c.domain_id],"},{"line_number":24,"context_line":"                                      refcolumns\u003d[project_table.c.id])"},{"line_number":25,"context_line":"    if migrate_engine.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":26,"context_line":"        dbname \u003d migrate_engine.raw_connection().db"},{"line_number":27,"context_line":"        get_fk_name \u003d sql.text(\"SELECT constraint_name \""},{"line_number":28,"context_line":"                               \"FROM information_schema.key_column_usage \""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_384dfd99","line":25,"updated":"2018-02-07 21:30:07.000000000","message":"Does this work for postgres, too?","commit_id":"e034679415f53448c1db2bf4fb5141dcc1d7b834"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"22b7b861bbdf3890ccf5ece00d36aab83a1be705","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    fk \u003d migrate.ForeignKeyConstraint(columns\u003d[user_table.c.domain_id],"},{"line_number":24,"context_line":"                                      refcolumns\u003d[project_table.c.id])"},{"line_number":25,"context_line":"    if migrate_engine.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":26,"context_line":"        dbname \u003d migrate_engine.raw_connection().db"},{"line_number":27,"context_line":"        get_fk_name \u003d sql.text(\"SELECT constraint_name \""},{"line_number":28,"context_line":"                               \"FROM information_schema.key_column_usage \""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_bedd7571","line":25,"in_reply_to":"3fa0c359_384dfd99","updated":"2018-02-07 22:02:32.000000000","message":"I should add a comment here. The constraint wasn\u0027t given a name when it was added, and sqlalchemy does this funny thing where it tries to guess the name and guesses wrongly. As far as I can tell this isn\u0027t a problem on postgres, so we don\u0027t have to figure out the name, we can just go ahead and drop the key found by ForeignKeyConstraint.","commit_id":"e034679415f53448c1db2bf4fb5141dcc1d7b834"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0cb8cf634dc92548490d8f396baeeefe197025fb","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    fk \u003d migrate.ForeignKeyConstraint(columns\u003d[user_table.c.domain_id],"},{"line_number":24,"context_line":"                                      refcolumns\u003d[project_table.c.id])"},{"line_number":25,"context_line":"    if migrate_engine.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":26,"context_line":"        dbname \u003d migrate_engine.raw_connection().db"},{"line_number":27,"context_line":"        get_fk_name \u003d sql.text(\"SELECT constraint_name \""},{"line_number":28,"context_line":"                               \"FROM information_schema.key_column_usage \""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_160313ba","line":25,"in_reply_to":"3fa0c359_bedd7571","updated":"2018-02-08 19:38:15.000000000","message":"Ack - thanks for clarifying.","commit_id":"e034679415f53448c1db2bf4fb5141dcc1d7b834"}],"keystone/common/sql/expand_repo/versions/038_expand_drop_domain_fk.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8d660888b7301f0557c94e11864f725a9ce41428","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    if migrate_engine.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":26,"context_line":"        get_fk_name \u003d sql.text(\"SELECT constraint_name \""},{"line_number":27,"context_line":"                               \"FROM information_schema.key_column_usage \""},{"line_number":28,"context_line":"                               \"WHERE table_schema \u003d \u0027keystone\u0027 \""},{"line_number":29,"context_line":"                               \"AND table_name \u003d \u0027user\u0027 \""},{"line_number":30,"context_line":"                               \"AND column_name \u003d \u0027domain_id\u0027 \""},{"line_number":31,"context_line":"                               \"AND referenced_table_name \u003d \u0027project\u0027 \""}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa0c359_c391af54","line":28,"range":{"start_line":28,"start_character":54,"end_line":28,"end_character":62},"updated":"2018-02-06 23:11:57.000000000","message":"This would need to be `migrate_engine.raw_connection().db`","commit_id":"7fc96228cfd15ce70cbbfbddba72edcb36bd2b2e"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8d660888b7301f0557c94e11864f725a9ce41428","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"3fa0c359_238ad31a","line":40,"updated":"2018-02-06 23:11:57.000000000","message":"This would all need to go in contract","commit_id":"7fc96228cfd15ce70cbbfbddba72edcb36bd2b2e"}],"keystone/identity/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"eabcdfdd9aef0ef8fb493bb492880a0f4a913b3b","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        driver \u003d self._select_identity_driver(domain_id)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        if not driver.is_sql:"},{"line_number":505,"context_line":"            # The LDAP driver does not support deleting users or groups."},{"line_number":506,"context_line":"            # Moreover, we shouldn\u0027t destroy users and groups in an unknown"},{"line_number":507,"context_line":"            # driver. The only time when we should delete users and groups is"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f93b717_12fa03bc","line":504,"range":{"start_line":504,"start_character":22,"end_line":504,"end_character":28},"updated":"2018-01-31 21:19:12.000000000","message":"I wish this was something like:\n\n  driver.writable\n\nInstead of implementation specific. But that\u0027s another story that we\u0027ll have to fix in another patch set if we ever decide to change it. It would make this logic easier to understand for people writing their own backends that are writable but aren\u0027t SQL.","commit_id":"8898776f3aff3d7e628cfe5ce8760d10d1ae695a"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4fca0c45881742bfac193f721f899b6c751508ba","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        driver \u003d self._select_identity_driver(domain_id)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        if not driver.is_sql:"},{"line_number":505,"context_line":"            # The LDAP driver does not support deleting users or groups."},{"line_number":506,"context_line":"            # Moreover, we shouldn\u0027t destroy users and groups in an unknown"},{"line_number":507,"context_line":"            # driver. The only time when we should delete users and groups is"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f93b717_92bff35f","line":504,"range":{"start_line":504,"start_character":22,"end_line":504,"end_character":28},"in_reply_to":"5f93b717_12fa03bc","updated":"2018-01-31 21:39:05.000000000","message":"Yeah ditto, I looked for that first, but we don\u0027t have that and adding it the base driver seemed like a big-ish change that was out of the scope of this bug. In any case, I think my comment here stands - the problem reported in the bug only really applies when the identity backend is SQL because of the foreign key we have there.","commit_id":"8898776f3aff3d7e628cfe5ce8760d10d1ae695a"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"adb61be0331165d0291ddcee546b7213fb0b90e3","unresolved":false,"context_lines":[{"line_number":960,"context_line":"        try:"},{"line_number":961,"context_line":"            PROVIDERS.resource_api.get_domain(user_ref[\u0027domain_id\u0027])"},{"line_number":962,"context_line":"        except exception.DomainNotFound:"},{"line_number":963,"context_line":"            raise exception.UserNotFound(user_id\u003duser_ref[\u0027id\u0027])"},{"line_number":964,"context_line":""},{"line_number":965,"context_line":"    @domains_configured"},{"line_number":966,"context_line":"    @exception_translated(\u0027user\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa0c359_bc76363e","line":963,"updated":"2018-02-05 08:54:22.000000000","message":"This actually now breaks the notification callback since it can\u0027t find the user in order to delete it","commit_id":"09818d19320ef513a14cbad7a9053e5c0aff93b6"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2c040b478a4d8c4eb6f161bb3fe46396233bf809","unresolved":false,"context_lines":[{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        driver \u003d self._select_identity_driver(domain_id)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        if not driver.is_sql:"},{"line_number":506,"context_line":"            # The LDAP driver does not support deleting users or groups."},{"line_number":507,"context_line":"            # Moreover, we shouldn\u0027t destroy users and groups in an unknown"},{"line_number":508,"context_line":"            # driver. The only time when we should delete users and groups is"},{"line_number":509,"context_line":"            # when the backend is SQL because the foreign key in the SQL table"},{"line_number":510,"context_line":"            # forces us to."},{"line_number":511,"context_line":"            return"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"        user_refs \u003d self.list_users(domain_scope\u003ddomain_id)"},{"line_number":514,"context_line":"        group_refs \u003d self.list_groups(domain_scope\u003ddomain_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa0c359_eff6cd63","line":511,"range":{"start_line":505,"start_character":0,"end_line":511,"end_character":18},"updated":"2018-02-08 21:06:26.000000000","message":"Make a \"read-only\" attribute for the driver, don\u0027t just check if it is SQL.\n\nThis is fine as is, we prob. should fix it in the next release to check write-capability instead of \"is sql\".","commit_id":"62ee18b359cbb2e6a9469bdaac9057ef19de1bdf"}],"keystone/resource/core.py":[{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"b72133d8e14321b9a87797bc965e0580db284b3d","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":776,"context_line":"        notifications.Audit.internal("},{"line_number":777,"context_line":"            notifications.DOMAIN_DELETED, domain_id"},{"line_number":778,"context_line":"        )"},{"line_number":779,"context_line":"        self._delete_project(domain_id, initiator)"},{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            self.get_domain.invalidate(self, domain_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f93b717_fa22e4b8","line":778,"updated":"2018-01-31 08:39:59.000000000","message":"Here is a similar question that henry point out in my patch[1] I think:\nCan the _delete_project at L779 fail after the delete the user, resulting in the users being removed but the project remaining?\n\n[1]: https://review.openstack.org/#/c/538371/2/keystone/resource/core.py","commit_id":"2013643658c7137f4f8adf858e3790a0687c37b3"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"bd6ab636a2e584d4a7d8253b1125d290b0c52a87","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":776,"context_line":"        notifications.Audit.internal("},{"line_number":777,"context_line":"            notifications.DOMAIN_DELETED, domain_id"},{"line_number":778,"context_line":"        )"},{"line_number":779,"context_line":"        self._delete_project(domain_id, initiator)"},{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            self.get_domain.invalidate(self, domain_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f93b717_9f0b6028","line":778,"in_reply_to":"5f93b717_5f8b9866","updated":"2018-02-01 17:47:17.000000000","message":"I like this a lot. I don\u0027t think we already have a background task like this though. But I do think we have some resources that just get marked as deleted instead of actually deleted.","commit_id":"2013643658c7137f4f8adf858e3790a0687c37b3"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5853acf1816e4d27fa9fb164a9dc5916b9b7cb0d","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":776,"context_line":"        notifications.Audit.internal("},{"line_number":777,"context_line":"            notifications.DOMAIN_DELETED, domain_id"},{"line_number":778,"context_line":"        )"},{"line_number":779,"context_line":"        self._delete_project(domain_id, initiator)"},{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            self.get_domain.invalidate(self, domain_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f93b717_add88e7a","line":778,"in_reply_to":"5f93b717_9045c1b6","updated":"2018-01-31 21:53:39.000000000","message":"Yeah - I think the traditional way of solving this is to use FKs across all those entities in the backend... but we\u0027ve unfortunately moved against that because of the backend not always being SQL.\n\nMaybe we should brainstorm on how to deal with this, otherwise we\u0027ll just have to assume the risk :-/","commit_id":"2013643658c7137f4f8adf858e3790a0687c37b3"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"5096f98d7c2d68ae34c7e5de1ff97320351f0dd2","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":776,"context_line":"        notifications.Audit.internal("},{"line_number":777,"context_line":"            notifications.DOMAIN_DELETED, domain_id"},{"line_number":778,"context_line":"        )"},{"line_number":779,"context_line":"        self._delete_project(domain_id, initiator)"},{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            self.get_domain.invalidate(self, domain_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f93b717_9045c1b6","line":778,"in_reply_to":"5f93b717_9deddaf1","updated":"2018-01-31 09:43:38.000000000","message":"If we could just undo the foreign key in the user table then the existing notification would work as expected and would only happen after the domain had been deleted :(","commit_id":"2013643658c7137f4f8adf858e3790a0687c37b3"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"19a327864c6bc048bdcf189186e4c718f8b8953a","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":776,"context_line":"        notifications.Audit.internal("},{"line_number":777,"context_line":"            notifications.DOMAIN_DELETED, domain_id"},{"line_number":778,"context_line":"        )"},{"line_number":779,"context_line":"        self._delete_project(domain_id, initiator)"},{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            self.get_domain.invalidate(self, domain_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f93b717_12d8a778","line":778,"in_reply_to":"5f93b717_9f0b6028","updated":"2018-02-01 17:55:43.000000000","message":"...and in fact, in the area of authentication, we would kind of get this for free. Since a domain must be disabled before we can mark it as permanently_disabled, and since we would never allow you to re-enable and permanently-disabled domain, we already reject an auth for a user who\u0027s domain is disabled - and that would be sufficient. However, we would have to change all user/group/domain/project management calls to return NotFound if the domain was permanently disabled.","commit_id":"2013643658c7137f4f8adf858e3790a0687c37b3"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"3580e3fd657b0b7eb3e689e78e1e8fb07b4af1cf","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":776,"context_line":"        notifications.Audit.internal("},{"line_number":777,"context_line":"            notifications.DOMAIN_DELETED, domain_id"},{"line_number":778,"context_line":"        )"},{"line_number":779,"context_line":"        self._delete_project(domain_id, initiator)"},{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            self.get_domain.invalidate(self, domain_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f93b717_5f8b9866","line":778,"in_reply_to":"5f93b717_add88e7a","updated":"2018-02-01 17:26:42.000000000","message":"So in cases when you can\u0027t us FK cascading (and even in the all-SQL case, are we sure that the cascade support across all flavours of DB we might support is sufficient?), then perhaps an approach is something like:\n1) Check permission to delete\n2) If OK, mark the entity as deleted in some atomic way (e.g. a \"permenantly-diabled\" flag\". This flag would have to be checked wherever we might use this entity (e.g. looking up a user would fail if the domain/project was \"permanently disabled\")\n3) Then the actual delete becomes a cleanup task, we try and do it at the point of request, but if it screws up, we have some background cleanup process that keeps trying, alerts operator to manual intervention if required etc.","commit_id":"2013643658c7137f4f8adf858e3790a0687c37b3"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"548adc943f7ac1e36a120fba35f53ce990dc7201","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":776,"context_line":"        notifications.Audit.internal("},{"line_number":777,"context_line":"            notifications.DOMAIN_DELETED, domain_id"},{"line_number":778,"context_line":"        )"},{"line_number":779,"context_line":"        self._delete_project(domain_id, initiator)"},{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            self.get_domain.invalidate(self, domain_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f93b717_9deddaf1","line":778,"in_reply_to":"5f93b717_fa22e4b8","updated":"2018-01-31 08:56:43.000000000","message":"Hrm, yes there is probably a lot that could go wrong during _delete_project that would cause a bad state like that. I think the only way it could be fixed is if the foreign key relationship was reversed, and the foreign key from domain.id to user.domain_id had a cascading delete. I don\u0027t really want to try to change or insert more foreign keys here though, so I\u0027m not sure how to fix this.","commit_id":"2013643658c7137f4f8adf858e3790a0687c37b3"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"dad23b23d57877c0afc288716dc239cb05837eba","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                _(\u0027Cannot delete a domain that is enabled, please disable it \u0027"},{"line_number":799,"context_line":"                  \u0027first.\u0027))"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":802,"context_line":"        # Mark the domain as permanently deleted without actually removing it"},{"line_number":803,"context_line":"        self._delete_project(domain_id, initiator, mark_only\u003dTrue)"},{"line_number":804,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f93b717_a3e87ab2","line":801,"range":{"start_line":801,"start_character":8,"end_line":801,"end_character":47},"updated":"2018-02-02 05:41:20.000000000","message":"you could change the logic of delete_domain_contents to make all the projects in the domain as \"deleted\" and then these would all get physically deleted by _cleanup_deleted_projects(), but that would be an enhancement.","commit_id":"a01f2265f442c5ac9899ef20e9f4ab19eed0f409"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a9a71799e3e4f1cd375ad1644dba86380c077fca","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                _(\u0027Cannot delete a domain that is enabled, please disable it \u0027"},{"line_number":799,"context_line":"                  \u0027first.\u0027))"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":802,"context_line":"        # Mark the domain as permanently deleted without actually removing it"},{"line_number":803,"context_line":"        self._delete_project(domain_id, initiator, mark_only\u003dTrue)"},{"line_number":804,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f93b717_ab8fe372","line":801,"range":{"start_line":801,"start_character":8,"end_line":801,"end_character":47},"in_reply_to":"5f93b717_a3e87ab2","updated":"2018-02-02 16:42:51.000000000","message":"I think I\u0027d rather not spread this to the contained projects for now - we haven\u0027t been having a problem deleting those so far. Could always be implemented later.","commit_id":"a01f2265f442c5ac9899ef20e9f4ab19eed0f409"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"76fd2208e2fb1d4001b461c6a88c403358aa63a5","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                _(\u0027Cannot delete a domain that is enabled, please disable it \u0027"},{"line_number":799,"context_line":"                  \u0027first.\u0027))"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":802,"context_line":"        # Mark the domain as permanently deleted without actually removing it"},{"line_number":803,"context_line":"        self._delete_project(domain_id, initiator, mark_only\u003dTrue)"},{"line_number":804,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f93b717_0cd86dec","line":801,"range":{"start_line":801,"start_character":8,"end_line":801,"end_character":47},"in_reply_to":"5f93b717_ab8fe372","updated":"2018-02-02 19:27:59.000000000","message":"totally agree.","commit_id":"a01f2265f442c5ac9899ef20e9f4ab19eed0f409"}],"releasenotes/notes/bug-1718747-50d39fa87bdbb12b.yaml":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2391e12431a4d4b3aad0ecc7c3964640bf5870bb","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    domains containing users from being deleted, a notification callback was"},{"line_number":14,"context_line":"    altered so that users would only be deleted if the identity backend is SQL."},{"line_number":15,"context_line":"    If you have a custom identity backend that is not read-only, deleting a"},{"line_number":16,"context_line":"    domain in keystone will not delete the users in your backend."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5f93b717_ad316e5c","line":16,"range":{"start_line":16,"start_character":14,"end_line":16,"end_character":65},"updated":"2018-01-31 22:15:33.000000000","message":"unless they implement the is_sql boolean","commit_id":"d505a56765484473879086f75bda4d1d708d41df"}]}
