|
tests / pest (push) Failing after 7m44s
Details
tests / assets (push) Successful in 21s
Details
tests / release (push) Has been skipped
Details
A paid order that no host has room for used to FAIL at the reservation
step. The customer has paid by then, so that turned a sale into an
incident and left somebody holding money against nothing. The estate is
finite and booked thick, so "no host has room right now" is an ordinary
Tuesday — it means a machine has to be bought, which takes days.
So the order waits instead. poll(), not retry(): the wait is measured in
days and must not eat the run's attempt budget. It only fails after
PARK_DAYS (14) — long enough to buy, rack and onboard a server over a
weekend, short enough that a forgotten order surfaces instead of waiting
for ever.
Then say so, in the same words on both sides of the payment:
- The price sheet marks each package "wird sofort ausgeliefert" or
"Bereitstellung in 2-3 Werktagen", read from free capacity rather
than written into the page.
- The customer's own overview says their cloud is being prepared while
it is parked, instead of a stepper standing still for two days under
"wird eingerichtet" — which reads as broken.
- The console front page shows the same per-package answer, so an
operator can see what visitors are being promised.
And a capacity page for the decision that follows: who is waiting, what
the roomiest host still has, what the queue needs ("3x Start, 1x
Business" - the LARGEST parked package sets the minimum machine, because
an instance lives on one host), and what such a machine costs today from
the provider's live list. It orders nothing: buying a server is a
contract, and a bug in a capacity calculation must not sign one.
The operator can also say where each parked order goes. A pin is
honoured or it waits — never quietly redirected — because placing it
elsewhere answers a different question than the one they answered, and
they would find out from the finished instance.
Two things this shook out:
- `current_step` is an INDEX into the pipeline, not the step's key, and
it is cast to integer. `where('current_step', 'reserve_resources')`
reads as correct and matches step 0 of EVERY pipeline instead. Both
lookups go through HostCapacity::parkedRuns() now, which resolves the
index and filters by pipeline.
- The auction feed sends `hdd_hr` as a list, not a string. Casting it
printed "Array" into the console and raised a warning that took the
page down with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| Capacity.php | ||
| ConfirmDeleteDatacenter.php | ||
| ConfirmDeleteIncident.php | ||
| ConfirmDeletePlanDraft.php | ||
| ConfirmDeleteVpnPeer.php | ||
| ConfirmDisableTwoFactor.php | ||
| ConfirmEndOtherSessions.php | ||
| ConfirmForgetSecret.php | ||
| ConfirmReissueVpnPeer.php | ||
| ConfirmRemoveHost.php | ||
| ConfirmRestartInstance.php | ||
| ConfirmSaveEnv.php | ||
| ConfirmSaveSecret.php | ||
| Customers.php | ||
| Datacenters.php | ||
| EditDatacenter.php | ||
| EditExportTarget.php | ||
| EditInvoiceSeries.php | ||
| EditPlanFamily.php | ||
| Finance.php | ||
| GrantPlan.php | ||
| HostCreate.php | ||
| HostDetail.php | ||
| Hosts.php | ||
| Incidents.php | ||
| InstanceAdminAccess.php | ||
| Instances.php | ||
| Integrations.php | ||
| Invoices.php | ||
| Mail.php | ||
| Maintenance.php | ||
| Overview.php | ||
| PlanVersions.php | ||
| Plans.php | ||
| Provisioning.php | ||
| Revenue.php | ||
| Sessions.php | ||
| Settings.php | ||
| TwoFactorSetup.php | ||
| Vpn.php | ||
| VpnConfigAccess.php | ||