)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"75a4d07e83148515e8955dbeac412ade620212ea","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"It also removes a stale TODO and an unnecessary duplicate assignment"},{"line_number":21,"context_line":"removal in the affected code."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: If9a91da42818fe37c975f86be47a2e49da356e41"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3aaa91ec_dadbc04d","line":22,"updated":"2016-06-24 01:28:38.000000000","message":"Does this deserve a bug, any testcases are needed for the change like this?","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"}],"keystone/resource/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"57dda849f93e59cf1b5e74b7228e44ac8fb005ff","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        self.get_project.invalidate(self, tenant_id)"},{"line_number":331,"context_line":"        self.get_project_by_name.invalidate(self, original_tenant[\u0027name\u0027],"},{"line_number":332,"context_line":"                                            original_tenant[\u0027domain_id\u0027])"},{"line_number":333,"context_line":"        notifications.Audit.updated(self._PROJECT, tenant_id, initiator)"},{"line_number":334,"context_line":"        return ret"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def delete_project(self, tenant_id, initiator\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_b95547c7","line":333,"updated":"2016-01-27 20:56:09.000000000","message":"so now if the cache invalidate raises there will be no audit sent...","commit_id":"f509f75201d73dd2dbc51c1f9a1e44939b4eb0d0"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"aeb3c5b438f7616036c0b136f0099b1c4c7df19d","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        self.get_project.invalidate(self, tenant_id)"},{"line_number":357,"context_line":"        self.get_project_by_name.invalidate(self, project[\u0027name\u0027],"},{"line_number":358,"context_line":"                                            project[\u0027domain_id\u0027])"},{"line_number":359,"context_line":"        self.assignment_api.delete_project_assignments(tenant_id)"},{"line_number":360,"context_line":"        self.credential_api.delete_credentials_for_project(tenant_id)"},{"line_number":361,"context_line":"        notifications.Audit.deleted(self._PROJECT, tenant_id, initiator)"},{"line_number":362,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_33d176ce","line":359,"updated":"2016-01-27 20:19:49.000000000","message":"Don\u0027t move this one.","commit_id":"f509f75201d73dd2dbc51c1f9a1e44939b4eb0d0"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4b4a4b60efe9181df37520bd782c157c236f6e23","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        self.get_project.invalidate(self, tenant_id)"},{"line_number":357,"context_line":"        self.get_project_by_name.invalidate(self, project[\u0027name\u0027],"},{"line_number":358,"context_line":"                                            project[\u0027domain_id\u0027])"},{"line_number":359,"context_line":"        self.assignment_api.delete_project_assignments(tenant_id)"},{"line_number":360,"context_line":"        self.credential_api.delete_credentials_for_project(tenant_id)"},{"line_number":361,"context_line":"        notifications.Audit.deleted(self._PROJECT, tenant_id, initiator)"},{"line_number":362,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_3e7cdd71","line":359,"in_reply_to":"7a5de9d1_339f3605","updated":"2016-01-27 20:29:48.000000000","message":"I would actually expect this to be moved in between the invalidates. So it would be delete project -\u003e invalidate then delete assignments -\u003e invalidate.","commit_id":"f509f75201d73dd2dbc51c1f9a1e44939b4eb0d0"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f6b992db7d30368821d477840598eefca5046869","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        self.get_project.invalidate(self, tenant_id)"},{"line_number":357,"context_line":"        self.get_project_by_name.invalidate(self, project[\u0027name\u0027],"},{"line_number":358,"context_line":"                                            project[\u0027domain_id\u0027])"},{"line_number":359,"context_line":"        self.assignment_api.delete_project_assignments(tenant_id)"},{"line_number":360,"context_line":"        self.credential_api.delete_credentials_for_project(tenant_id)"},{"line_number":361,"context_line":"        notifications.Audit.deleted(self._PROJECT, tenant_id, initiator)"},{"line_number":362,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_339f3605","line":359,"in_reply_to":"7a5de9d1_33d176ce","updated":"2016-01-27 20:21:28.000000000","message":"Ignore this.","commit_id":"f509f75201d73dd2dbc51c1f9a1e44939b4eb0d0"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0341e3880dbffe290b7e73822c169c206570949a","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        self.get_project.invalidate(self, tenant_id)"},{"line_number":357,"context_line":"        self.get_project_by_name.invalidate(self, project[\u0027name\u0027],"},{"line_number":358,"context_line":"                                            project[\u0027domain_id\u0027])"},{"line_number":359,"context_line":"        self.assignment_api.delete_project_assignments(tenant_id)"},{"line_number":360,"context_line":"        self.credential_api.delete_credentials_for_project(tenant_id)"},{"line_number":361,"context_line":"        notifications.Audit.deleted(self._PROJECT, tenant_id, initiator)"},{"line_number":362,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_be93edf9","line":359,"in_reply_to":"7a5de9d1_3e7cdd71","updated":"2016-01-27 20:45:04.000000000","message":"Looks like we are in violent agreement then!","commit_id":"f509f75201d73dd2dbc51c1f9a1e44939b4eb0d0"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"5d3ebb1a1122194230e73f4e0acaa91cc2d607af","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            self._disable_project(tenant_id)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        ret \u003d self.driver.update_project(tenant_id, tenant)"},{"line_number":331,"context_line":"        self.get_project.invalidate(self, tenant_id)"},{"line_number":332,"context_line":"        self.get_project_by_name.invalidate(self, original_tenant[\u0027name\u0027],"},{"line_number":333,"context_line":"                                            original_tenant[\u0027domain_id\u0027])"},{"line_number":334,"context_line":"        if (\u0027domain_id\u0027 in tenant and"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_99bda86a","line":331,"updated":"2016-01-28 23:10:59.000000000","message":"As per Brant\u0027s comment, it may make sense to catch possible exceptions of these two invalidations.","commit_id":"dafea1dc70f5883c0ca328d4a5e7221feccf4fc4"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"56b8c895349834ef467f2f431a284da1b180b7cf","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            # role assignments cache region, as it may be caching inherited"},{"line_number":338,"context_line":"            # assignments from the old domain to the specified project"},{"line_number":339,"context_line":"            assignment.COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":340,"context_line":"        notifications.Audit.updated(self._PROJECT, tenant_id, initiator)"},{"line_number":341,"context_line":"        return ret"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    def delete_project(self, tenant_id, initiator\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_668747b5","line":340,"range":{"start_line":340,"start_character":8,"end_line":340,"end_character":72},"updated":"2016-06-09 01:34:30.000000000","message":"Brant comment in previous patchset: \"so now if the cache invalidate raises there will be no audit sent...\"\n\nIf we do need to ensure both a) set of invalidations; and b) audit code; are run, what about using a try: finally clause ?","commit_id":"dafea1dc70f5883c0ca328d4a5e7221feccf4fc4"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"db9b24f5548a7935537473ea3462c07a491655c6","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            self.get_project.invalidate(self, project_id)"},{"line_number":471,"context_line":"            self.get_project_by_name.invalidate(self, project[\u0027name\u0027],"},{"line_number":472,"context_line":"                                                project[\u0027domain_id\u0027])"},{"line_number":473,"context_line":"            self.assignment_api.delete_project_assignments(project_id)"},{"line_number":474,"context_line":"            # Invalidate user role assignments cache region, as it may"},{"line_number":475,"context_line":"            # be caching role assignments where the target is"},{"line_number":476,"context_line":"            # the specified project"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_1f29e289","line":473,"range":{"start_line":473,"start_character":12,"end_line":473,"end_character":70},"updated":"2016-06-11 21:51:15.000000000","message":"Please move this out of the try statement. We\u0027re using \u0027try\u0027 for cache invalidate calls only, while the \u0027finally\u0027 statement is only for audit calls.\n\nIt\u0027s a matter of exception sensitive for cache/audit changes, as the commit message says.","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"aef61b52922d894df62998ff2b835fecf6381b20","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            self.get_project.invalidate(self, project_id)"},{"line_number":471,"context_line":"            self.get_project_by_name.invalidate(self, project[\u0027name\u0027],"},{"line_number":472,"context_line":"                                                project[\u0027domain_id\u0027])"},{"line_number":473,"context_line":"            self.assignment_api.delete_project_assignments(project_id)"},{"line_number":474,"context_line":"            # Invalidate user role assignments cache region, as it may"},{"line_number":475,"context_line":"            # be caching role assignments where the target is"},{"line_number":476,"context_line":"            # the specified project"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_29aefa2d","line":473,"in_reply_to":"7aa08908_1f29e289","updated":"2016-06-13 17:40:47.000000000","message":"This would technically all still work as expected regardless of it being within the try/finally, I think. In the event something happens during the delete_project_assignments() call that raises an exception an audit notification will still be sent before the exception is raised (at least that\u0027s what I understand from [0]). \n\nI agree with the organization but I think I\u0027d be fine with it happening in a separate patch.\n\n[0] https://docs.python.org/3/tutorial/errors.html#defining-clean-up-actions","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6acf511feb1816145dff27c74672914de3e233bf","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            self.get_project.invalidate(self, project_id)"},{"line_number":471,"context_line":"            self.get_project_by_name.invalidate(self, project[\u0027name\u0027],"},{"line_number":472,"context_line":"                                                project[\u0027domain_id\u0027])"},{"line_number":473,"context_line":"            self.assignment_api.delete_project_assignments(project_id)"},{"line_number":474,"context_line":"            # Invalidate user role assignments cache region, as it may"},{"line_number":475,"context_line":"            # be caching role assignments where the target is"},{"line_number":476,"context_line":"            # the specified project"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_572f4688","line":473,"in_reply_to":"7aa08908_29aefa2d","updated":"2016-06-15 08:17:16.000000000","message":"++, it\u0027s make sense that if there is exception raised when delete_project_assignments() is called an audit notification could still be sent.","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"db9b24f5548a7935537473ea3462c07a491655c6","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            # be caching role assignments where the target is"},{"line_number":476,"context_line":"            # the specified project"},{"line_number":477,"context_line":"            assignment.COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":478,"context_line":"            self.credential_api.delete_credentials_for_project(project_id)"},{"line_number":479,"context_line":"        finally:"},{"line_number":480,"context_line":"            # attempt to send audit event even if the cache invalidation raises"},{"line_number":481,"context_line":"            notifications.Audit.deleted(self._PROJECT, project_id, initiator)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_7f574602","line":478,"range":{"start_line":478,"start_character":12,"end_line":478,"end_character":74},"updated":"2016-06-11 21:51:15.000000000","message":"ditto","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"11592c8c48c20398f141d3685e2bb88a79cd17e9","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            # be caching role assignments where the target is"},{"line_number":476,"context_line":"            # the specified project"},{"line_number":477,"context_line":"            assignment.COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":478,"context_line":"            self.credential_api.delete_credentials_for_project(project_id)"},{"line_number":479,"context_line":"        finally:"},{"line_number":480,"context_line":"            # attempt to send audit event even if the cache invalidation raises"},{"line_number":481,"context_line":"            notifications.Audit.deleted(self._PROJECT, project_id, initiator)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_b47ba17a","line":478,"range":{"start_line":478,"start_character":12,"end_line":478,"end_character":74},"in_reply_to":"7aa08908_76ad7683","updated":"2016-06-16 20:42:14.000000000","message":"Hmm, actually I think this is the right behavior .... if there is an exception while deleting assingments it doesn\u0027t matter because the proejct has been deleted already, so it\u0027s okay to send a notification out saying the project\u0027s been deleted\n\nIn this case, L795-796 should be in accordance with this and inside the try in L797\n\nDo you agree?","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"4111cf22fa64b20e0c444ca1edcb487fd0815cd4","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            # be caching role assignments where the target is"},{"line_number":476,"context_line":"            # the specified project"},{"line_number":477,"context_line":"            assignment.COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":478,"context_line":"            self.credential_api.delete_credentials_for_project(project_id)"},{"line_number":479,"context_line":"        finally:"},{"line_number":480,"context_line":"            # attempt to send audit event even if the cache invalidation raises"},{"line_number":481,"context_line":"            notifications.Audit.deleted(self._PROJECT, project_id, initiator)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_76ad7683","line":478,"range":{"start_line":478,"start_character":12,"end_line":478,"end_character":74},"in_reply_to":"7aa08908_7f574602","updated":"2016-06-13 21:39:06.000000000","message":"I thought it might be best to try to clean up the assignments and credentials before sending the audit notification, in case there might be a race condition with something seeing the audit notification and then coming and reading the assignments/credentials. If we don\u0027t think that\u0027s a valid concern, I could certainly move those 3 lines out after this try/finally clause, and put the delete_project_assignments in a try block with the assignments invalidate in a corresponding finally block. I\u0027m just not sure which would be better.","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"122cf36d437688c7876875f1fc66fac5ccf16e63","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            # be caching role assignments where the target is"},{"line_number":476,"context_line":"            # the specified project"},{"line_number":477,"context_line":"            assignment.COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":478,"context_line":"            self.credential_api.delete_credentials_for_project(project_id)"},{"line_number":479,"context_line":"        finally:"},{"line_number":480,"context_line":"            # attempt to send audit event even if the cache invalidation raises"},{"line_number":481,"context_line":"            notifications.Audit.deleted(self._PROJECT, project_id, initiator)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_7f40e607","line":478,"range":{"start_line":478,"start_character":12,"end_line":478,"end_character":74},"in_reply_to":"7aa08908_a7c9b1ae","updated":"2016-06-17 05:16:22.000000000","message":"You\u0027re right","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"b46faed8ea3ea6cd8adf72b07b661fe598fe732d","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            # be caching role assignments where the target is"},{"line_number":476,"context_line":"            # the specified project"},{"line_number":477,"context_line":"            assignment.COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":478,"context_line":"            self.credential_api.delete_credentials_for_project(project_id)"},{"line_number":479,"context_line":"        finally:"},{"line_number":480,"context_line":"            # attempt to send audit event even if the cache invalidation raises"},{"line_number":481,"context_line":"            notifications.Audit.deleted(self._PROJECT, project_id, initiator)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_a7c9b1ae","line":478,"range":{"start_line":478,"start_character":12,"end_line":478,"end_character":74},"in_reply_to":"7aa08908_b47ba17a","updated":"2016-06-16 21:04:09.000000000","message":"no, 795-6 are actually doing the delete of the domain. Remember domains are really just special projects now, so the delete_project on 796 is really deleting the domain. Would not want to send an audit event saying the domain was deleted if that raised.","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6acf511feb1816145dff27c74672914de3e233bf","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            assignment.COMPUTED_ASSIGNMENTS_REGION.invalidate()"},{"line_number":478,"context_line":"            self.credential_api.delete_credentials_for_project(project_id)"},{"line_number":479,"context_line":"        finally:"},{"line_number":480,"context_line":"            # attempt to send audit event even if the cache invalidation raises"},{"line_number":481,"context_line":"            notifications.Audit.deleted(self._PROJECT, project_id, initiator)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def delete_project(self, project_id, initiator\u003dNone, cascade\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_17aaded2","line":480,"range":{"start_line":480,"start_character":12,"end_line":480,"end_character":79},"updated":"2016-06-15 08:17:16.000000000","message":"But it\u0027s not just cache invalidation anymore.","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b73bd48b3d354667e6142c442934fbf8a09a3d21","unresolved":false,"context_lines":[{"line_number":478,"context_line":"            self.credential_api.delete_credentials_for_project(project_id)"},{"line_number":479,"context_line":"        finally:"},{"line_number":480,"context_line":"            # attempt to send audit event even if the cache invalidation raises"},{"line_number":481,"context_line":"            notifications.Audit.deleted(self._PROJECT, project_id, initiator)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def delete_project(self, project_id, initiator\u003dNone, cascade\u003dFalse):"},{"line_number":484,"context_line":"        \"\"\"Delete one project or a subtree."}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_bf821c50","line":481,"updated":"2016-06-15 13:48:05.000000000","message":"This will also be fired if the deletions themselves fail.","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"122cf36d437688c7876875f1fc66fac5ccf16e63","unresolved":false,"context_lines":[{"line_number":478,"context_line":"            self.credential_api.delete_credentials_for_project(project_id)"},{"line_number":479,"context_line":"        finally:"},{"line_number":480,"context_line":"            # attempt to send audit event even if the cache invalidation raises"},{"line_number":481,"context_line":"            notifications.Audit.deleted(self._PROJECT, project_id, initiator)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def delete_project(self, project_id, initiator\u003dNone, cascade\u003dFalse):"},{"line_number":484,"context_line":"        \"\"\"Delete one project or a subtree."}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_9f903298","line":481,"in_reply_to":"7aa08908_bf821c50","updated":"2016-06-17 05:16:22.000000000","message":"No, the deletions happen before this method (_post_delete_cleanup_project) is called","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"db9b24f5548a7935537473ea3462c07a491655c6","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        try:"},{"line_number":798,"context_line":"            self.get_domain.invalidate(self, domain_id)"},{"line_number":799,"context_line":"            self.get_domain_by_name.invalidate(self, domain[\u0027name\u0027])"},{"line_number":800,"context_line":"            # Delete any database stored domain config"},{"line_number":801,"context_line":"            self.domain_config_api.delete_config_options(domain_id)"},{"line_number":802,"context_line":"            self.domain_config_api.release_registration(domain_id)"},{"line_number":803,"context_line":"        finally:"},{"line_number":804,"context_line":"            # attempt to send audit event even if the cache invalidation raises"},{"line_number":805,"context_line":"            notifications.Audit.deleted(self._DOMAIN, domain_id, initiator)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_1f50c209","line":802,"range":{"start_line":800,"start_character":12,"end_line":802,"end_character":66},"updated":"2016-06-11 21:51:15.000000000","message":"same as above","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"22b235a00d8c4793f225f72014ce223254413105","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        try:"},{"line_number":798,"context_line":"            self.get_domain.invalidate(self, domain_id)"},{"line_number":799,"context_line":"            self.get_domain_by_name.invalidate(self, domain[\u0027name\u0027])"},{"line_number":800,"context_line":"            # Delete any database stored domain config"},{"line_number":801,"context_line":"            self.domain_config_api.delete_config_options(domain_id)"},{"line_number":802,"context_line":"            self.domain_config_api.release_registration(domain_id)"},{"line_number":803,"context_line":"        finally:"},{"line_number":804,"context_line":"            # attempt to send audit event even if the cache invalidation raises"},{"line_number":805,"context_line":"            notifications.Audit.deleted(self._DOMAIN, domain_id, initiator)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_d7786f91","line":802,"range":{"start_line":800,"start_character":12,"end_line":802,"end_character":66},"in_reply_to":"7aa08908_160a328a","updated":"2016-06-14 18:43:10.000000000","message":"you may want to indicate if there was an error? orphaned resources? etc in the notification? *shrug*","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"4111cf22fa64b20e0c444ca1edcb487fd0815cd4","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        try:"},{"line_number":798,"context_line":"            self.get_domain.invalidate(self, domain_id)"},{"line_number":799,"context_line":"            self.get_domain_by_name.invalidate(self, domain[\u0027name\u0027])"},{"line_number":800,"context_line":"            # Delete any database stored domain config"},{"line_number":801,"context_line":"            self.domain_config_api.delete_config_options(domain_id)"},{"line_number":802,"context_line":"            self.domain_config_api.release_registration(domain_id)"},{"line_number":803,"context_line":"        finally:"},{"line_number":804,"context_line":"            # attempt to send audit event even if the cache invalidation raises"},{"line_number":805,"context_line":"            notifications.Audit.deleted(self._DOMAIN, domain_id, initiator)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_160a328a","line":802,"range":{"start_line":800,"start_character":12,"end_line":802,"end_character":66},"in_reply_to":"7aa08908_1f50c209","updated":"2016-06-13 21:39:06.000000000","message":"similarly, I thought we\u0027d probably want to try to clean up everything about the domain before sending the audit notification, to avoid potential race conditions as described above. But as I said above, I\u0027m not certain whether that\u0027s a valid concern or not. If we think it\u0027s not, I\u0027d be happy to move it. I\u0027ll leave things this way until/unless I heard that\u0027s not a concern.","commit_id":"c3baa838a9e27cbead6401e282f147bc2cfd684f"}]}
