diff options
author | Robin Appelman <robin@icewind.nl> | 2019-11-06 12:05:46 +0100 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2019-11-26 12:05:30 +0100 |
commit | 74c6beb603f18d51d92730bb631bfe77d8feb400 (patch) | |
tree | d2c614c737aef1eb5daef05beb108aafa136f00b /lib | |
parent | 9e450d727a2374c218cdd62c1c97b5ad7ebf48a8 (diff) | |
download | nextcloud-server-74c6beb603f18d51d92730bb631bfe77d8feb400.tar.gz nextcloud-server-74c6beb603f18d51d92730bb631bfe77d8feb400.zip |
dont set folder size to negative values during propagation
normally this shouldn't be a problem, but cache/storage desync might cause this
so this adds some failsafe to ensure we dont corrupt the cache further
the minimum value is set to -1 instead of 0 in order to triger a background scan
on the folder and figure out the size properly
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Files/Cache/Propagator.php | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/private/Files/Cache/Propagator.php b/lib/private/Files/Cache/Propagator.php index 989a4d0c7d5..41b4c2bb070 100644 --- a/lib/private/Files/Cache/Propagator.php +++ b/lib/private/Files/Cache/Propagator.php @@ -91,7 +91,7 @@ class Propagator implements IPropagator { }, $parentHashes); $builder->update('filecache') - ->set('mtime', $builder->createFunction('GREATEST(' . $builder->getColumnName('mtime') . ', ' . $builder->createNamedParameter((int)$time, IQueryBuilder::PARAM_INT) . ')')) + ->set('mtime', $builder->func()->greatest('mtime', $builder->createNamedParameter((int)$time, IQueryBuilder::PARAM_INT))) ->set('etag', $builder->createNamedParameter($etag, IQueryBuilder::PARAM_STR)) ->where($builder->expr()->eq('storage', $builder->createNamedParameter($storageId, IQueryBuilder::PARAM_INT))) ->andWhere($builder->expr()->in('path_hash', $hashParams)); @@ -102,7 +102,10 @@ class Propagator implements IPropagator { // we need to do size separably so we can ignore entries with uncalculated size $builder = $this->connection->getQueryBuilder(); $builder->update('filecache') - ->set('size', $builder->func()->add('size', $builder->createNamedParameter($sizeDifference))) + ->set('size', $builder->func()->greatest( + $builder->createNamedParameter(-1, IQueryBuilder::PARAM_INT), + $builder->func()->add('size', $builder->createNamedParameter($sizeDifference))) + ) ->where($builder->expr()->eq('storage', $builder->createNamedParameter($storageId, IQueryBuilder::PARAM_INT))) ->andWhere($builder->expr()->in('path_hash', $hashParams)) ->andWhere($builder->expr()->gt('size', $builder->expr()->literal(-1, IQueryBuilder::PARAM_INT))); |