Unreleased - ReleaseDate
2.2.1 - 2024-07-22
- It is now possible to retrieve part of a file using
OcflObjectVersionFile.getRange()
. #118
- Updated dependencies
2.2.0 - 2024-07-15
- Support of file size based fixity entries: #116
- Breaking: Builtin digest algorithms must now be specified like
DigestAlgorithRegistry.sha256
instead ofDigestAlgorithm.sha256
.
2.1.0 - 2024-04-11
ObjectVersionId.equals()
no longer throws an error for HEAD versions: #110- Deleting an object in S3 that contains more than 1,000 files now works.
- Writing to files with identical content and writing the first file a second time to the same version no longer causes the staged file to be erroneously deleted.
- Breaking: A
S3AsyncClient
S3 client now must be used with ocfl-java-aws, and the sync version is no longer supported. - Breaking: A
S3TransferManager
must now be set when using S3 storage. - ocfl-java-aws now uses the S3 Transfer Manager to upload files to S3. See the usage guide for more details.
- ocfl-java-aws now concurrently uploads files when writing an object to S3. This should improve object write performance.
- The
OcflObjectUpdater
was updated to be thread safe, enabling concurrently writing files to it. This may speed up writing a large number of files to an object. See the usage guide for more details.
2.0.1 - 2024-03-01
- Mutable head revision writes were failing if they only add a file with content that was already present in the object: #105
- Updated dependencies
2.0.0 - 2023-05-17
- Delete old revision markers after creating a new mutable HEAD revision: #91
- Use an AtomicBoolean to track if the repository has been closed: #87
- Renamed the package root from
edu.wisc.ocfl
toio.ocfl
- Prefer
Files.find()
toFiles.walk()
: #92
1.5.0 - 2022-10-09
This release adds support for OCFL spec version 1.1. By default, all newly create repositories will now be OCFL 1.1 repositories. Existing repositories will not be upgraded automatically. See Upgrading OCFL Repositories in the readme for details on how to upgrade existing repositories and objects.
There are no functional differences between 1.0 and 1.1. The 1.1 release mostly clarifies some of the 1.0 language so that it is more explicit.
1.4.6 - 2022-02-11
- Always validate content paths so that files outside of an object can never be accessed #70
1.4.5 - 2022-02-04
- The new
0007-n-tuple-omit-prefix-storage-layout
implementation was missing a setter, causing it to fail to deserialize #69
1.4.4 - 2022-01-28
- Fixed how the max zero-padded version is calculated #66
1.4.3 - 2022-01-25
- MariaDB startup no longer fails if the DB tables exist and the user does not have permission to create them #62
- MariaDB now uses MEDIUMBLOB #62
- 0007-n-tuple-omit-prefix-storage-layout support #58 and #64
- Updated dependencies
1.4.2 - 2021-01-05
- Optimized repository initialization when using S3 storage #57
1.4.1 - 2021-11-10
- When using S3, the key prefix was calculated incorrectly when listing the repository root in the root of a bucket #55
- When using S3, paged list results were not being fully loaded #55
1.4.0 - 2021-11-03
- Fixed a bug in the omit prefix extension that would result in incorrect paths being generated when a multi-character delimiter is used but not found in the object id https://github.com/UW-Madison-Library/ocfl-java/commit/b24159acc2030d59e35c6a5e0d9daef92d41fba0
- Added support for MariaDB #53 (thanks @MormonJesus69420)
- There was a large refactor to the storage layer to make the code more reusable (#52). This resulted in a small breaking change to how repositories are initialized, and perhaps more extensive breaking changes if you had extended ocfl-java's internals. The following is an example of how you'd now initialize a local filesystem based OCFL repository:
new OcflRepositoryBuilder()
.storage(storage -> storage.fileSystem(repoDir))
.workDir(workDir)
.build();
1.3.1 - 2021-09-29
- There was a bug introduced in
v1.3.0
where duplicate files either copied or streamed into nested paths would leave empty directories in the version content. For example, writing a/b/file.txt, where file.txt is a duplicate of a file already in the object, would result in the empty directories a/b being left in the version. (#50)
- Small validation optimizations (#49)
1.3.0 - 2021-09-28
- When validating an object, if a version directory did not have an inventory file, then the contents of its content directory were not validated (#48)
- Added
verifyStaging
configuration option, which controls whether the contents of a newly constructed version are verified immediately prior to moving the version into the object. Default:true
(#46) - Added
verifyInventoryDigest
configuration option, which controls whether inventory digests are verified on read. Default:true
(#46) - Removed unneeded file existence checks (#46)
DefaultOcflObjectUpdater.writeFile()
now streams the file directly the its staging location rather than a temp location first (#46)- Updating objects by copying files now computes the digest of the files while copying into staging and then deletes the file after the copy if it's a dup, rather than computing the digest first and then deciding whether to copy. (#46)
- Streamlined the S3 logic, reducing the number of list operations, particularly when reading an inventory. (#46)
- Removed
checkNewVersionFixity
configuration option. This option was disabled by default and controlled whether or not staged content files had their digests checked immediately prior to moving them into the object. This check was completely removed. (#46)
1.2.3 - 2021-09-08
- There was a bug in the validation logic, causing it to fail to validate objects with many versions: #45
- There were a few unbuffered input streams, causing performance problems. I added buffers to all streams to be on the safe side (some of the buffering should be handled by the core lib): https://github.com/UW-Madison-Library/ocfl-java/commit/94a52ed4629fd5ef43a5e8ff6d91237efbbc9eef
1.2.2 - 2021-08-31
- Update api models so that they can be serialized with jackson: #44
- Update dependencies: https://github.com/UW-Madison-Library/ocfl-java/commit/e518d9564235a0bdc10b0ebcba99a76fcdaa9b99
1.2.1 - 2021-07-26
- Added 0006-flat-omit-prefix-storage-layout extension implementation: #43
- Update dependencies: https://github.com/UW-Madison-Library/ocfl-java/commit/3ed5e95364c8e9778db7e9f175c033ba79943bce
1.2.0 - 2021-06-25
- Custom layout extensions may now provide a spec: #41
- The repository may now be configured to create zero-padded version numbers: #42
1.1.1 - 2021-04-30
- Added an unsafe operation for adding files to objects without calculating their digest: https://github.com/UW-Madison-Library/ocfl-java/commit/9b8fbcc0b8696b1b5f17d56d19afe414b881a692
- Changed how the DB object lock works. If you were using the DB lock, you must drop your existing lock table to use this version of
ocfl-java
: https://github.com/UW-Madison-Library/ocfl-java/commit/857b247abd08307a896dc019ff0f9a36490b2f4f
DROP TABLE ocfl_object_lock;
- Fixed a couple of validation codes: https://github.com/UW-Madison-Library/ocfl-java/commit/549bd4a81abb66df13eb91c7645e32c060afb9bd
1.0.3 - 2021-04-05
- Object validation API: https://github.com/UW-Madison-Library/ocfl-java/commit/1dd8f57c3b5a6e0f34bea84267670ddb935bfeac
- Ensure inventory ID matches expected ID: https://github.com/UW-Madison-Library/ocfl-java/commit/1832e7d2c6dd48fc88b8030d8fb4a0d65416bd81
- Do not create version content directories when a version has no content: https://github.com/UW-Madison-Library/ocfl-java/commit/9248c1b2974de9c30ed3508a67d310530291ee35
- Allow
fixity
block to be null: https://github.com/UW-Madison-Library/ocfl-java/commit/1832e7d2c6dd48fc88b8030d8fb4a0d65416bd81 - Fix junit-params scope: https://github.com/UW-Madison-Library/ocfl-java/commit/aaee98af0e5296a485f3026ca1deb8572c3dcdc2
1.0.2 - 2021-03-17
- The OCFL extensions spec is now written to the storage root (https://github.com/UW-Madison-Library/ocfl-java/commit/ec2d62e7161a05b99feda7ccf736828a27dad295)
- The inventory digest is now calculated as it's being serialized to disk (https://github.com/UW-Madison-Library/ocfl-java/commit/3a202ba44f5e78061a74d97027df6e7d32069cad)
- Added new APIs for invalidating the inventory cache, if it's used. These methods will also clear out the object details table, if used. (https://github.com/UW-Madison-Library/ocfl-java/commit/9aa2bb6c5f956943207ab3a99090598fb153d5be)
- Do not iterate into the
extensions
directory when listing objects (https://github.com/UW-Madison-Library/ocfl-java/commit/c1d3732d3ee8e2744085333a2c1b1a1ff9d175f2) - The object details table will now always be populated with an identical copy of the inventory to what's on disk (https://github.com/UW-Madison-Library/ocfl-java/commit/3dc5ea48ae879292832d43eb5f7488642486a0ea)
- Exporting an object/version from S3 now correctly resolves path prefixes (https://github.com/UW-Madison-Library/ocfl-java/commit/779efd14b10c2be38660c63e841bf1aa35a6b579)
1.0.1 - 2021-02-08
- https://github.com/UW-Madison-Library/ocfl-java/commit/eba5583f9bd1093eddd1b2777765135a9937ed0a: Moved
unsupportedExtensionBehavior
definitions up to the repository builder level from the storage layout builders.
1.0.0 - 2021-02-05
- Changed the mutable HEAD extension name: https://github.com/UW-Madison-Library/ocfl-java/commit/da0017f881c187199cc0f7bb24df71eb3598c5a1. This version of
ocfl-java
will not read any existing objects that contain a mutable HEAD. The name was changed to match the name in the final, approved version of the extension and will not change again.
- Configure the behavior of unsupported extensions: https://github.com/UW-Madison-Library/ocfl-java/commit/779e60eb5bf9e9231a2b61e7114cf6ce293191e1. By default,
ocfl-java
will fail when it encounters an extension that it does not support. This behavior may be configured to simply ignore these extensions, if desired.
- Allow for multiple spaces in the inventory side car: https://github.com/UW-Madison-Library/ocfl-java/commit/f01434ae09e43bc7bb564b82f42eb23866adb824. Previously, the inventory side car parsing logic only worked if the file contained a single space separator. It now correctly accepts any number of spaces.
0.2.0 - 2020-12-28
- Layout extensions are updated to conform to the latest extension spec: https://github.com/UW-Madison-Library/ocfl-java/commit/244abe022fc1f20f18e74717ec4c72b315f5549f. This means that layout configs are now stored at
extensions/NNNN-extension-name/config.json
, and any old configs will not be loaded.
- Programmatically specified layout configurations are now treated as defaults and will be ignored if the repo has a layout config specified on disk: https://github.com/UW-Madison-Library/ocfl-java/commit/4b13382d9f95211393bc9c9a71903828c658a716
- The table names of DB tables are now configurable: https://github.com/UW-Madison-Library/ocfl-java/commit/8f65d51889ef63667e7a3d6ebb898f1c6744af21
- There is a new hook for modifying S3 requests: https://github.com/UW-Madison-Library/ocfl-java/commit/e7d006f96da8bca8aed02028afb44a9b941228e9
- Fixed a bug where verifying the fixity of a file that was streamed into the object would fail: https://github.com/UW-Madison-Library/ocfl-java/commit/0cfb06e8566a2903944121b21a91b4cba1cce7d4
This is a preliminary release of ocfl-java. All major functionality is in place. However, there will be a few breaking configuration changes prior to the v1.0.0 release, specifically in regards to configuring storage layouts.