Table display performance & persistent selection#4
Merged
Conversation
Changes to data handling to render a single item set instead of the duplicate share/copy tables - reducing the DOM and HTML payload and improving page load times. Builds an in-memory row index so the tree/selection walks run in O(n) instead of O(n²), taking operation switching from >30s to <1s. Improved text filter performance by computing row visibility from a model rather than read from layout. The filter is debounced and matches pre-cached text to eliminate the per-keystroke stutter. Result: load, operation switching, filtering, and select/deselect are all fast at 10k+ sessions, with no change to the data shown.
…i-scan sessions
The streaming zip producer treated the consumer closing the pipe as a fatal error. DicomZipImporter reads the DICOM entries and closes the read end without consuming the zipped trailing central directory.
In sessions with enough scans to exceed the 64 KB pipe buffer the producer's final write threw IOException("Pipe closed"), surfacing the error in the process monitor.
- The fix separates source-read errors from write errors in the producer, and flushes the zip's central directory on close.
kathrynalpert
approved these changes
Jun 4, 2026
| } | ||
|
|
||
| boolean byProject = (sourceProjectId != null); | ||
| String safeProj = byProject ? sourceProjectId.replaceAll("[^A-Za-z0-9_\\-]", "") : ""; |
There was a problem hiding this comment.
I realize you inherited this, but It'd be nicer to do this as a parameterized query
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.
Subject/session checkbox selections now persist when changing operation settings. Active selection is captured between operation switch to restore selected checkboxes upon operation change.
Changes to data handling to render a single item set instead of the duplicate share/copy tables - reducing the DOM and HTML payload and improving page load times.
Builds an in-memory row index so the tree/selection walks run in O(n) instead of O(n²), taking operation switching from >30s to <1s.
Text filter lag reduced by computing row visibility from a model rather than read from layout. The filter is debounced and matches pre-cached text to eliminate the per-keystroke stutter.
Uncovered issue Some session transfers display a 'pipe error', even though they complete the reimport process successfully #3 when testing with large sessions (100s of scans). DICOM files are now piped through the stream buffer individually. Read and write errors are handled separately, allowing for clean end-of-file zip stream.
Result: load, operation switching, filtering, and select/deselect are all fast at 10k+ sessions, with no change to the data shown. Checkbox selection is retained through operation and project destination changes.
Note that ROADMAP.md was updated with the acknowledgement that a selection tree is really not the right choice for 10k item selection. A future version will include cohort building UX - either natively or via Conduit improvements.