chore: publish new package versions#4694
Merged
Merged
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
9 times, most recently
from
July 20, 2026 09:37
1969a1d to
3fa8978
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
July 21, 2026 13:43
3fa8978 to
5109f71
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
July 21, 2026 15:00
5109f71 to
6f28983
Compare
✅ Deploy Preview for electric-next ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
balegas
approved these changes
Jul 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@electric-ax/durable-streams-server-rust@0.1.5
Patch Changes
9acd04f: Memory-mode CPU fix: batch meta sidecar flushes into a periodic sweep (durable-streams-rust: memory mode uses ~5x more CPU than wal at identical low load (per-append debounced meta sidecar flush) #4691).
--durability memoryappends no longer schedule a per-stream debounced sidecar flush (a timer task + full sidecar rewrite per stream per 100 ms — ~5x wal-mode CPU at high stream cardinality under low per-stream rates). Appends and TTL read touches now only mark the stream dirty in a store-level set; a single 1 s sweeper flushes all dirty sidecars in one pass, mirroring the batched checkpoint treatment wal mode got in the write-path overhaul. The sidecar's producer/access state remains a non-durable lagging flush; its lag bound moves from 100 ms to the 1 s sweep cadence. Durable flush-on-close/delete paths are unchanged, and a pending flush can no longer resurrect the sidecar of a hard-deleted stream.012dc4a: Recovery hardening: durability barriers (committer fdatasync, checkpoint syncfs, segment seal) are fail-stop instead of retryable-in-place (a retried fsync can falsely succeed on Linux and ack/recycle lost bytes); failed checkpoints re-register their dirty set (previously a transient error + restart truncated acked bytes); torn sidecars are quarantined instead of deleting the stream's data file; missing stream-lane mounts refuse to boot instead of letting the WAL reset destroy the lane's records; append stage failures roll back the data write and producer state (500'd bytes no longer resurrect; retries no longer swallowed as duplicates); sealing cuts at the durable frontier; unreadable sealed chunks fail the read instead of serving a response with missing interior bytes; dir fsyncs added across the WAL metadata lifecycle.
db4977d: Eliminate the WAL write cardinality cliff (10.4k → 383k appends/s @100k streams; 212k @1m).
syncfsbarrier per stream lane on Linux (was O(touched-streams) per-filefdatasync— the barrier storm that collapsed throughput at high stream counts).--wal-checkpoint-interval-ms(per-shard time trigger, default 3000) and--wal-checkpoint-wal-bytes(retained-WAL size budget, 0 = off): checkpoint cadence is an explicit crash-replay budget and shards self-stagger instead of storming together.--stream-lanes N(default 1 = unchanged layout): hash stream data files acrossstreams/<0..N>/dirs, one per device, spreading checkpoint writeback over N devices with N parallel barriers. The lane count is persisted and validated on open.--server-stats Ntelemetry (SRV_STATS: cpu / inflight / service / lock / durability-wait per interval) — the dependency-free bottleneck diagnostics used to find all of the above. Memory-mode plain appends no longer queue redundant sidecar flushes.--wal-fsync-parallel,--wal-meta-gate,--mem-meta-gate,--meta-sweep-disable,--meta-sweep-stats,--tier local/--tier-local-dir(tier isoff|s3).--durability memorycombined with--tieris now rejected at startup. WAL records withoutPAYLOAD_CHECKSUMMEDdecode as torn (no released writer ever emitted them).Deployment guidance (device layout, CPU pinning, checkpoint budgets):
WAL_TUNING.md.@core/sync-service@1.7.8
Patch Changes
GenServer.callwith the default 5s timeout. A dependency materializer stays blocked in start-up until its own snapshot starts, so if that snapshot took longer than 5s the subscribe timed out, the outer shape was removed, and the client's first request 500'd (a retry succeeded once the snapshot finished). The subscribe now waits with:infinity, consistent with the other materializer calls, so a cold nested shape waits for its dependency materializers and completes without an externally visible 500. Liveness is unaffected: the caller already monitors the materializer, so a dead dependency surfaces as a call exit rather than being masked by a short timeout.a dependency consumer's inline call to its materializer raced the materializer's
shutdown, the resulting
:noprocexit crashed the consumer and removed the shapefrom disk, causing a
409 must-refetchafter the restart. The consumer nowabsorbs that exit and lets the monitored
:DOWNdrive a clean stop.ELECTRIC_TCP_READ_TIMEOUTto configure the socket read / HTTP keep-aliveidle timeout (ThousandIsland's
read_timeout, default 60s). When Electric runsbehind a connection-pooling proxy such as an AWS ALB, this must be set above
the proxy's idle timeout — otherwise the proxy races Electric's unannounced
idle close when reusing a pooled connection and clients see intermittent 502s.