aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Files
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2024-03-16 21:18:44 +0100
committerFerdinand Thiessen <opensource@fthiessen.de>2024-03-21 16:25:49 +0100
commit32dee2f84a4931d4ed4544a68e95287948ee5db2 (patch)
tree4c677d9629d90cb67951ff3c8c3732d52dfa2789 /lib/private/Files
parent69c5e8ebde761806883441daa693a491664eabc8 (diff)
downloadnextcloud-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.php3
-rw-r--r--lib/private/Files/ObjectStore/S3ConnectionTrait.php8
-rw-r--r--lib/private/Files/ObjectStore/S3ObjectTrait.php1
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' => [