A reviewer pointed out the sleep on the callback thread. I also found that repeated failures could grow the call stack, then moved retries to a scheduler.
Cancelling the future did not release the closed view. I checked this with a weak reference. Later review measurements also led me to undo a change that delayed later reads after a message had already been consumed.
My part. I wrote the initial implementation in response to a user request, revised the proposal, and ran the vote. I also handled message pooling for mapped views.
Shared design. lhotari proposed the mapper approach and contributed the final error-handling interface, constraints, and implementation changes.
Closed producers after key-loading failures and made creation wait for the first successful key load, covering both cleanup and asynchronous readiness.
The connection and key load run independently. A slow key reader could let create() succeed before a key was available. A separate failure path completed the creation future but left the producer registered.
The fixes close failed producers and wait for the first key load before reporting successful creation. Regression coverage includes delayed key readers, cleanup, close, and reconnect while key loading is pending.
Apache PulsarMerged
Ordering ACK and FLOW after reconnect
Moved the pending ACK flush before FLOW on the same connection, preventing already-acknowledged messages from being redelivered during reconnect.
FLOW let the broker resume delivery before it received the queued acknowledgements. Flushing those acknowledgements also cleared the client's pending-ACK state, so its duplicate check could no longer recognize the redelivered messages.
Sending ACKs first on the same connection makes the broker process them before it resumes delivery, avoiding that reconnect race.
Spring FrameworkMerged
Reading an uploaded file more than once
Small uploads shared a buffer's read position, so a second read returned nothing. Fixed repeated reads and copies to behave the same for files stored in memory and on disk.
The tests vary the size threshold to store the same file in memory and on disk. They read it twice, then copy it to another file and check that the content is still intact.
GradleMerged
Build progress in Windows Terminal
Enabled taskbar build progress in Windows Terminal, including WSL. Checked terminal detection and the emitted control sequences across WSL, PowerShell, and cmd.
The standalone worker writes the 1.x default registry after its existing simpleclient output, so cache metrics stay visible as collectors move to the new client.
Broker and proxy /metrics now write both registries; a byte-stream filter adds the cluster label to 1.x output, and in-process bookies get a separate registry.
Sending permits first let the broker redeliver messages whose acks were still queued; flushing acks first on the same connection avoids handing duplicates to applications.
A producer that closed inside its constructor still scheduled a timer whose finally block kept rescheduling it; the timer now stops once the producer has closed or failed.
A failed key load failed create() but left the producer connecting and registered on the broker, so retries piled up producers; it is now closed and removed.
Cancelling a future built on delayedExecutor() only skips the run; the queued task keeps its captured objects reachable until the delay ends, as a weak-reference check showed.
When applying a message threw, its position was never recorded, so a refresh waiting for it hung on quiet topics; the position is now recorded before rethrowing.
A send failure queued on the completion executor could be dropped by shutdownNow(), leaving the future pending; while the client closes, it is completed on the current thread.
A reviewer's note exposed a 50 ms sleep on the client callback thread; retries now use backoff on a delayed executor, and closing the view fails pending refreshes.
Proposal to add createMapped to TableViewBuilder, using the mapper-function design a maintainer suggested, so users can keep message metadata without extra cost for existing views.
Moved TableView logic into a shared generic base class for mapped views; a maintainer's final pass added the mapper error model that skips failing messages and reports them.
The 7.1 MIME type parser accepted whitespace alone as a parameter separator; this makes it reject such values again, following RFC 9110 and the 7.0.x behavior.
Constructor parameters were removed from the mapped properties but not from the property name set, so checkFullyPopulated always failed for classes with setters.
In-memory parts shared one buffer read position, so a second content() or transferTo() call got empty data; each call now reads the bytes from the start.
Detects Windows Terminal through the WT_SESSION variable, which is also visible inside WSL, so Gradle sends OSC 9;4 progress sequences that show on the Windows taskbar.
A tool-use stop with no structured call now uses the existing empty-response retry budget instead of failing; the text is never parsed or run as a tool call.
Reads customTitle from the custom-title.json sidecar next to each Claude transcript, and falls back to the first prompt when the sidecar is missing or invalid.
Makes perPage non-optional in the finder's state and tests default options, keeping pagination and point-in-time cleanup checks tied to a numeric page size.
Traced doubled markers like '- •' to the Markdown list writer; the maintainers used this diagnosis to build their own fix at list detection, not this patch.