)]}'
{"keystone/resource/core.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"3cef4a38d01f00e9c6ad45a9d9336f5ae081848c","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                if original_project_enabled and not project_enabled:"},{"line_number":419,"context_line":"                    notifications.Audit.disabled(self._DOMAIN, project_id,"},{"line_number":420,"context_line":"                                                 public\u003dFalse)"},{"line_number":421,"context_line":"                token_provider.TOKENS_REGION.invalidate()"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        return ret"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_3471d678","line":421,"updated":"2016-07-07 21:52:50.000000000","message":"Invalidate before notifications, a failure in notifications does not make the cache continued to be valid.\n\nIn short, move this to top of the finally block and isolate into it\u0027s own try/except so a failure to invalidate doesn\u0027t block notifications.\n\nThis theoretically could be moved to under 409, maybe all invalidates should be isolated into their own explicit try-blocks as well?","commit_id":"3546a0e60f93cc48d511840f486d30fdae2d9d83"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c95cac594d44ba73b0f7d783e61d1d7121289d9","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                if original_project_enabled and not project_enabled:"},{"line_number":419,"context_line":"                    notifications.Audit.disabled(self._DOMAIN, project_id,"},{"line_number":420,"context_line":"                                                 public\u003dFalse)"},{"line_number":421,"context_line":"                token_provider.TOKENS_REGION.invalidate()"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        return ret"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_fbe6f642","line":421,"in_reply_to":"1aa78d24_3471d678","updated":"2016-07-08 14:35:47.000000000","message":"I wanted to keep the cache invalidation under the if block on line 418 because that is where we check if we disabled a domain. If I move the cache invalidation up to line 409, we aren\u0027t sure if the domain was disabled unless we restructure the if statements somehow. I can move the above the notification on line 419.","commit_id":"3546a0e60f93cc48d511840f486d30fdae2d9d83"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a8333bbd546c2a7597c3480b3deccdd1fd884b2d","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                # If the domain is being disabled, issue the disable"},{"line_number":417,"context_line":"                # notification as well"},{"line_number":418,"context_line":"                if original_project_enabled and not project_enabled:"},{"line_number":419,"context_line":"                    # NOTE(lbragstad): When a domain is disabled, we have to"},{"line_number":420,"context_line":"                    # invalidate the entire token cache. With persistent"},{"line_number":421,"context_line":"                    # tokens, we did something similar where all tokens for a"},{"line_number":422,"context_line":"                    # specific domain were deleted when that domain was"},{"line_number":423,"context_line":"                    # disabled. This effectively offers the same behavior for"},{"line_number":424,"context_line":"                    # non-persistent tokens by removing them from the cache and"},{"line_number":425,"context_line":"                    # requiring the authorization context to be rebuilt the"},{"line_number":426,"context_line":"                    # next time they\u0027re validated."},{"line_number":427,"context_line":"                    token_provider.TOKENS_REGION.invalidate()"},{"line_number":428,"context_line":"                    notifications.Audit.disabled(self._DOMAIN, project_id,"},{"line_number":429,"context_line":"                                                 public\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_e0ac7537","line":426,"range":{"start_line":419,"start_character":20,"end_line":426,"end_character":50},"updated":"2016-07-08 19:44:34.000000000","message":"Can you add a test case for this?","commit_id":"81c9ddcd5056e4efb330d1590ba0f110d0802c4a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d18e561d2667ae28a787bd09e7b51de3469ad7ac","unresolved":false,"context_lines":[{"line_number":423,"context_line":"                    # disabled. This effectively offers the same behavior for"},{"line_number":424,"context_line":"                    # non-persistent tokens by removing them from the cache and"},{"line_number":425,"context_line":"                    # requiring the authorization context to be rebuilt the"},{"line_number":426,"context_line":"                    # next time they\u0027re validated."},{"line_number":427,"context_line":"                    token_provider.TOKENS_REGION.invalidate()"},{"line_number":428,"context_line":"                    notifications.Audit.disabled(self._DOMAIN, project_id,"},{"line_number":429,"context_line":"                                                 public\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_23c5e75a","line":426,"in_reply_to":"1aa78d24_e0ac7537","updated":"2016-07-08 20:02:33.000000000","message":"Yep - this will be exercised when the tests here run https://review.openstack.org/#/c/265455/5/keystone/tests/unit/test_v3_auth.py","commit_id":"81c9ddcd5056e4efb330d1590ba0f110d0802c4a"}]}
