-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Reduce calls to RandomAccessFile.setLength in NIOFileHandle #15
Conversation
Sorry for the delay @melissalinkert, slowly getting back to this. Is there a minimal example consuming the |
I'd expect that something as simple as:
would be noticeably faster with this PR. |
The code looks good and the solution is effective without being a major overhaul. Testing using the sample code suggested provides a substantial improvement in performance. Without the PR:
With the PR:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good and should be ready to merge. In terms of integration:
- one question about the impact of propagation of this feature up the stack
- more generally, in order to cut a new
ome-common
release, we should agree on whether the changes made in Location NPE fix #12 should be supplemented with some backwards compatible API - see https://trello.com/c/Ym1HWlQG/159-ome-common-location-exception /cc @dgault
@@ -105,6 +105,8 @@ | |||
/** The original length of the file. */ | |||
private Long defaultLength; | |||
|
|||
private long effectiveLength; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Am I correct in assuming that the addition of a private field means this would break serialization when propagated up to the Bio-Formats stack
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not necessarily - readers shouldn't be caching open file handles, so I wouldn't think instances of NIOFileHandle
would be present in memo files. For example:
Probably merits a test before bumping the ome-common
version number in Bio-Formats though, to be safe.
Using the following
and running From an integration perspective, this makes this PR eligible for an inclusion in a patch release of Bio-Formats. The main issue is the ongoing discussion on #12 (see https://trello.com/c/Ym1HWlQG/159-ome-common-location-exception) and the fact more discussion/configuration might be required before propagating the latter changes. In order to move forward, my proposal would be to revert #12, merge this into |
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#824 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/824/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#518 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/518/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#825 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/825/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#826 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/826/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#519 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/519/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#827 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/827/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#520 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/520/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#828 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/828/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#521 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/521/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#829 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/829/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#522 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/522/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#834 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/834/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#527 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/527/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#835 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/835/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#528 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/528/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#836 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/836/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#529 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/529/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#837 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/837/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#530 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/530/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#838 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/838/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#531 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/531/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#839 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/839/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#532 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/532/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#840 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/840/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#533 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/533/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#841 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/841/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#534 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/534/)
Repository: ome/ome-common-java Already up-to-date. Merged PRs: # PR 16 rleigh-codelibre 'Java 9 build support' # PR 21 melissalinkert 'Revert PR ome#15' Generated by OME-FILES-CPP-DEV-merge-push-superbuild#842 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-merge-push-superbuild/842/)
Repository: ome/ome-common-java Excluded PRs: # PR 21 melissalinkert 'Revert PR ome#15' (user: melissalinkert) # PR 16 rleigh-codelibre 'Java 9 build support' (user: rleigh-codelibre) Already up-to-date. Generated by OME-FILES-CPP-DEV-breaking-push-superbuild#535 (https://ci.openmicroscopy.org/job/OME-FILES-CPP-DEV-breaking-push-superbuild/535/)
Instead of calling
raf.setLength
with the exact length required for the current write, this increases the length byNIOFileHandle.getBufferSize()
in anticipation of future writes.NIOFileHandle.close()
then reconciles any discrepancy between the actual and expected file lengths, so that there are no extra bytes in the file. This was the least invasive change I could think of, but happy to discuss if anyone has other thoughts.See https://trac.openmicroscopy.org/ome/ticket/6931 and https://trello.com/c/OimiHAQY/175-profile-tiff-writing-on-windows. This does have a noticeable impact on the performance of
bfconvert
on Windows; in the test case on the ticket, local Windows times are now down to ~52s vs ~95s.