Skip to content

Commit 283d376

Browse files
authored
Merge pull request #47 from cloudblue/bugfix/LITE-22733
LITE-22733 Added lock for cache update in RQLFilterBackend
2 parents 00f5703 + 9c55539 commit 283d376

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

dj_rql/drf/backend.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
#
2-
# Copyright © 2021 Ingram Micro Inc. All rights reserved.
2+
# Copyright © 2022 Ingram Micro Inc. All rights reserved.
33
#
4+
from threading import Lock
45

56
from dj_rql.drf._utils import get_query
67

78
from rest_framework.filters import BaseFilterBackend
89

910

11+
lock = Lock()
12+
13+
1014
class _FilterClassCache:
1115
CACHE = {}
1216

@@ -46,10 +50,12 @@ def filter_queryset(self, request, queryset, view):
4650
cache_key = str(queryset.query) + query
4751

4852
query_cache = self._get_or_init_cache(filter_class, view)
49-
filters_result = query_cache.get(cache_key)
50-
if not filters_result:
53+
try:
54+
filters_result = query_cache[cache_key]
55+
except KeyError:
5156
filters_result = filter_instance.apply_filters(query, request, view)
52-
query_cache[cache_key] = filters_result
57+
with lock:
58+
query_cache[cache_key] = filters_result
5359

5460
else:
5561
filters_result = filter_instance.apply_filters(query, request, view)

requirements/dev.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
lib-rql
1+
lib-rql>=1.1.1
22
Django>=2.2.19

0 commit comments

Comments
 (0)