Skip to content

seaweedfs: no e2e case walks lowering volumeSizeLimitMB on a live instance #4302

Closed

Description

Lowering master.volumeSizeLimitMB on a live instance, which the platform now leaves to the operator for every instance that predates the 400 default, takes every volume already at or above the new value out of the master's writable set, so each affected collection needs a successful grow before its next write lands. That transition is measured on a local rig and written up for operators in docs/operations/seaweedfs-lowering-the-volume-size-limit.md, but nothing in the suite walks it: every existing case installs at one limit and stays there, so a change that made the transition worse would pass.

There is a route that does not fight the platform's own reconcile, and it only became available once the limit was exposed on the app chart. The tenant module's HelmRelease takes its values from the cozystack-values Secret and carries no spec.values (packages/apps/tenant/templates/seaweedfs.yaml), so moving the value on an instance the module created races its parent. An instance created directly against the API has no such parent, and master.volumeSizeLimitMB now appears in the seaweedfs-rd openAPISchema, so a SeaweedFS resource can carry it. The chart pins fullnameOverride: seaweedfs, so that instance needs a namespace of its own rather than a second release beside the first.

The shape: install at 1000, write into one bucket until a volume sits between the two limits, patch the CR to 400, then assert that a write to that same bucket still lands. That last write is what the test is for, since the failure is a write that times out while the disk still reports free space.

It is not in #4251 because of cost: a second instance plus enough written bytes to put a volume in the band is not cheap in the e2e sandbox. The route was worked out in review, in this comment.

One open question for whoever builds it: suite order. bucket-1-capacity shares the tenant-root SeaweedFS instance with every suite that provisions a bucket there, and chainsaw gives no ordering guarantee between tests. Its margin on the shipped volume is about eight collections at 400 MB and three volumes per grow, against its own three, cozy-backups and the unnamed default collection, so whether it holds depends on how many collections the suites before it have left behind when it runs. Its comment names only the default collection as the unknown. In the PR's e2e run it ran last, after the backup suites, and passed. A second instance brings its own budget into the same question, so where both sit in discovery order is worth deciding rather than inheriting.

Activity

  1. added
    area/testingIssues or PRs related to testing (e2e, bats, unit tests)
    area/storageIssues or PRs related to storage (linstor, seaweedfs, bucket, velero, harbor)
    on Sep 16, 2026
  2. added
    kind/featureCategorizes issue or PR as related to a new feature
    triage/acceptedIndicates an issue is ready to be actively worked on
    priority/backlogGeneral backlog priority. Lower than priority/important-longterm
    and removed
    triage/needs-triageIndicates an issue needs triage by a maintainer
    on Sep 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area/storageIssues or PRs related to storage (linstor, seaweedfs, bucket, velero, harbor)area/testingIssues or PRs related to testing (e2e, bats, unit tests)kind/featureCategorizes issue or PR as related to a new featurepriority/backlogGeneral backlog priority. Lower than priority/important-longtermtriage/acceptedIndicates an issue is ready to be actively worked on

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions