mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #33252 -- Made cache middlewares thread-safe.
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							0c05c183e4
						
					
				
				
					commit
					3ff7b15bb7
				
			| @@ -67,7 +67,10 @@ class UpdateCacheMiddleware(MiddlewareMixin): | ||||
|         self.page_timeout = None | ||||
|         self.key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX | ||||
|         self.cache_alias = settings.CACHE_MIDDLEWARE_ALIAS | ||||
|         self.cache = caches[self.cache_alias] | ||||
|  | ||||
|     @property | ||||
|     def cache(self): | ||||
|         return caches[self.cache_alias] | ||||
|  | ||||
|     def _should_update_cache(self, request, response): | ||||
|         return hasattr(request, '_cache_update_cache') and request._cache_update_cache | ||||
| @@ -126,7 +129,10 @@ class FetchFromCacheMiddleware(MiddlewareMixin): | ||||
|         super().__init__(get_response) | ||||
|         self.key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX | ||||
|         self.cache_alias = settings.CACHE_MIDDLEWARE_ALIAS | ||||
|         self.cache = caches[self.cache_alias] | ||||
|  | ||||
|     @property | ||||
|     def cache(self): | ||||
|         return caches[self.cache_alias] | ||||
|  | ||||
|     def process_request(self, request): | ||||
|         """ | ||||
| @@ -183,7 +189,6 @@ class CacheMiddleware(UpdateCacheMiddleware, FetchFromCacheMiddleware): | ||||
|             if cache_alias is None: | ||||
|                 cache_alias = DEFAULT_CACHE_ALIAS | ||||
|             self.cache_alias = cache_alias | ||||
|             self.cache = caches[self.cache_alias] | ||||
|         except KeyError: | ||||
|             pass | ||||
|  | ||||
|   | ||||
							
								
								
									
										15
									
								
								tests/cache/tests.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								tests/cache/tests.py
									
									
									
									
										vendored
									
									
								
							| @@ -2488,6 +2488,21 @@ class CacheMiddlewareTest(SimpleTestCase): | ||||
|         self.assertIn('Cache-Control', response) | ||||
|         self.assertIn('Expires', response) | ||||
|  | ||||
|     def test_per_thread(self): | ||||
|         """The cache instance is different for each thread.""" | ||||
|         thread_caches = [] | ||||
|         middleware = CacheMiddleware(empty_response) | ||||
|  | ||||
|         def runner(): | ||||
|             thread_caches.append(middleware.cache) | ||||
|  | ||||
|         for _ in range(2): | ||||
|             thread = threading.Thread(target=runner) | ||||
|             thread.start() | ||||
|             thread.join() | ||||
|  | ||||
|         self.assertIsNot(thread_caches[0], thread_caches[1]) | ||||
|  | ||||
|  | ||||
| @override_settings( | ||||
|     CACHE_MIDDLEWARE_KEY_PREFIX='settingsprefix', | ||||
|   | ||||
		Reference in New Issue
	
	Block a user