summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2016-05-18 13:49:21 +0200
committerVincent Petry <pvince81@owncloud.com>2016-05-18 13:57:26 +0200
commit9bd8bffc0c2343798d00219157834a8f7ce69812 (patch)
tree375607bb89ceae6fac9a4223355f630ece6121fe
parent1450cb2c82e0ef9fe51bcfcaa3cb8a8b5408a621 (diff)
downloadnextcloud-server-9bd8bffc0c2343798d00219157834a8f7ce69812.tar.gz
nextcloud-server-9bd8bffc0c2343798d00219157834a8f7ce69812.zip
Allow chunk GC mtime tolerance for unfinished part chunks
Whenever part chunks are written, every fwrite in the write loop will reset the mtime to the current mtime. Only at the end will the touch() operation set the mtime to now + ttl, in the future. However the GC code is expecting that every chunk with mtime < now are old and must be deleted. This causes the GC to sometimes delete part chunks in which the write loop is slow. To fix this, a tolerance value is added in the GC code to allow for more time before a part chunk gets deleted.
-rw-r--r--lib/private/cache/file.php4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/private/cache/file.php b/lib/private/cache/file.php
index 1cda05f28e5..89742afc05e 100644
--- a/lib/private/cache/file.php
+++ b/lib/private/cache/file.php
@@ -170,7 +170,9 @@ class File implements ICache {
public function gc() {
$storage = $this->getStorage();
if ($storage and $storage->is_dir('/')) {
- $now = time();
+ // extra hour safety, in case of stray part chunks that take longer to write,
+ // because touch() is only called after the chunk was finished
+ $now = time() - 3600;
$dh = $storage->opendir('/');
if (!is_resource($dh)) {
return null;