Repository navigation
Conversation
NotebookReadPort is a NotebookPort whose snapshot is NotebookReadSnapshot. The private read host now declares its port with it, so a remote can read the read status and note without a cast while it keeps the same port object.
|
I reproduced the serial/parallel difference described in the PR using a Linux Java 11 backend with
Three failures occurred during checkpoint creation (HTTP 500), with corresponding server logs showing a Adding these scenarios to CI may involve more than extending the test selection—for example, a dedicated frontend CI job and server/Git repository isolation between parallel workers. Given that scope, I think this would be better addressed in a follow-up. |
| }; | ||
|
|
||
| export const NotebookReadSkeleton = ({ core, onError, ...props }: NotebookReadSkeletonProps) => ( | ||
| <ReactErrorBoundary onError={onError}> |
There was a problem hiding this comment.
I confirmed that the view does not recover when navigating to another note after a post-mount error.
With note A displaying normally, I injected an error using the existing test-only failure prop, then cleared that prop. Navigating to note B within the same entry successfully fetched B and brought the host to ready, but the view remained empty. Leaving for the home page and reopening B restored the view.
Since this boundary receives no resetKey, it retains the previous error state across note changes. Even after the error condition is removed, opening another note does not recover the view; a fresh entry is required.
What is this PR for?
Mount the React notebook read skeleton on the existing notebook URL, with an entry-time fallback to the ZEPPELIN-6737 Angular read view on the same host.
?notebookCoreRead¬ebookCoreReact, also under/revision/<revisionId>notebookCoreReact: the private route shows the ZEPPELIN-6737 view as beforenotebookCoreRead: the editable notebook route is unchanged?reactpath is not publishedTyped read port
NotebookReadPort(zeppelin-notebook-core): aNotebookPortwhose snapshot isNotebookReadSnapshotNotebookCoreReadHost.portnow has this type. It is the same frozen object and still fits wherever aNotebookPortis expectedNotebookReadProviderpasses that exact object toNotebookCoreProvider(ZEPPELIN-6726) and exposes it touseNotebookReadSnapshot(), so the remote reads the read state without a castReact skeleton (
./NotebookReadSkeleton)onMountedonce after its first commit. This means the mount completed, not that the notebook is readyReactErrorBoundaryandonErrorfailure: 'mount' | 'after-mount'throws during the first render, or on the first render after the mount completedEntry and fallback (
NotebookCoreEntryComponent)canMatchguard (ZEPPELIN-6737)NotebookCoreReadHostfor the route lifetime: opens the note or revision from the route parameters and disposes the host onceNotebookCoreReadComponentnow receives that host as a required input and no longer opens or disposes itReactMountDirectivewith the shared loader and timeout), never bothparagraphquery parameter, the failure value,onMountedandonError. The React view does not read the URL itselfdata-rendererangularnotebookCoreReact: the Angular read viewreact-loadingreact-mountedangular-fallbackruntime-errorruntime-errorleaves the view empty on purpose: the issue rules out an automatic switch after the mountparagraphin the URL but does not scroll to it, because the ZEPPELIN-6737 view has no anchor handlingnotebookCoreReaddestroys the entry, which disposes the host and its subscriptions, and the editable notebook loads the note itself. This is not the same-port fallbackWhat type of PR is it?
Feature
Todos
NotebookReadPortand read it in React throughNotebookReadProvideranduseNotebookReadSnapshot./NotebookReadSkeletonremote with a single mount report and test-only failure injectionnotebookCoreReactflagWhat is the Jira issue?
https://issues.apache.org/jira/browse/ZEPPELIN-6727
How should this be tested?
From
zeppelin-web-angular:Real-route Playwright (
e2e/tests/notebook/core-read/notebook-core-entry.spec.ts, 13 tests; Chromium, one worker, local server with Git notebook storage):conf/shiro.ini.templatewithadminadded touser1, as in CI): 13 passed, and 39 passed over three repeatsnotebook-core-read.spec.ts: 7 passed and 1 skipped anonymous, 8 passed authenticatedremoteEntry.jsto an abort, a 404 or a request that never answers. Each fallback test waits for that request, so the Angular view is a fallback rather than the no-flag viewNot run locally:
read-fixtures.spec.ts(@live, needs a capture server)Revision tests on CI:
VFSNotebookRepo). The Git storage step runs onlyrevision-isolation.spec.tsnotebook/.git/indexlock, the ZEPPELIN-6737 test as wellScreenshots (if appropriate)
Questions: