diff options
author | Ferdinand Thiessen <opensource@fthiessen.de> | 2024-03-16 21:18:44 +0100 |
---|---|---|
committer | Ferdinand Thiessen <opensource@fthiessen.de> | 2024-03-21 16:25:49 +0100 |
commit | 32dee2f84a4931d4ed4544a68e95287948ee5db2 (patch) | |
tree | 4c677d9629d90cb67951ff3c8c3732d52dfa2789 /lib/private/Files | |
parent | 69c5e8ebde761806883441daa693a491664eabc8 (diff) | |
download | nextcloud-server-32dee2f84a4931d4ed4544a68e95287948ee5db2.tar.gz nextcloud-server-32dee2f84a4931d4ed4544a68e95287948ee5db2.zip |
feat(ObjectStore): Make S3 MultipartUpload concurrency configurable
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Diffstat (limited to 'lib/private/Files')
-rw-r--r-- | lib/private/Files/ObjectStore/S3ConfigTrait.php | 3 | ||||
-rw-r--r-- | lib/private/Files/ObjectStore/S3ConnectionTrait.php | 8 | ||||
-rw-r--r-- | lib/private/Files/ObjectStore/S3ObjectTrait.php | 1 |
3 files changed, 9 insertions, 3 deletions
diff --git a/lib/private/Files/ObjectStore/S3ConfigTrait.php b/lib/private/Files/ObjectStore/S3ConfigTrait.php index b73cb7e484d..7f204507c22 100644 --- a/lib/private/Files/ObjectStore/S3ConfigTrait.php +++ b/lib/private/Files/ObjectStore/S3ConfigTrait.php @@ -34,6 +34,9 @@ trait S3ConfigTrait { protected string $bucket; + /** Maximum number of concurrent multipart uploads */ + protected int $concurrency; + protected int $timeout; protected string $proxy; diff --git a/lib/private/Files/ObjectStore/S3ConnectionTrait.php b/lib/private/Files/ObjectStore/S3ConnectionTrait.php index 2720902fa85..131014240f3 100644 --- a/lib/private/Files/ObjectStore/S3ConnectionTrait.php +++ b/lib/private/Files/ObjectStore/S3ConnectionTrait.php @@ -48,10 +48,10 @@ trait S3ConnectionTrait { protected string $id; - protected ?S3Client $connection; - protected bool $test; + protected ?S3Client $connection = null; + protected function parseParams($params) { if (empty($params['bucket'])) { throw new \Exception("Bucket has to be configured."); @@ -61,6 +61,8 @@ trait S3ConnectionTrait { $this->test = isset($params['test']); $this->bucket = $params['bucket']; + // Default to 5 like the S3 SDK does + $this->concurrency = $params['concurrency'] ?? 5; $this->proxy = $params['proxy'] ?? false; $this->timeout = $params['timeout'] ?? 15; $this->storageClass = !empty($params['storageClass']) ? $params['storageClass'] : 'STANDARD'; @@ -92,7 +94,7 @@ trait S3ConnectionTrait { * @throws \Exception if connection could not be made */ public function getConnection() { - if (!is_null($this->connection)) { + if ($this->connection !== null) { return $this->connection; } diff --git a/lib/private/Files/ObjectStore/S3ObjectTrait.php b/lib/private/Files/ObjectStore/S3ObjectTrait.php index 3019805389d..e0a94df1d99 100644 --- a/lib/private/Files/ObjectStore/S3ObjectTrait.php +++ b/lib/private/Files/ObjectStore/S3ObjectTrait.php @@ -129,6 +129,7 @@ trait S3ObjectTrait { protected function writeMultiPart(string $urn, StreamInterface $stream, string $mimetype = null): void { $uploader = new MultipartUploader($this->getConnection(), $stream, [ 'bucket' => $this->bucket, + 'concurrency' => $this->concurrency, 'key' => $urn, 'part_size' => $this->uploadPartSize, 'params' => [ |