|
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>
|
||
|---|---|---|
| .. | ||
| Builders | ||
| Concerns | ||
| Backup.php | ||
| Customer.php | ||
| Datacenter.php | ||
| DnsRecord.php | ||
| ExportTarget.php | ||
| Host.php | ||
| Incident.php | ||
| IncidentUpdate.php | ||
| Instance.php | ||
| InstanceMetric.php | ||
| InstanceTraffic.php | ||
| Invoice.php | ||
| InvoiceExport.php | ||
| InvoiceSeries.php | ||
| LoginSession.php | ||
| Mailbox.php | ||
| MaintenanceNotification.php | ||
| MaintenanceWindow.php | ||
| MonitoringTarget.php | ||
| OnboardingTask.php | ||
| Operator.php | ||
| Order.php | ||
| PlanFamily.php | ||
| PlanPrice.php | ||
| PlanVersion.php | ||
| ProvisioningRun.php | ||
| ProvisioningStepEvent.php | ||
| RunResource.php | ||
| Seat.php | ||
| StatusDay.php | ||
| StripePendingEvent.php | ||
| Subscription.php | ||
| SubscriptionAddon.php | ||
| SubscriptionRecord.php | ||
| SupportRequest.php | ||
| User.php | ||
| UserDevice.php | ||
| VpnPeer.php | ||