)]}'
{"shade/__init__.py":[{"author":{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},"change_message_id":"e71324085b44333a37ac2bbfef334d5ed5f3ae7c","unresolved":false,"context_lines":[{"line_number":523,"context_line":"        self.get_user_cache.invalidate(self)"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    def delete_user(self, name_or_id):"},{"line_number":526,"context_line":"        self.get_user_cache.invalidate(self)"},{"line_number":527,"context_line":"        try:"},{"line_number":528,"context_line":"            user \u003d self._get_user(name_or_id)"},{"line_number":529,"context_line":"            self.manager.submitTask(_tasks.UserDelete(user\u003duser))"}],"source_content_type":"text/x-python","patch_set":4,"id":"dac4157f_68da064e","line":526,"updated":"2015-04-22 16:50:38.000000000","message":"Im surprised we need this invalidate?","commit_id":"457db089ca9857ae995f25c677dcacc75d742f80"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"d54d5ee95f3a3db507a98bc01ca5fae4b82cf7a8","unresolved":false,"context_lines":[{"line_number":523,"context_line":"        self.get_user_cache.invalidate(self)"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    def delete_user(self, name_or_id):"},{"line_number":526,"context_line":"        self.get_user_cache.invalidate(self)"},{"line_number":527,"context_line":"        try:"},{"line_number":528,"context_line":"            user \u003d self._get_user(name_or_id)"},{"line_number":529,"context_line":"            self.manager.submitTask(_tasks.UserDelete(user\u003duser))"}],"source_content_type":"text/x-python","patch_set":4,"id":"dac4157f_08cdca65","line":526,"in_reply_to":"dac4157f_68da064e","updated":"2015-04-22 17:00:26.000000000","message":"It\u0027s for the race condition between actually deleting the user, and invalidating the cache. Imagine 2 daemons:\n\nd1: delete_user name\u003dbob\nd1: DELETE keystone/user/bob -\u003e 200\nd2: delete_user name\u003dbob\nd2: get_user_cache -\u003e shows bob exists\nd2: DELETE keystone/user/bob -\u003e 404\nd1: invalidate_user_cache\n\nThere\u0027s still a tiny window for d1\u0027s DELETE to fit in of course, but we want it _as tiny as possible_.","commit_id":"457db089ca9857ae995f25c677dcacc75d742f80"}]}
