Opened 8 years ago
Closed 8 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 , 8 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:2 by , 8 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:3 by , 8 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
In 68f0e8d8: