diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2023-11-15 22:40:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-15 22:40:40 +0100 |
commit | 337445746dcb026fbe8a9ce8cc626f5ff56b89eb (patch) | |
tree | 623d4334421b8b83b859478210d31dab70b1aa09 | |
parent | a2c8a0b29c6d232a7aade6e606362f323252398f (diff) | |
parent | f81aa8041dc22528be7d3022be39512610a8f8dc (diff) | |
download | nextcloud-server-337445746dcb026fbe8a9ce8cc626f5ff56b89eb.tar.gz nextcloud-server-337445746dcb026fbe8a9ce8cc626f5ff56b89eb.zip |
Merge pull request #41371 from nextcloud/backport/41354/stable27
[stable27] fix: Validate that we have a proper distributed cache configured
-rw-r--r-- | apps/dav/lib/Upload/ChunkingV2Plugin.php | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/apps/dav/lib/Upload/ChunkingV2Plugin.php b/apps/dav/lib/Upload/ChunkingV2Plugin.php index 97ae51fbe38..29017155d45 100644 --- a/apps/dav/lib/Upload/ChunkingV2Plugin.php +++ b/apps/dav/lib/Upload/ChunkingV2Plugin.php @@ -30,6 +30,8 @@ use InvalidArgumentException; use OC\Files\Filesystem; use OC\Files\ObjectStore\ObjectStoreStorage; use OC\Files\View; +use OC\Memcache\Memcached; +use OC\Memcache\Redis; use OC_Hook; use OCA\DAV\Connector\Sabre\Directory; use OCA\DAV\Connector\Sabre\File; @@ -40,6 +42,7 @@ use OCP\Files\Storage\IChunkedFileWrite; use OCP\Files\StorageInvalidException; use OCP\ICache; use OCP\ICacheFactory; +use OCP\IConfig; use OCP\Lock\ILockingProvider; use Sabre\DAV\Exception\BadRequest; use Sabre\DAV\Exception\InsufficientStorage; @@ -272,6 +275,11 @@ class ChunkingV2Plugin extends ServerPlugin { * @throws StorageInvalidException */ private function checkPrerequisites(bool $checkUploadMetadata = true): void { + $distributedCacheConfig = \OCP\Server::get(IConfig::class)->getSystemValue('memcache.distributed', null); + + if ($distributedCacheConfig === null || (!$this->cache instanceof Redis && !$this->cache instanceof Memcached)) { + throw new BadRequest('Skipping chunking v2 since no proper distributed cache is available'); + } if (!$this->uploadFolder instanceof UploadFolder || empty($this->server->httpRequest->getHeader(self::DESTINATION_HEADER))) { throw new BadRequest('Skipping chunked file writing as the destination header was not passed'); } @@ -284,7 +292,7 @@ class ChunkingV2Plugin extends ServerPlugin { if ($checkUploadMetadata) { if ($this->uploadId === null || $this->uploadPath === null) { - throw new PreconditionFailed('Missing metadata for chunked upload'); + throw new PreconditionFailed('Missing metadata for chunked upload. The distributed cache does not hold the information of previous requests.'); } } } |