Repository navigation
Show a conversation after a removal on the page, and draw the bodies landed after it - #67
Merged
Merged
Conversation
wu-sheng
force-pushed
the
retention-page
branch
from
October 13, 2026 08:23
3112254 to
ce8f9f6
Compare
…landed after it Retention removes an idle sent conversation's landed files and leaves skeletons. The page drew removed steps, but said nothing above them, and its Prompt tab could not rebuild a provider body landed after a removal: the renderer rebuilds bodies in the browser from the files the page serves, and a removed file was left out. - The files route serves a removed file as its skeleton, uncompressed, with what the session's store kept of it under "kept": the body of each record kept as a chain tip, by record id, and each removed piece a later body cites, by SHA-256. The budget counts them by the sizes the records name, for what the store has, before anything is read; a file over the budget on its own is served alone. A file a removal deletes while the route reads is served as its skeleton. A store that cannot be read is an error, never a store that keeps nothing. - The page says in its header how many files retention removed, and that only a receiver that accepted them still has their text. Its loader hands the kept bytes to the renderer, and asks again for what an answer left out. - The renderer is pinned at apache/skywalking-horizon-ui#192, whose prompt store holds skeletons, takes a piece by the SHA-256 a removed or too large part keeps, from the record that landed first, and says when a body was removed, is built from a removed one, or holds a piece too large to store. - A skeleton keeps an empty segment list for a body whose segments were all literal, so the renderer reads it as it read the body. - The chain test of the files route writes the fixtures of the renderer's tests. - The OTLP exporter over HTTP keeps its own connections. It shared the process's default transport, so an httptest server closing in a parallel scenario broke a push it had just started ("CloseIdleConnections called"), and closing the exporter closed every other HTTP client's idle connections.
wu-sheng
force-pushed
the
retention-page
branch
from
October 13, 2026 23:45
ce8f9f6 to
5faf42b
Compare
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.
Step 6 of retention: the page. Until now the page drew a removed step with no text, but said nothing above the conversation. Its Prompt tab could not draw a provider body landed after a removal, because the renderer rebuilds bodies in the browser from the files the page serves, and a removed file was left out.
The renderer is pinned at Horizon
aff6287, apache/skywalking-horizon-ui#192.What changes
The files route serves a removed file as its skeleton, uncompressed, with
kept:bodies: the body of each record the session's store kept as a chain tip, by record id;pieces: each removed piece a later body cites, by SHA-256.The budget counts them by the sizes the records name, only for what the store has, before anything is read. A file that does not fit the budget on its own is served alone. A file a removal deletes while the route reads is served as its skeleton. A store that cannot be read gives a 500, never an answer that keeps nothing.
The page shows a small note in its header, "N files removed by retention". Its title says that only a receiver that accepted the files still has their text. It sits in the header row, so the conversation keeps its height. The loader hands the kept bytes to the renderer, and asks again for whatever an answer left out.
The renderer (Horizon #192):
Skeletons keep an empty segment list for a body whose segments were all literal, so the renderer judges the skeleton as it judged the body.
The OTLP exporter over HTTP keeps its own connections. It shared the process's default transport. An
httptestserver closing in a parallel scenario broke a push it had just started, withCloseIdleConnections called; that was the Linux CI failure. And closing the exporter closed every other HTTP client's idle connections..skfiles and the store underprovider/stay local. They are never sent, so nothing changes on the OAP.Tests
tests/chain:internal/view:__proto__, and asking again for left-out files.internal/storage: lookup failures of the store.pkg/skeleton: a literal-only manifest keeps an empty list.Each guard was proven by reverting it.
make check,make scenariosandmake conversation-view-checkpass.