Commit graph

297 commits

Author SHA1 Message Date
Robin Appelman
15fc5dfa26 feat: don't gate perBucket object store configuration behind multibucket
a setup can have multiple bucket without having `multibucket` enabled trough things like per-groupfolder buckets

Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-05 15:49:58 +00:00
provokateurin
70206adcd8 feat(ObjectStore): Allow overriding arguments per bucket
Signed-off-by: provokateurin <kate@provokateurin.de>
2025-12-01 16:44:29 +00:00
provokateurin
9e0389058d
feat(CertificateManager): Add option to specify the default certificates bundle path
Signed-off-by: provokateurin <kate@provokateurin.de>
2025-12-01 11:59:50 +01:00
Robin Appelman
5cda1696d1 fix: ensure all object store configuration have distict bucket names
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-11-30 21:54:48 +01:00
Robin Appelman
349ca3056c fix: make bucket mapper work with new multi-object-store config
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-11-30 21:54:48 +01:00
Robin Appelman
58fe27aa5b feat: allow object store configuration aliases for easier migrations
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-11-30 21:54:48 +01:00
Robin Appelman
204f261760 feat: add command to get user objectstore config mappings
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-11-30 21:54:48 +01:00
Robin Appelman
b0c79ab896 feat: allow configuring multiple objectstore configurations
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-11-30 21:54:48 +01:00
Kent Delante
c195531f93 feat: emit an event when an S3 bucket is created
Signed-off-by: Kent Delante <kent.delante@proton.me>
2025-11-26 09:59:49 +08:00
Louis Chmn
04ac405528 fix(S3): Only append streams if non-seekable
Later, when we rewind the stream in `writeMultiPart` during retry, both streams were rewinded, so the resulting stream was bigger than expected.

Inspired by https://github.com/aws/aws-sdk-php/blob/master/src/S3/ObjectUploader.php#L136-L146

Signed-off-by: Louis Chmn <louis@chmn.me>
2025-10-14 18:54:31 +02:00
Robin Appelman
bdd96f8124 feat: move primary object store configuration to a single place
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-09-30 10:38:13 +02:00
Kent Delante
e9aa004b9b fix(s3): retry failed multipart uploads with decreased concurrency
Signed-off-by: Kent Delante <kent.delante@proton.me>
2025-06-20 19:44:55 +08:00
Daniel Calviño Sánchez
5830546c1b fix(ObjectStore): Make S3 "connect_timeout" option configurable
The hardcoded connection timeout of 5 seconds may not be enough in some
cases, so now it is got from the ObjectStore arguments in Nextcloud
configuration, falling back to 5 if not set.

The connection timeout is set in seconds, but decimal precision can be
used for subsecond accuracy (for example, 4.2 for 4200 milliseconds).

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-06-18 11:02:22 +02:00
Robin Appelman
7eb607c8b9
perf: set the folder size in the same query as we create it
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-06-02 12:00:59 +02:00
Louis Chemineau
1c80a98720 fix(S3): Use original folder size during copy
This prevent having copied folders with a wrongly set size of 0KB.

- Fix https://github.com/nextcloud/server/issues/51916

Signed-off-by: Louis Chemineau <louis@chmn.me>
2025-06-02 09:56:15 +00:00
Kate
119727d74a
Merge pull request #52759 from nextcloud/backport/49352/stable30 2025-05-19 06:44:24 +02:00
Robin Appelman
86206e9bac fix: keep IObjectStoreMetaData in private namespace for backports
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-05-15 18:00:35 +02:00
Robin Appelman
9da4ebd650 feat: add command to list objects
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-05-15 14:13:06 +02:00
Robin Appelman
042934a99f feat: add command to get object metadata
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-05-15 14:13:06 +02:00
Robin Appelman
87a4bff4ee chore: cleanup leftover debug statement
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-05-12 11:59:53 +02:00
Robin Appelman
eade5703ba fix: get object size from stream where possible
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-05-12 11:59:47 +02:00
Robin Appelman
6632669157 fix: don't perform the extra buffering in s3 stream write when the stream size is known
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-05-12 11:58:34 +02:00
Robin Appelman
b1ad63666f fix: use php://temp instead of php://memory for multi-part upload buffer
this should reduce potential memory issues if the limit is set very high

Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-05-12 11:58:23 +02:00
Ferdinand Thiessen
832f79ac93
chore: apply code style
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-04-30 19:04:59 +02:00
Anna Larch
cae5c4f02b fix(objectstorage): add retry attempts to S3 connection
Signed-off-by: Anna Larch <anna@nextcloud.com>
2025-04-23 18:40:07 +00:00
Louis Chemineau
9bed21a8d7 fix: Transfer ownership with S3 as primary
When using S3 as primary storage, transferring ownership with the `--move` option fail with the following error:

`SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '8-45b963397aa40d4a0063e0d85e4fe7a1' for key 'fs_storage_path_hash'`

The `--move` option moves the entire home folder from one account to another.
The error means that the move failed because the destination folder already exist in `oc_filecache`.

- With S3 as primary storage, folders only exists as entries in `oc_filecache`.
- With S3 as primary storage, `moveFromStorage(...)` only moves the cache entry, as nothing needs to be moved on disk. This cache move does not delete potentially pre-existing destination folder.
- With Local storage, `moveFromStorage(...)` calls `rename(...)` which delete pre-existing folder.

- `transfer(...)`: 687a4d9ac7/apps/files/lib/Service/OwnershipTransferService.php (L112)
- `oneTimeUserSetup(...)`: 687a4d9ac7/lib/private/Files/SetupManager.php (L261-L262)
- `mkdir(...)`: 687a4d9ac7/lib/private/Files/ObjectStore/ObjectStoreStorage.php (L91-L135)
- `moveFromStorage(...)`: 687a4d9ac7/lib/private/Files/ObjectStore/ObjectStoreStorage.php (L635-L636)

Delete pre-existing folder in `moveFromStorage(...)`

Signed-off-by: Louis Chemineau <louis@chmn.me>
2025-04-16 16:18:42 +02:00
Andy Scherzinger
682c8e6a61
Merge pull request #50796 from nextcloud/backport/50781/stable30
[stable30] perf(files): faster query to fetch incomplete directories
2025-02-17 19:15:58 +01:00
Benjamin Gaussorgues
765b4921ff
perf(files): faster query to fetch incomplete directories
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2025-02-14 10:57:26 +01:00
Robin Appelman
da334737e4 fix: rework move into object store to better preserve fileids
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-02-13 17:31:51 +01:00
Robin Appelman
e85d5df5f0 fix: preserve fileid when moving from objectstore to non-objectstore
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-02-13 17:31:51 +01:00
Robin Appelman
9fd7dfd1c2 fix: ensure source folder is removed from cache when moving to objectstore
otherwise this causes confusion down the line as it's contents will be moved to the new cache

Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-02-13 17:31:51 +01:00
Richard Steinmetz
b081f3b7c4 fix(s3): treat empty sse_c_key as not set
Co-authored-by: Christian Becker <christian@dabecka.de>
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
2025-01-29 17:34:47 +00:00
Robin Appelman
3522819624
fix: throw correct exception type when we can't verify if an s3 bucket exists
Signed-off-by: Robin Appelman <robin@icewind.nl>
2024-11-26 18:49:56 +01:00
Kate
61f3a09dcd
Merge pull request #48233 from nextcloud/backport/48222/stable30 2024-09-20 23:02:25 +02:00
Kate
ae7241f6c8
Merge pull request #48221 from nextcloud/backport/30/fix_move_on_same_bucket 2024-09-20 10:06:14 +02:00
Robin Appelman
e8c8ab58f7 perf: reuse cache info we already have when moving to object store
Signed-off-by: Robin Appelman <robin@icewind.nl>
2024-09-20 07:50:23 +00:00
Christoph Fiehe
82be489f53 perf(ObjectStoreStorage): Improve (slow) move on same object bucket
This commit fixes the issue #47856. When you upload a file into a group folder and when you use a single S3 bucket as primary storage, the final move operation hangs for a long time. In the background, Nextcloud initiates a copy-delete sequence from the bucket into the bucket, with causes a lot unnecessary overhead. Nextcloud thinks that the file must be imported to another storage and does not recognize that everything is done on the same object bucket. In that case, the import step can be completely skipped, which saves time, network bandwidth and reduces the load on the object storage.

The behavior improves a lot with https://github.com/nextcloud/server/pull/46013. However, there are still some put messages that are being sent to the object storage when you use an object storage as primary storage and upload files into a group folder.

Co-authored-by: Kate <26026535+provokateurin@users.noreply.github.com>
Signed-off-by: Christoph Fiehe <c.fiehe@eurodata.de>
2024-09-19 18:53:36 +02:00
Robin Appelman
dd68f678b2 fix: ensure parent folder exists when writing a file to object storage
Signed-off-by: Robin Appelman <robin@icewind.nl>
2024-09-19 13:59:08 +02:00
Robin Appelman
1e03bd5d18 fix: fix object store id for test object store
Signed-off-by: Robin Appelman <robin@icewind.nl>
2024-09-19 13:59:08 +02:00
Robin Appelman
e8c7216d5b fix: cleanup objectstore file_put_content
Signed-off-by: Robin Appelman <robin@icewind.nl>
2024-09-19 13:59:08 +02:00
Robin Appelman
9b07b7d9c1 fix: create intermediate directories for objectstore moveFromStorage
Signed-off-by: Robin Appelman <robin@icewind.nl>
2024-09-19 13:59:08 +02:00
Robin Appelman
5bcd74ae87 fix: get source file before moving the cache item in objectstore moveFromStorage
Signed-off-by: Robin Appelman <robin@icewind.nl>
2024-09-19 13:59:08 +02:00
provokateurin
69b01a265c fix(S3ConfigTrait): Allow proxy field to take false
Signed-off-by: provokateurin <kate@provokateurin.de>
2024-09-15 17:19:40 +00:00
Robin Appelman
7206e5e086 fix: make swift connect exception message more informative
Signed-off-by: Robin Appelman <robin@icewind.nl>
2024-09-10 14:47:23 +00:00
Robin Appelman
05f79f23cd fix: write object to the correct urn when moving from another storage to object store
Signed-off-by: Robin Appelman <robin@icewind.nl>
2024-09-04 23:17:04 +02:00
Git'Fellow
c84e76a749 fix(s3): Don't wait indefinitely for S3 to return
Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>

fix: lint

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>

fix: use AwsException

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>

fix: Throw on connection failure

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>

fix: Wrap all in try catch block

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>

fix: use RequestTimeout error message

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>

log: use OCP Server class

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>

fix: Handle connect timeout only

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>

fix: Handle errors more generically

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
2024-07-05 16:24:32 +02:00
Ferdinand Thiessen
ae1f5cc56d
fix(S3): Adjust usage of guzzle promise
`Promise\promise_for` was deprecated and is now removed and replaced with the static API (`Create::promiseFor`).

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2024-06-16 15:54:44 +02:00
Josh
63886147ba fix(ObjectStore): handle empty S3 hostname
Fixes #45637

The support for s3-accelerate added in #44496 introduced a regression in AWS S3 environments when `hostname` is blank (which is a valid configuration w/ AWS since the hostname gets auto-generated).

Signed-off-by: Josh <josh.t.richards@gmail.com>
2024-06-12 15:43:20 -04:00
Andy Scherzinger
dae7c159f7
chore: Add SPDX header
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-05-24 13:11:22 +02:00
Robin Appelman
40d9a3fcab
feat: add option to enable s3 acceleration
Signed-off-by: Robin Appelman <robin@icewind.nl>
2024-04-26 14:40:24 +02:00