You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A Partition writer now rotates on its segment's REAL size, not its own byte count.current_size counted only what this instance had written, and maybe_rescan_segments() — which force-rescans every second and filesize()s every segment — discarded that reading unless the newest segment ID had CHANGED. A peer appending to the segment we already hold was invisible, so N writers sharing one file each carried it to the threshold alone and it grew to roughly N x segment_size. request-builder.tsl is exactly that shape: requests.p<partition> is per-worker, but completed.p0, gyroscope.p0, errors.p0 and alerts.p0 are hardcoded, and every one of the N workers appends to them. A hub running four workers held 1 MiB segments at nearly 4 MiB.
get_segments() clears the stat cache before sizing a segment. PHP caches filesize() per path and a peer's append in another process invalidates nothing, so a long-running worker re-read its own first answer forever. Without this the rotation fix above is inert, and do_rotate()'s "adopt the newest if it still has room" test was reading the same stale number.
The log browse rail scrolls again..newspack-nodes-log-browser carried flex-shrink: 0, which protected its 200px width while it was a direct child of the row-flexed __body. Wrapping it in the column-flexed .newspack-nodes-rail-dock re-aimed that declaration at the HEIGHT, pinning the rail to its content: a partition with two dozen segments ran off the bottom of the viewport and the list's overflow-y: auto never fired. min-height: 0 states the axis that actually needs saying.
Added
wp nodes memcache flush — the CLI half of the settings page's "Flush Caches" button. It rotates the install's cache salt, orphaning every Newspack plugin's keys at once, then restarts the fleet: the scope is memoized per process, so a live worker keeps writing the OLD prefix until it respawns. A deploy procedure can call for a flush by name; it cannot click a button. The restart is best-effort — a failure only delays the new scope to the next spawn, so it warns and the command still succeeds.