What happens at run time
This page describes what MaxoPerf does with a test’s dependencies from the moment you start a run until it releases them. The per-kind pages cover the choices you make when you bind each one.
The preparing phase
Section titled “The preparing phase”When you start a run that has virtual service, tunnel or browser fleet bindings, MaxoPerf records one lease for each of them. Before it starts any runner, it checks every lease once every 5 seconds and brings up what is stopped. While any lease is still waiting, the run page shows a Preparing dependencies banner that names each one.
The phase ends in one of three ways:
- Every lease is Ready. The runners start with the dependency variables set.
- A lease cannot come up. The run fails with the cause Dependency unavailable and no runner starts.
- You cancel the run. MaxoPerf releases the leases and closes out the runners that never started.
The wait is capped at 600 seconds by default. A secret and a dataset have no lease and add no wait.
Lease states
Section titled “Lease states”| State | Meaning |
|---|---|
| Preparing | MaxoPerf is waiting for the dependency to come up. |
| Ready | The dependency is up and its variables are set for the runners. |
| Failed | The dependency could not come up, and the run failed. |
| Degraded | A tunnel that was ready went offline during the run. |
When the run ends, MaxoPerf releases every lease. A finished run keeps each row’s last state (normally Ready), so the tab records what the run used. It does not show a separate released state.
Release
Section titled “Release”When the run ends, MaxoPerf releases every lease and stops what the run started:
- A virtual service or browser fleet the run started is stopped. One that was already running keeps running.
- When two runs hold the same dependency, the run that started it hands the duty to the other. The last run to release it stops it.
- A tunnel is never stopped by a run.
- If a release is missed, a sweep releases the leases of finished runs about five minutes after the run ends.
The run’s Dependencies tab
Section titled “The run’s Dependencies tab”The run detail page gets a Dependencies tab once the run holds at least one lease. Each row shows the kind, the name, the variables injected, the lease state, a Started by this run badge when it brought the dependency up, and a link:
| Row | Link |
|---|---|
| Virtual service | Open analytics, limited to the run’s time window |
| Tunnel | Open stats, limited to the run’s time window |
| Browser fleet | Open sessions |
| Secret | None. The row shows the variable name only. |
Rows for virtual services and tunnels carry the note All traffic during this run, because the
service and tunnel pages count every request in that window. If a tunnel goes offline mid-run, a
banner reads “Tunnel <name> disconnected during this run”.
Composite runs
Section titled “Composite runs”A VarioTest run or a run with an EUX probe is a composite run. The Dependencies tab lists the leases of every member and adds a Member column that links to the member’s run. Both a member’s own bindings and its master test’s bindings apply:
- For virtual services, tunnels and browser fleets, a name defined by both is taken from the master test. The master’s Dependencies tab warns about the clash.
- For secrets, the member’s value wins.
Used by
Section titled “Used by”Rotating a secret or stopping a service that another test depends on can break that test’s next run without warning. Used by shows what depends on an entity before you touch it. It appears on the secret row (a Used by button), and on the virtual service, tunnel and browser fleet pages. It lists the tests that bind the entity with their variable names and whether each binding is manual or inline, a count of tests you cannot view, and any run holding a live lease on it. The same data is available from the API. See Automate.
Limits
Section titled “Limits”- A tunnel’s expiry (TTL) and a fleet’s lifetime (TTL) are hard caps. The tunnel or fleet ends at that moment even if a run is using it. A tunnel that expires mid-run goes offline, and its lease turns Degraded.
- A run never stops a tunnel. Only you, through the CLI, console or API, stop one.
- Runners you add to a live run with Add runners do not receive the run’s injected environment. That covers the dependency variables and secrets. Choose the runner count before you start a run that depends on a virtual service, tunnel or fleet.
- Within one test, two bindings cannot inject the same variable name. Binding a virtual service, tunnel
or fleet under a name another binding on the test already uses is rejected with
409 env_var_conflict. - A tunnel and a fleet belong to the workspace they were created in, and a test can only bind a tunnel or fleet from its own workspace.
Troubleshooting
Section titled “Troubleshooting”The run failed with “Dependency unavailable”. Open the run’s failure summary or Dependencies tab. The message names the dependency and the reason:
| Message | Cause and fix |
|---|---|
Virtual service <name> did not come online within 600s | The deploy took too long. Open the service, fix the cause, rerun. |
Virtual service <name> entered an error state | The service failed after the run started it. Redeploy it from its page. |
Virtual service <name> is not running and auto-start is disabled | Start the service, or turn on Auto-start with the run for the binding. |
Tunnel <name> did not come online within 600s | Your tunnel client did not connect. Start the client, rerun. |
Tunnel <name> was stopped by plan limit; start it manually | Start the tunnel from its page, then rerun. A plan limit can mean freeing a slot first. |
Tunnel <name> was stopped by expiry; start it manually | The tunnel passed its TTL. Start it again, then rerun. |
<Kind> <name> could not be found | The dependency was deleted. Rebind or recreate it. |
A URL in an engine error looks like [REDACTED]. The runner redacts every injected environment
value from the errors it reports, dependency addresses as well as secrets, so a service, tunnel or fleet address can show as
[REDACTED]. The run’s Dependencies tab and the entity’s own page still show the real address.
The script says a variable is not set. The variable is only injected when the binding exists on the test the run executes. Check the test’s Dependencies tab for the exact name, and see “Limits” above if the runner was added after the run started.
Next steps
Section titled “Next steps”- Automate: inspect leases and usage from the API and MCP tools.
- Worked example: follow one run through the preparing phase.