From dc4f59c4ec66f6a2316d1f453687e317761c4727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Thu, 2 Sep 2021 20:43:08 +0200 Subject: [PATCH] Pass size difference for mkdir/file_put_content operations to speed up correcting the folder size MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/private/Files/View.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php index 986aecf556f78..c4ec485ca295d 100644 --- a/lib/private/Files/View.php +++ b/lib/private/Files/View.php @@ -51,7 +51,6 @@ use OC\Files\Storage\Storage; use OC\User\LazyUser; use OC\Share\Share; -use OC\User\User; use OCA\Files_Sharing\SharedMount; use OCP\Constants; use OCP\Files\Cache\ICacheEntry; @@ -316,12 +315,12 @@ public function enableCacheUpdate() { $this->updaterEnabled = true; } - protected function writeUpdate(Storage $storage, $internalPath, $time = null) { + protected function writeUpdate(Storage $storage, $internalPath, $time = null, $size = null) { if ($this->updaterEnabled) { if (is_null($time)) { $time = time(); } - $storage->getUpdater()->update($internalPath, $time); + $storage->getUpdater()->update($internalPath, $time, $size); } } @@ -1175,6 +1174,7 @@ private function basicOperation($operation, $path, $hooks = [], $extraParam = nu $this->unlockFile($path, ILockingProvider::LOCK_SHARED); throw $e; } + $previousSize = $storage->filesize($internalPath); } try { if (!is_null($extraParam)) { @@ -1195,7 +1195,13 @@ private function basicOperation($operation, $path, $hooks = [], $extraParam = nu $this->removeUpdate($storage, $internalPath); } if ($result && in_array('write', $hooks, true) && $operation !== 'fopen' && $operation !== 'touch') { - $this->writeUpdate($storage, $internalPath); + $size = null; + if ($operation === 'mkdir') { + $size = 0; + } elseif ($operation === 'file_put_contents' && isset($previousSize)) { + $size = $result - $previousSize; + } + $this->writeUpdate($storage, $internalPath, null, $size); } if ($result && in_array('touch', $hooks)) { $this->writeUpdate($storage, $internalPath, $extraParam);