Skip to content

Let benchmark tests set a StorageClass and apply extra manifests - #2368

Open
anishgang wants to merge 14 commits into
agent-substrate:mainfrom
anishgang:storage-test-configs
Open

anishgang wants to merge 14 commits into
agent-substrate:mainfrom
anishgang:storage-test-configs

Conversation

@anishgang

Copy link
Copy Markdown
Contributor

Builds on #2057. Until that merges, this PR shows its commits too, so review the last 3 commits.

  • A tests.yaml entry can set storageClassName. The orchestrator passes it to workloads/deploy.sh --storage-class-name, which adds the glutton-storage template.
  • A tests.yaml entry can list Kubernetes manifest files in additionalManifests, for anything the test needs that the substrate install does not create. The orchestrator applies them after it deploys substrate and before the workloads, so a manifest can use substrate's CRDs and a StorageClass exists before glutton-storage is created. It deletes them in the sweep before each test and in the teardown after it. Relative paths resolve against the directory holding tests.yaml. Every file is checked before anything is applied, and a missing file fails the test.
  • The CronJob sample mounts the optional substrate-benchmark-test-manifests ConfigMap at /etc/orchestrator/test-manifests, next to tests.yaml, so a test lists its files as test-manifests/<file>. setup.sh builds the ConfigMap from the YAML files in benchmarking/automation/test-manifests/. With no files there, the ConfigMap is empty.
  • The commented-out durdir_external_volume_example entry in tests.yaml runs the DurDir load on csi-nfs-sc, the class --setup-csi=nfs creates. It needs no extra manifest, so there is still one NFS StorageClass.

This is the test-specific config Max raised on #2057. It is meant as a starting point for the test API. cc Max Smythe (@maxsmythe) pmandewalkar

Testing: unit tests for the storageClassName flag, additionalManifests validation and path resolution, the apply and delete order, and where main() applies and deletes the manifests when the test fails or a file is missing. tests.yaml passes the orchestrator's validation as is and with the example entry uncommented. The setup.sh ConfigMap step was run with no test-manifests/ directory, an empty one, and one file, on bash 5.3 and bash 3.2. shellcheck and the boilerplate check pass. Not run end to end on a cluster.

  • Tests pass
  • Appropriate changes to documentation are included in the PR

hajiler and others added 14 commits October 8, 2026 20:56
The storage benchmark addressed its actor through the Host header
(<actor>.<atespace>.actors.resources.substrate.ate.dev). The atenet
router no longer routes on Host: it reads the ate-target-actor header
("<atespace>/<actor>"), as the other glutton workers already send.

Without the header, the router could not tell which actor a write was
for and answered every GluttonWriteDisk with 404 "invalid actor
reference", so the benchmark measured no disk writes at all. Send the
header the router expects, and drop the unused Host value.
When ResumeActor failed, the storage benchmark returned without its
wait between iterations, and boomer called it again straight away. Once
an actor crashed, every later resume failed the same way, so a single
crashed actor turned into a tight loop: about 25,000 failed ResumeActor
calls in two minutes. That put needless load on ateapi and drowned the
real resume latencies in the stats.

Wait on every path, as the glutton benchmark does. When ateapi reports
the actor as crashed, count it once under CrashCount and stop sending it
requests, so a crash shows up as a crash instead of as thousands of
failed resumes.
LOCUST_IMAGE_PULL_POLICY now defaults to Always for every image, and
setting the variable still overrides it. The default image tag is
:latest, so IfNotPresent could start a stale cached image.

The storage benchmark had its own copy of goroutineID. It now calls
boomerutil.GoroutineID, the shared helper the other boomer user
classes already use.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants