*: use cache.delete_pattern instead of getting keys and deleting them
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		| @ -19,8 +19,7 @@ def migrate_sessions(apps: Apps, schema_editor: BaseDatabaseSchemaEditor): | ||||
|     from django.contrib.sessions.backends.cache import KEY_PREFIX | ||||
|     from django.core.cache import cache | ||||
|  | ||||
|     session_keys = cache.keys(KEY_PREFIX + "*") | ||||
|     cache.delete_many(session_keys) | ||||
|     cache.delete_pattern(KEY_PREFIX + "*") | ||||
|  | ||||
|  | ||||
| def fix_duplicates(apps: Apps, schema_editor: BaseDatabaseSchemaEditor): | ||||
|  | ||||
| @ -16,8 +16,7 @@ def migrate_sessions(apps: Apps, schema_editor: BaseDatabaseSchemaEditor): | ||||
|     from django.contrib.sessions.backends.cache import KEY_PREFIX | ||||
|     from django.core.cache import cache | ||||
|  | ||||
|     session_keys = cache.keys(KEY_PREFIX + "*") | ||||
|     cache.delete_many(session_keys) | ||||
|     cache.delete_pattern(KEY_PREFIX + "*") | ||||
|  | ||||
|  | ||||
| class Migration(migrations.Migration): | ||||
|  | ||||
| @ -37,8 +37,7 @@ def post_save_application(sender: type[Model], instance, created: bool, **_): | ||||
|     if not created:  # pragma: no cover | ||||
|         return | ||||
|     # Also delete user application cache | ||||
|     keys = cache.keys(user_app_cache_key("*")) | ||||
|     cache.delete_many(keys) | ||||
|     cache.delete_pattern(user_app_cache_key("*")) | ||||
|  | ||||
|  | ||||
| @receiver(user_logged_in) | ||||
|  | ||||
| @ -130,9 +130,8 @@ class FlowViewSet(UsedByMixin, ModelViewSet): | ||||
|     @action(detail=False, methods=["POST"]) | ||||
|     def cache_clear(self, request: Request) -> Response: | ||||
|         """Clear flow cache""" | ||||
|         keys = cache.keys("flow_*") | ||||
|         cache.delete_many(keys) | ||||
|         LOGGER.debug("Cleared flow cache", keys=len(keys)) | ||||
|         count = cache.delete_pattern("flow_*") | ||||
|         LOGGER.debug("Cleared flow cache", keys=count) | ||||
|         return Response(status=204) | ||||
|  | ||||
|     @permission_required( | ||||
|  | ||||
| @ -7,13 +7,6 @@ from structlog.stdlib import get_logger | ||||
| LOGGER = get_logger() | ||||
|  | ||||
|  | ||||
| def delete_cache_prefix(prefix: str) -> int: | ||||
|     """Delete keys prefixed with `prefix` and return count of deleted keys.""" | ||||
|     keys = cache.keys(prefix) | ||||
|     cache.delete_many(keys) | ||||
|     return len(keys) | ||||
|  | ||||
|  | ||||
| @receiver(post_save) | ||||
| @receiver(pre_delete) | ||||
| # pylint: disable=unused-argument | ||||
| @ -23,14 +16,14 @@ def invalidate_flow_cache(sender, instance, **_): | ||||
|     from authentik.flows.planner import cache_key | ||||
|  | ||||
|     if isinstance(instance, Flow): | ||||
|         total = delete_cache_prefix(f"{cache_key(instance)}*") | ||||
|         total = cache.delete_pattern(f"{cache_key(instance)}*") | ||||
|         LOGGER.debug("Invalidating Flow cache", flow=instance, len=total) | ||||
|     if isinstance(instance, FlowStageBinding): | ||||
|         total = delete_cache_prefix(f"{cache_key(instance.target)}*") | ||||
|         total = cache.delete_pattern(f"{cache_key(instance.target)}*") | ||||
|         LOGGER.debug("Invalidating Flow cache from FlowStageBinding", binding=instance, len=total) | ||||
|     if isinstance(instance, Stage): | ||||
|         total = 0 | ||||
|         for binding in FlowStageBinding.objects.filter(stage=instance): | ||||
|             prefix = cache_key(binding.target) | ||||
|             total += delete_cache_prefix(f"{prefix}*") | ||||
|             total += cache.delete_pattern(f"{prefix}*") | ||||
|         LOGGER.debug("Invalidating Flow cache from Stage", stage=instance, len=total) | ||||
|  | ||||
| @ -198,8 +198,7 @@ class FlowExecutorView(APIView): | ||||
|             next_binding = self.plan.next(self.request) | ||||
|         except Exception as exc:  # pylint: disable=broad-except | ||||
|             self._logger.warning("f(exec): found incompatible flow plan, invalidating run", exc=exc) | ||||
|             keys = cache.keys("flow_*") | ||||
|             cache.delete_many(keys) | ||||
|             cache.delete_pattern("flow_*") | ||||
|             return self.stage_invalid() | ||||
|         if not next_binding: | ||||
|             self._logger.debug("f(exec): no more stages, flow is done.") | ||||
| @ -317,8 +316,7 @@ class FlowExecutorView(APIView): | ||||
|             # from the cache. If there are errors, just delete all cached flows | ||||
|             _ = plan.has_stages | ||||
|         except Exception:  # pylint: disable=broad-except | ||||
|             keys = cache.keys("flow_*") | ||||
|             cache.delete_many(keys) | ||||
|             cache.delete_pattern("flow_*") | ||||
|             return self._initiate_plan() | ||||
|         return plan | ||||
|  | ||||
|  | ||||
| @ -128,12 +128,10 @@ class PolicyViewSet( | ||||
|     @action(detail=False, methods=["POST"]) | ||||
|     def cache_clear(self, request: Request) -> Response: | ||||
|         """Clear policy cache""" | ||||
|         keys = cache.keys("policy_*") | ||||
|         cache.delete_many(keys) | ||||
|         LOGGER.debug("Cleared Policy cache", keys=len(keys)) | ||||
|         count = cache.delete_pattern("policy_*") | ||||
|         LOGGER.debug("Cleared Policy cache", keys=count) | ||||
|         # Also delete user application cache | ||||
|         keys = cache.keys(user_app_cache_key("*")) | ||||
|         cache.delete_many(keys) | ||||
|         cache.delete_pattern(user_app_cache_key("*")) | ||||
|         return Response(status=204) | ||||
|  | ||||
|     @permission_required("authentik_policies.view_policy") | ||||
|  | ||||
| @ -19,10 +19,7 @@ def invalidate_policy_cache(sender, instance, **_): | ||||
|         total = 0 | ||||
|         for binding in PolicyBinding.objects.filter(policy=instance): | ||||
|             prefix = f"policy_{binding.policy_binding_uuid.hex}_{binding.policy.pk.hex}*" | ||||
|             keys = cache.keys(prefix) | ||||
|             total += len(keys) | ||||
|             cache.delete_many(keys) | ||||
|             total += cache.delete_pattern(prefix) | ||||
|         LOGGER.debug("Invalidating policy cache", policy=instance, keys=total) | ||||
|     # Also delete user application cache | ||||
|     keys = cache.keys(user_app_cache_key("*")) or [] | ||||
|     cache.delete_many(keys) | ||||
|     cache.delete_pattern(user_app_cache_key("*")) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Jens Langhammer
					Jens Langhammer