Opened 7 years ago
Closed 7 years ago
#28500 closed Bug (fixed)
"EOFError: Ran out of input" from Django file cache when file is empty
Reported by: | Justin Crown | Owned by: | caleb logan |
---|---|---|---|
Component: | Core (Cache system) | Version: | 1.11 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
When using Django file cache, if a cache file ends up empty for some reason (yes, this actually happened in the wild), an EOFError
is thrown.
Steps to reproduce:
Cache must be set to django.core.cache.backends.filebased.FileBasedCache
.
>>> from django.core.cache import cache >>> cache.set('testing' 'test')
In a shell
> cache_dir/file_that_got_created.djcache
Back in the REPL
>>> cache.get('testing') Traceback (most recent call last): File "/usr/local/lib/python3.6/code.py", line 91, in runcode exec(code, self.locals) File "<console>", line 1, in <module> File "/usr/local/lib/python3.6/site-packages/django/core/cache/backends/filebased.py", line 40, in get if not self._is_expired(f): File "/usr/local/lib/python3.6/site-packages/django/core/cache/backends/filebased.py", line 137, in _is_expired exp = pickle.load(f) EOFError: Ran out of input
As to how these files would end up empty to begin with, I would hazard to guess that it is caused by a rare race condition in the file moving process:
https://github.com/django/django/blob/master/django/core/files/move.py#L59
Whereby if this process is interrupted by a system shutdown, the file is created in the appropriate location but is empty.
Desired behavior would be that in this situation, an exception would not be thrown. Rather, None
(or default) would be returned.
I am planning on working on a patch towards this, but wanted to log the ticket first.
Change History (3)
comment:1 by , 7 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:2 by , 7 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:3 by , 7 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
In 68f0e8d8: