[ZEPPELIN-6659] Render streaming interpreter output in Angular New UI - #5460
Draft
miinhho wants to merge 5 commits into
Draft
[ZEPPELIN-6659] Render streaming interpreter output in Angular New UI#5460miinhho wants to merge 5 commits into
miinhho wants to merge 5 commits into
Conversation
miinhho
marked this pull request as draft
September 5, 2026 08:06
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.
What is this PR for?
The Angular New UI declares
PARAGRAPH_APPEND_OUTPUTandPARAGRAPH_UPDATE_OUTPUTin its WebSocket operation enum but does not consume either message. Interpreter output emitted while a paragraph is runningis therefore discarded until the terminal
PARAGRAPHsnapshot arrives.This PR adds the missing consumer based on the server's actual wire contract. It declares the receive payloads in the SDK, handles both operations in
ParagraphBase, and introducesParagraphOutputStateto fold UPDATE, APPEND, and terminal snapshots into the current paragraph result. APPEND data is accumulated by result index, APPEND received before a typed UPDATE is held until its type is known, and the terminalPARAGRAPHsnapshot becomes authoritative so late frames cannot duplicate or overwrite the final result.The PR also fixes a server-side ordering ambiguity. APPEND events were buffered for up to 100 ms by
AppendOutputRunner, while UPDATE events bypassed that queue and could overtake an earlier APPEND. A clientcannot distinguish that delayed APPEND from one genuinely produced after the UPDATE. APPEND and UPDATE now share the same queue, with UPDATE acting as an ordering boundary: preceding APPEND chunks are flushed
before the UPDATE, and subsequent APPEND chunks remain after it.
A focused, versioned capture records the callback-order evidence and observed WebSocket sequences with paragraph streaming enabled and disabled. Reducer tests replay the capture and cover delayed-frame permutations. The client remains defensive against late frames for compatibility with older servers.
The change is limited to the standard paragraph result-rendering path. Application output rendering is unchanged.
What type of PR is it?
Bug Fix
Todos
What is the Jira issue?
The reusable WebSocket fixture infrastructure tracked by ZEPPELIN-6665 and ZEPPELIN-6671 is not available yet, so this PR includes the focused capture and ordering replay required by ZEPPELIN-6659.
The notebook parity registry is being introduced by ZEPPELIN-6660 in #5456. After that PR lands, this change will register streaming output as a separate result scenario. The scenario will require the first chunk to be visible while the paragraph is RUNNING, later chunks to accumulate rather than replace earlier output, and the terminal result to contain every chunk exactly once.
How should this be tested?
./mvnw test -pl zeppelin-server -Dtest=AppendOutputRunnerTestcd zeppelin-web-angular npm run test:shell -- src/app/core/paragraph-base/paragraph-output-state.spec.ts projects/zeppelin-sdk/src/interfaces/message-data-type-map.interface.spec.tsThe browser test runs a shell paragraph that prints three chunks separated by 3 and 5 seconds. It verifies that
firstis visible while the paragraph is RUNNING,secondis appended while the paragraphremains RUNNING, and the FINISHED result contains
first,second, andthird.The capture replay additionally verifies coalesced APPEND chunks, APPEND before a typed UPDATE, UPDATE overtaking a queued APPEND, APPEND after the terminal
PARAGRAPH, and terminal fallback whenzeppelin.websocket.paragraph_status_progress.enable=false.Questions: