Incorrect Exception when retrieving a Datastore backed session
Created by: sleepyjames
I'm seeing regular occurrences of this exception (a couple per day) on a GAE production app using Datastore backed sessions. Unable to re-create locally.
The traceback shows the query causing this is triggered by the SessionStore's load method , but this clearly is not attempting to perform a multiple inequality filter eg:
s = Session.objects.get(
session_key=self.session_key,
expire_date__gt=timezone.now()
)
Original traceback:
Internal Server Error: /xxx
Traceback (most recent call last):
File "/base/data/home/apps/xxx/third_party/django/core/handlers/base.py", line 108, in get_response
response = middleware_method(request)
File "/base/data/home/apps/xxx/third_party/djangae/contrib/gauth/middleware.py", line 11, in process_request
django_user = get_user(request)
File "/base/data/home/apps/xxx/third_party/django/contrib/auth/__init__.py", line 167, in get_user
user_id = _get_user_session_key(request)
File "/base/data/home/apps/xxx/third_party/django/contrib/auth/__init__.py", line 59, in _get_user_session_key
return get_user_model()._meta.pk.to_python(request.session[SESSION_KEY])
File "/base/data/home/apps/xxx/third_party/django/contrib/sessions/backends/base.py", line 48, in __getitem__
return self._session[key]
File "/base/data/home/apps/xxx/third_party/django/contrib/sessions/backends/base.py", line 181, in _get_session
self._session_cache = self.load()
File "/base/data/home/apps/xxx/third_party/django/contrib/sessions/backends/db.py", line 21, in load
expire_date__gt=timezone.now()
File "/base/data/home/apps/xxx/third_party/django/db/models/manager.py", line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/base/data/home/apps/xxx/third_party/django/db/models/query.py", line 328, in get
num = len(clone)
File "/base/data/home/apps/xxx/third_party/django/db/models/query.py", line 144, in __len__
self._fetch_all()
File "/base/data/home/apps/xxx/third_party/django/db/models/query.py", line 965, in _fetch_all
self._result_cache = list(self.iterator())
File "/base/data/home/apps/xxx/third_party/django/db/models/query.py", line 238, in iterator
results = compiler.execute_sql()
File "/base/data/home/apps/xxx/third_party/django/db/models/sql/compiler.py", line 829, in execute_sql
sql, params = self.as_sql()
File "/base/data/home/apps/xxx/third_party/djangae/db/backends/appengine/compiler.py", line 20, in as_sql
self.query
File "/base/data/home/apps/xxx/third_party/djangae/db/backends/appengine/commands.py", line 393, in __init__
self.query.prepare()
File "/base/data/home/apps/xxx/third_party/djangae/db/backends/appengine/query.py", line 369, in prepare
self._check_only_single_inequality_filter()
File "/base/data/home/apps/xxx/third_party/djangae/db/backends/appengine/query.py", line 501, in _check_only_single_inequality_filter
walk(self._where, False)
File "/base/data/home/apps/xxx/third_party/djangae/db/backends/appengine/query.py", line 492, in walk
walk(child, negated)
File "/base/data/home/apps/xxx/third_party/djangae/db/backends/appengine/query.py", line 497, in walk
"Filters were: %s" % ' '.join(inequality_fields)
NotSupportedError: You can only have one inequality filter per query on the datastore. Filters were: __key__ expire_date