Skip to main content

5 posts tagged with "performance"

View all tags

Release v0.0.91

· 8 min read
vNext Team
Burgan Tech Engineering

Overview

This release gives cross-domain calls a second transport. ServiceDiscovery:Provider switches between http and dapr: under dapr, address resolution moves from the discovery registry's per-call HTTP lookup to Dapr Name Resolution, and the Remote* app services gain a Dapr service-invocation transport, with the registry kept for registration and health (#964). The default stays http and is byte-for-byte the previous behaviour, so enabling dapr is an environment setting rather than an upgrade step. Inline auto-chain hops reuse the context they already hold, and subflow starts and forwards execute synchronously for more predictable completion (#968). Post-commit settlement gets a named parent span so the fresh-parent settle stops rendering as loose siblings, and runtime-internal child start/forward calls skip a response enrichment whose result is thrown away — the reload, schema filter, script context and extensions were all being built for a caller that reads only IsSuccess and Status (#969). A further round of trace refinements tightens span naming, job-handler activity creation and event trace parenting (#963). This release runs on component schema 0.0.53.

Release v0.0.88

· 14 min read
vNext Team
Burgan Tech Engineering

Overview

This release adds two task types and moves authorization behind a provider seam. ExternalHttpTask (type 22) runs an HTTP call directly in the Orchestrator rather than routing it through the Execution service, sharing the existing HTTP configuration, scripting surface and reserved-header hardening with the remote HTTP task (#880). PythonTask (type 23) executes a main(input) contract across Python.NET, an isolated process, or a hardened Docker/Kubernetes container, with strict JSON in and out, centrally configurable limits and no silent fallback between modes (#921). Caller-role resolution becomes provider-baseddefault keeps today's in-process behaviour, morph-idm calls an external IDM once per request scope and fails closed — while the grant engine, transition.roles, availableIn[].roles, queryRoles, function.roles and schema x-roles all keep their semantics (#927). All distributed events now ride the transactional outbox: the EventHook infrastructure is removed, subflow terminal events additionally settle the parent immediately as a post-commit command with the Inbox handler as a durable deduplicated backup, and a loss-tolerant Dapr nudge wakes the poll loops after a commit — measured relay gap p99 65.9 ms (#927). Polling a parent with an active subflow gets a cache and a 304 for the first time, terminal settlement gains a durable SettledAt marker, and parent loads shrink to exactly the correlation they act on (#928). This release runs on component schema 0.0.53.

Release v0.0.87

· 8 min read
vNext Team
Burgan Tech Engineering

Overview

This release spans the transition pipeline end to end, and then removes the redundancy that filling in the trace tree exposed. Every time-consuming mechanism is now a span — validation, context load, instance read, task input/invoke/output compilation, subflow mapping, locks, component reads, the write side and the stretch after the pipeline — all always on, not gated behind Verbose, with the rule that a step which did no work emits no span at all (#920). With the tree filled in, a single business request turned out to resolve the same workflow definition three or more times per hop, load the same instance twice, validate the same payload schema twice, and build a fully populated transition context only to throw it away. The second half of the release removes exactly that: one workflow resolution per hop, snapshot-based admission, a single owner for payload-schema validation, and the orphaned IWorkflowContext deleted outright (#920). The measured effect on one traced business request: time inside SyncTransitionStrategy that no child span accounted for drops from 976 ms to 14 ms. This release runs on component schema 0.0.53.

Release v0.0.86

· 11 min read
vNext Team
Burgan Tech Engineering

Overview

This release is trace-driven performance work on the paths a busy instance actually spends its time in. updateData admission becomes lock-free: the kind is status-neutral, so the async accept no longer takes the status lock or runs the duplicate-active-job guard, and N parallel updateData requests are all admitted — measured as zero 409s under five-way parallel load where the baseline trace showed 84% dead air (#917). Script compilation moves to async single-flight, so waiters await one shared compile instead of blocking thread-pool threads while Roslyn emits, taking cold-window Dapr p99 from 177.7 ms to 81.1 ms; the same change adds compile-cost tags to the task span and Trigger.Local.* spans for in-process trigger invocations (#917). Hot-path allocation drops across the board — response bodies are no longer buffered to measure their size, the EF command interceptor stops copying the full SQL text about six times per command, and raw request bodies are no longer eagerly decoded to UTF-16 — alongside a partial GIN index on InstancesData.Data that finally serves the @> containment predicates every attributes.* filter already emitted, compiled poll-path fingerprint queries, Server GC on every host, and InstanceWriteGate at 256 stripes (#911). On the release side, prerelease publishing moves from manual dispatch to PR labels (#912, #915). This release runs on component schema 0.0.53.

Release v0.0.85

· 20 min read
vNext Team
Burgan Tech Engineering

Overview

This release adds the first genuinely parallel task type and cuts the read path's cost in half. FanOutTask (type 21) resolves a collection at runtime and runs a referenced inner task once per item concurrently, joining the outcomes by policy and writing one output to instance data — replacing the $self auto loop that cost N full pipeline hops with a single transition (#905). Component definitions gain an in-process L1 cache in front of the distributed store, keyed by the existing Redis keys so a publish makes stale entries unreachable by construction, plus a five-second generation-token memo that removes the token read from the hot path entirely (#898); script secret bundles are cached in-process with a short TTL and single-flight stampede protection, taking a cold ~8.5 ms vault read down to ~1 µs warm (#899). Traces get flat lanes — one lane per instance instead of nesting equal to chain depth — and job arming moves outside the instance status lock, taking the worst observed lock hold from 30.1 s to 48 ms (#900). Payload envelope detection is resolved by field set rather than a single property, and a rejected payload can no longer come back naming no field at all (#906). Finally, the script compiler and ScriptContext get a measurement-first optimization pass with new metrics, an opt-in PreserveNumericPrecision flag and a LegacyAppendPipeline kill-switch (#907). This release runs on component schema 0.0.53.