Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
5691884
feat(seaweedfs): add SeaweedFS object storage provider
chrislusf Sep 12, 2026
007e3cc
fix(seaweedfs): default iamUrl to s3Url, not <s3Url>/iam
chrislusf Sep 12, 2026
d6eaca0
fix(seaweedfs): use AWSS3V4Signer not legacy S3Signer; remove dead po…
chrislusf Sep 12, 2026
73bae93
fix(seaweedfs): address PR review comments
chrislusf Sep 15, 2026
5109b1c
Merge branch 'main' into feat/seaweedfs-object-store-provider
chrislusf Sep 15, 2026
e6d4dad
fix(seaweedfs): namespace IAM credential keys by store ID
chrislusf Sep 15, 2026
11dd3a9
fix(seaweedfs): update existing bucket credentials on IAM key rotation
chrislusf Sep 15, 2026
dcbecc5
fix(seaweedfs): prefer current store URL over stale persisted s3Url d…
chrislusf Sep 15, 2026
c651665
fix(seaweedfs): omit bucket from usage result on S3 listing failure
chrislusf Sep 15, 2026
7b22718
fix(seaweedfs): add bounded timeouts to S3 extension HTTP requests
chrislusf Sep 15, 2026
51eaef9
fix(seaweedfs): only accept 2xx as success for S3 extension requests
chrislusf Sep 15, 2026
e4b4ea8
feat(seaweedfs): add SeaweedFS to the Add Object Storage UI provider …
chrislusf Sep 15, 2026
7eb6938
test(seaweedfs): fix testSetBucketQuotaNoS3ConfigThrows to clear stor…
chrislusf Sep 15, 2026
e353f6f
test(seaweedfs): add deterministic SigV4 signature-verification test
chrislusf Sep 15, 2026
3fae9a4
fix(seaweedfs): read configured s3Url detail first, fall back to stor…
chrislusf Sep 15, 2026
250e085
fix(seaweedfs): fall back to current S3 endpoint when iamUrl detail i…
chrislusf Sep 15, 2026
3d27797
fix(seaweedfs): reject negative bucket quota values
chrislusf Sep 15, 2026
4b949b5
fix(seaweedfs): validate IAM key status and require both credentials …
chrislusf Sep 15, 2026
f09d74e
fix(seaweedfs): preserve endpoint path prefix when building quota req…
chrislusf Sep 15, 2026
face0a8
fix(seaweedfs): clean up remote bucket on post-create DB update failure
chrislusf Sep 15, 2026
9e73cb3
fix(seaweedfs): scope IAM user policy to account bucket ARNs
chrislusf Sep 15, 2026
07e1142
test(seaweedfs): fix SigV4 signature test timestamp determinism
chrislusf Sep 15, 2026
649bee6
fix(seaweedfs): namespace IAM username by store ID
chrislusf Sep 15, 2026
6aab4da
fix(seaweedfs): deny s3:PutBucketQuota in tenant IAM policy
chrislusf Sep 15, 2026
99e7b25
fix(seaweedfs): make deleteBucket IAM policy refresh best-effort
chrislusf Sep 15, 2026
eb02755
fix(seaweedfs): only persist explicitly-supplied endpoint overrides i…
chrislusf Sep 15, 2026
1144c18
fix(seaweedfs): include endpoint path prefix in signed resource path
chrislusf Sep 15, 2026
6f6ca3f
fix(seaweedfs): require IAM credentials for bucket creation, fail on …
chrislusf Sep 15, 2026
6449ad9
fix(seaweedfs): validate non-negative quota before reservation in Buc…
chrislusf Sep 15, 2026
684e907
fix(seaweedfs): use DB-backed GlobalLock for IAM provisioning across …
chrislusf Sep 15, 2026
67aa7af
test(seaweedfs): add buildAccountIAMPolicy and GlobalLock stub tests
chrislusf Sep 15, 2026
0872a51
test(seaweedfs): add lifecycle tests for endpoint default/override pe…
chrislusf Sep 15, 2026
f6ce879
fix(seaweedfs): release GlobalLock reference on failure and in finall…
chrislusf Sep 15, 2026
e58042e
fix(seaweedfs): validate negative quota before remote side effects in…
chrislusf Sep 15, 2026
a813234
test(seaweedfs): fix duplicate anyLong import and update deleteBucket…
chrislusf Sep 15, 2026
d185416
fix(seaweedfs): harden createBucket post-create section with IAM lock…
chrislusf Sep 15, 2026
8157660
fix(seaweedfs): revoke IAM grant before S3 delete in deleteBucket
chrislusf Sep 15, 2026
53da699
fix(seaweedfs): revert deleteBucket to delete-then-refresh order with…
chrislusf Sep 15, 2026
6e4f270
fix(seaweedfs): clean up remote bucket when IAM lock acquisition fail…
chrislusf Sep 15, 2026
2c28610
fix(seaweedfs): tolerate 404 on quota disable for deployments without…
chrislusf Sep 15, 2026
88c8574
test(seaweedfs): add quota 404 tolerance test and BucketApiServiceImp…
chrislusf Sep 15, 2026
bd882af
fix(seaweedfs): return updated BucketVO from createBucket instead of …
chrislusf Sep 15, 2026
b424170
fix(seaweedfs): remove BucketVO before IAM policy refresh in deleteBu…
chrislusf Sep 15, 2026
e30593c
fix(seaweedfs): do not swallow NoSuchBucket 404 during quota disable
chrislusf Sep 15, 2026
0349369
feat(seaweedfs): use Prometheus metrics for scalable bucket usage rep…
chrislusf Sep 15, 2026
ea0674d
test(seaweedfs): add Prometheus metrics usage and fallback tests
chrislusf Sep 15, 2026
104fc02
fix(seaweedfs): correct Prometheus metric name and SigV4 resource path
chrislusf Sep 15, 2026
f0950d1
fix(seaweedfs): split IAM policy lock, restructure deleteBucket, prop…
chrislusf Sep 15, 2026
e94c2c6
test(seaweedfs): update metrics test for correct Prometheus metric name
chrislusf Sep 15, 2026
17db4fd
feat(ui): add SeaweedFS endpoint override fields to Add Object Storage
chrislusf Sep 15, 2026
7913fad
fix(seaweedfs): only tolerate quota extension 404 on initial create
chrislusf Sep 15, 2026
068987f
fix(seaweedfs): harden metrics parser so bad scrapes fall back to S3 …
chrislusf Sep 15, 2026
1746859
test(seaweedfs): add quota-clear and metrics fallback regression tests
chrislusf Sep 15, 2026
b22207f
fix(ui): localize SeaweedFS object storage labels and placeholders
chrislusf Sep 15, 2026
e75ecf6
fix(seaweedfs): reject sample-less and malformed metrics scrapes
chrislusf Sep 15, 2026
3d51df4
fix(seaweedfs): remove BucketVO inside the IAM lock after policy refresh
chrislusf Sep 15, 2026
9986d1c
fix: preserve provider-persisted bucket fields in createBucket response
chrislusf Sep 15, 2026
656da92
test(seaweedfs): cover metrics scrape validation and deleteBucket row…
chrislusf Sep 15, 2026
d179988
fix(seaweedfs): mark bucket Destroyed instead of removing the row in …
chrislusf Sep 15, 2026
e960c41
fix(seaweedfs): preserve the metricsUrl store detail during initializ…
chrislusf Sep 15, 2026
415d163
fix(seaweedfs): verify the configured admin credentials during initia…
chrislusf Sep 15, 2026
3cc05ca
fix: update stored bucket URLs when an object store URL changes
chrislusf Sep 15, 2026
aa5caa8
test(seaweedfs): cover Destroyed-state policy exclusion, metricsUrl a…
chrislusf Sep 15, 2026
e7f8be4
fix(seaweedfs): write account credentials per key to avoid clobbering…
chrislusf Sep 15, 2026
e443379
fix: reserve before mutating the remote quota in updateBucketQuota
chrislusf Sep 15, 2026
6ae6fbf
fix: skip bucket URL rewrite when the object store has an explicit s3Url
chrislusf Sep 15, 2026
c9eaf62
fix(seaweedfs): add a store-wide bucket name lock shared by create an…
chrislusf Sep 15, 2026
e76aef2
fix: normalize trailing slashes when composing bucket URLs
chrislusf Sep 15, 2026
932cc3c
fix(seaweedfs): make credential and quota updates idempotent
chrislusf Sep 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,11 @@
<artifactId>cloud-plugin-storage-object-cloudian</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-plugin-storage-object-seaweedfs</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-plugin-storage-object-simulator</artifactId>
Expand Down
1 change: 1 addition & 0 deletions plugins/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@
<module>storage/object/minio</module>
<module>storage/object/ceph</module>
<module>storage/object/cloudian</module>
<module>storage/object/seaweedfs</module>
<module>storage/object/simulator</module>


Expand Down
70 changes: 70 additions & 0 deletions plugins/storage/object/seaweedfs/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-plugin-storage-object-seaweedfs</artifactId>
<name>Apache CloudStack Plugin - SeaweedFS object storage provider</name>
<parent>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloudstack-plugins</artifactId>
<version>24.0.0-SNAPSHOT</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-engine-storage</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-engine-storage-object</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-engine-schema</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-iam</artifactId>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${cs.jackson.version}</version>
</dependency>
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-standalone</artifactId>
<version>${cs.wiremock.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Loading