diff options
author | Julius Härtl <jus@bitgrid.net> | 2023-11-09 11:08:11 +0100 |
---|---|---|
committer | backportbot-nextcloud[bot] <backportbot-nextcloud[bot]@users.noreply.github.com> | 2023-11-10 08:32:23 +0000 |
commit | f81aa8041dc22528be7d3022be39512610a8f8dc (patch) | |
tree | e84893f25a8c7b25331477b5bc3e0433aa385f16 | |
parent | 4ffee4f92b957d81e96261d9a4707bdba0c905fd (diff) | |
download | nextcloud-server-f81aa8041dc22528be7d3022be39512610a8f8dc.tar.gz nextcloud-server-f81aa8041dc22528be7d3022be39512610a8f8dc.zip |
fix: Validate that we have a proper distributed cache configured
Signed-off-by: Julius Härtl <jus@bitgrid.net>
-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.'); } } } |