diff options
author | Julius Knorr <jus@bitgrid.net> | 2025-04-08 09:17:35 +0200 |
---|---|---|
committer | Julius Knorr <jus@bitgrid.net> | 2025-04-08 09:17:35 +0200 |
commit | 7ff80cc0168437a8b683344c5425e1213b0d8b23 (patch) | |
tree | 847f7d6ae1341a1cfe1ad6cd4fc739812ed394bd /lib | |
parent | 7fa3f89ef93110efbd3af344c218fc279fcffe30 (diff) | |
download | nextcloud-server-fix/cache-hit-getFirstNodeById.tar.gz nextcloud-server-fix/cache-hit-getFirstNodeById.zip |
fix: Catch old cached paths and fetch the new onefix/cache-hit-getFirstNodeById
Signed-off-by: Julius Knorr <jus@bitgrid.net>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Files/Node/Root.php | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/private/Files/Node/Root.php b/lib/private/Files/Node/Root.php index 18062eab6f0..d82ec08f362 100644 --- a/lib/private/Files/Node/Root.php +++ b/lib/private/Files/Node/Root.php @@ -386,11 +386,15 @@ class Root extends Folder implements IRootFolder { $cachedPath = $this->pathByIdCache->get($this->user->getUID() . '::' . $id); if ($cachedPath && str_starts_with($cachedPath, $path)) { // getting the node by path is significantly cheaper than finding it by id - $node = $this->get($cachedPath); - // by validating that the cached path still has the requested fileid we can work around the need to invalidate the cached path - // if the cached path is invalid or a different file now we fall back to the uncached logic - if ($node && $node->getId() === $id) { - return $node; + try { + $node = $this->get($cachedPath); + // by validating that the cached path still has the requested fileid we can work around the need to invalidate the cached path + // if the cached path is invalid or a different file now we fall back to the uncached logic + if ($node && $node->getId() === $id) { + return $node; + } + } catch (NotFoundException|NotPermittedException) { + // The file may be moved but the old path still in cache } } } |