Closed thatch closed 5 days ago
- Stop using bespoke
mkstemp
that has a race, useos.replace
. Pro: less code, file isn't missing during the set, Con: commit history doesn't make it obvious why this exists, seems defensive against problems in world-writable cache dirs or maybe a windows issue?
This seems like a clean approach to me. I don't have any additional insight to add on why we don't already use os.replace
, except that it might be because os.replace
wasn't added until 3.3 and the older os.rename
doesn't have the same consistent POSIX-esque semantics on Windows (whereas os.replace
does).
I don't have a test case or suggested fix (yet), but documenting that this exists:
FileCache
with no modifications._cache_set
and the second one can find no body (returning a response with empty body because_secure_open_write
deletes before creating).Potential ideas:
.get(locked=True)
. Pro: simple, targeted change that only affects the rare case, Con: api change, deletion can still raceSeparateBodyFileCache
)mkstemp
that has a race, useos.replace
. Pro: less code, file isn't missing during the set, Con: commit history doesn't make it obvious why this exists, seems defensive against problems in world-writable cache dirs or maybe a windows issue?