Repository navigation
seaweedfs: e2e sandbox runs out of volume slots, so late backup suites cannot write to a fresh bucket #4239
Description
Describe the bug
Late in a full e2e run, S3 writes stop working: the sandbox's SeaweedFS has no volume slots left, so the master cannot grow a volume for a newly created bucket and every PUT through the S3 gateway times out.
It surfaces as a backup suite failing on its access preflight, which reads like a credentials or COSI problem and is not one. The COSI objects are fine:
BucketAccess tenant-root/bucket-clickhouse-backups-backup
status: {accessGranted: true, accountID: ba-93e6bf6f-...}
BucketClaim tenant-root/bucket-clickhouse-backups
status: {bucketName: bucket-6af22edd-..., bucketReady: true}Every SeaweedFS pod is Running and ready with zero restarts, which is why this looks like a flake rather than a resource ceiling.
Environment
- Cozystack:
main - In-tree e2e lane, container sandbox
- Seen in run 34864316378, suite
clickhouse-2-backup-roundtrip
To Reproduce
Run the full chainsaw suite. The failure lands on whichever backup suite runs late enough; each suite creates its own buckets, and every bucket needs volumes.
Expected behaviour
A bucket created part-way through a run is writable.
Actual behaviour
The chain, top to bottom.
The preflight gives up after 90s:
BucketAccess tenant-root/bucket-clickhouse-backups-backup was granted but did not pass S3 PUT/GET/DELETE within 90s
The S3 gateway cannot place the object, three attempts 20s apart:
E0914 18:27:42 s3api_object_handlers_put.go:526 putToFiler: chunked upload failed:
assign volume: all filers failed, last error:
rpc error: code = DeadlineExceeded desc = context deadline exceeded
E0914 18:28:02 ... same
E0914 18:28:22 ... stream terminated by RST_STREAM with error code: CANCEL
Both filers retry assign against the master and give up:
I0914 18:28:22 grpc_client_server.go:427 Removing cached gRPC connection to
seaweedfs-master-0.seaweedfs-master.tenant-root:19333 due to error: DeadlineExceeded
I0914 18:28:22 retry.go:124 retry assign: retrying in 1s: DeadlineExceeded
And the master says why:
I0914 18:28:23 master_grpc_server_volume.go:151 volume grow Option:{"collection":"bucket-6af22edd-...","replication":{"node":1}} Reason:grpc assign
I0914 18:28:23 volume_growth.go:135 create 6 volume, created 0: Not enough data nodes found!
I0914 18:28:23 master_grpc_server_volume.go:42 automatic volume grow failed: Not enough data nodes found!
Not enough data nodes found appears 2371 times in one master's log for this run, so this is a settled state rather than a blip.
Additional context
The arithmetic behind "not enough data nodes", from the running pods:
| Setting | Value |
|---|---|
-volumeSizeLimitMB (master) |
1000 |
-defaultReplication (master) |
001, so each volume needs a slot on both servers |
-max (volume servers) |
0, meaning auto: free disk divided by volume size |
| PVC per volume server | 10Gi, with ~9.9GB free reported by the compaction check |
| Volume servers | 2, both Running and ready |
max volume id reached |
27 |
With a 1000MB volume size and ~9.9GB free, the auto limit lands around 9-10 volumes per server, and replication 001 spends a slot on each server per volume. A full run creates buckets suite after suite, so by the time a late backup suite asks for one, there is nothing left to allocate — while the disk still looks 99% free, because the ceiling is the slot count and not the bytes.
That also explains the intermittency: the same suite passes when it runs earlier, and the failure moves between suites depending on ordering. In an earlier run clickhouse-2-backup-roundtrip passed and a different suite failed.
Worth deciding separately from this report: whether the sandbox should raise the per-server volume ceiling, grow the PVCs, drop defaultReplication to 000 for a two-server test rig, or reclaim buckets between suites. Each trades something different, and the choice is a test-infrastructure call rather than a mechanical one.
Checklist
- I have checked the documentation
- I have searched for similar issues
- I have included all required information
- I have provided clear steps to reproduce
- I have included relevant logs
Activity
lexfrei commentedon Sep 16, 2026
Same thing on a regular install, outside the sandbox. v1.6.2 with stock values: three volume servers, 10Gi PVCs,
volumeSizeLimitMB: 1000.Max: 24,Free: 0. Five collections hold 8, 6, 6, 2 and 2 volumes, while about 15 GB is stored and the volume disks are 5 to 10% used. Don't read that split as capacity. Atcopy_2 = 6one full grow takes 12 slots, so on an empty pool of 24 two buckets are enough. How it got to five is history, probably partial grows, I can't reconstruct the order. The first failed assign in the filer log is about five weeks older than the moment someone noticed. Old buckets kept working all that time, only new ones failed.A tenant store with two volume servers on the same cluster shows
Max: 18.So this is the stock default, the e2e sandbox is just where it showed up first.
fix(seaweedfs): raise the bucket ceiling by sizing volumes smaller (c…