]> source.dussan.org Git - nextcloud-server.git/commitdiff
cache versioning enabled status 29391/head
authorRobin Appelman <robin@icewind.nl>
Tue, 19 Oct 2021 13:03:22 +0000 (15:03 +0200)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Fri, 22 Oct 2021 12:34:31 +0000 (12:34 +0000)
Signed-off-by: Robin Appelman <robin@icewind.nl>
apps/files_external/lib/Lib/Storage/AmazonS3.php

index cb5fe134e6f2f78ab99b31bc2a74a10f398596ca..827fd63d1d65549b7ee66bdaa0eae00982c1319f 100644 (file)
@@ -51,6 +51,8 @@ use OC\Files\ObjectStore\S3ObjectTrait;
 use OCP\Constants;
 use OCP\Files\FileInfo;
 use OCP\Files\IMimeTypeDetector;
+use OCP\ICacheFactory;
+use OCP\IMemcache;
 
 class AmazonS3 extends \OC\Files\Storage\Common {
        use S3ConnectionTrait;
@@ -75,6 +77,9 @@ class AmazonS3 extends \OC\Files\Storage\Common {
        /** @var bool|null */
        private $versioningEnabled = null;
 
+       /** @var IMemcache */
+       private $memCache;
+
        public function __construct($parameters) {
                parent::__construct($parameters);
                $this->parseParams($parameters);
@@ -82,6 +87,9 @@ class AmazonS3 extends \OC\Files\Storage\Common {
                $this->directoryCache = new CappedMemoryCache();
                $this->filesCache = new CappedMemoryCache();
                $this->mimeDetector = \OC::$server->get(IMimeTypeDetector::class);
+               /** @var ICacheFactory $cacheFactory */
+               $cacheFactory = \OC::$server->get(ICacheFactory::class);
+               $this->memCache = $cacheFactory->createLocal('s3-external');
        }
 
        /**
@@ -721,8 +729,14 @@ class AmazonS3 extends \OC\Files\Storage\Common {
 
        public function versioningEnabled(): bool {
                if ($this->versioningEnabled === null) {
-                       $result = $this->getConnection()->getBucketVersioning(['Bucket' => $this->getBucket()]);
-                       $this->versioningEnabled = $result->get('Status') === 'Enabled';
+                       $cached = $this->memCache->get('versioning-enabled::' . $this->getBucket());
+                       if ($cached === null) {
+                               $result = $this->getConnection()->getBucketVersioning(['Bucket' => $this->getBucket()]);
+                               $this->versioningEnabled = $result->get('Status') === 'Enabled';
+                               $this->memCache->set('versioning-enabled::' . $this->getBucket(), $this->versioningEnabled, 60);
+                       } else {
+                               $this->versioningEnabled = $cached;
+                       }
                }
                return $this->versioningEnabled;
        }