Merge pull request #1936 from pbiering/improve-mtime-size-cache

Improve mtime size cache for get request
This commit is contained in:
Peter Bieringer
2025-12-10 21:20:59 +01:00
committed by GitHub
2 changed files with 22 additions and 2 deletions

View File

@@ -8,6 +8,7 @@
* Extend: [logging] with profiling log per reqest or regular per request method
* New: [logging] option to log response header on debug loglevel
* Adjust: [logging] header/content debug log indended by space to be skipped by logwatch
* Improve: remove unnecessary open+read for mtime+size cache
## 3.5.9
* Extend: [auth] add support for type http_remote_user

View File

@@ -68,8 +68,21 @@ class CollectionPartGet(CollectionPartCache, CollectionPartLock,
else:
path = os.path.join(self._filesystem_path, href)
try:
with open(path, "rb") as f:
raw_text = f.read()
if self._storage._use_mtime_and_size_for_item_cache is True:
# try to avoid "open"
if not os.path.isfile(path):
if not os.path.exists(path):
raise FileNotFoundError(path)
if os.path.isdir(path):
raise IsADirectoryError(path)
if not os.access(path, os.R_OK):
raise PermissionError(path)
else:
with open(path, "rb") as f:
# early read of the content
if self._storage._debug_cache_actions is True:
logger.debug("Item cache early read: %r", path)
raw_text = f.read()
except (FileNotFoundError, IsADirectoryError):
return None
except PermissionError:
@@ -100,6 +113,12 @@ class CollectionPartGet(CollectionPartCache, CollectionPartLock,
# Check if another process created the file in the meantime
cache_content = self._load_item_cache(href, cache_hash)
if cache_content is None:
if self._storage._use_mtime_and_size_for_item_cache is True:
# delayed read of the content
if self._storage._debug_cache_actions is True:
logger.debug("Item cache late read : %r", path)
with open(path, "rb") as f:
raw_text = f.read()
try:
vobject_items = radicale_item.read_components(
raw_text.decode(self._encoding))