Skip to content

Shard support - #177

Merged
cmhulbert merged 456 commits into
masterfrom
dev/sharding-squash
Nov 5, 2025
Merged

Shard support#177
cmhulbert merged 456 commits into
masterfrom
dev/sharding-squash

Conversation

@bogovicj

@bogovicj bogovicj commented Nov 3, 2025

Copy link
Copy Markdown
Contributor

Note: we'll squash or rebase the commits below if / when we decide to merge.

motivation

This PR aims to support sharding through readBlocks and writeBlocks methods. One priority was to enable re-use of the code here in n5-zarr, because the n5-format will not support sharding.

It does NOT seek to expose any shard-specific API methods (e.g. readShard, writeShard, deleteShard), nor does it make a decision about whether / how to introduce parallelism into the n5 "core" API
as discussed here.

The API here does expose the information needed for developers to write parallel code.
For example this method in n5-imglib2, parallelizes over shards or blocks as appropriate.

We should consider extending this in the future, but again, this factor was not a priority for this PR in particular.

outline of changes

  • add N5KeyValueReader.getAttributesKey enables n5-zarr to better re-use code here
  • shard shard support
    • add and implement readBlocks, writeBlocks
      • aggregate blocks by shard when appropriate
    • RawShard stores the raw (compressed) shard data into segments that represent the blocks and index
    • RawShardCodec encodes / decodes RawShards to and from ReadData
      • SegmentedReadData tracks which part of shard data should be "grouped"
      • ShardIndex tracks which byte ranges correspond to particular blocks
    • DatasetAccess abstracts reading / writing blocks from shards / files (the DefaultDatasetAccess)
    • PositionValueAccess is the layer between block coordinates and the KeyValueAccess
    • DeterministicSizeDataCodecs enable compile-time validation of DataCodecs for the shard index.
  • many new tests for the new functionality
  • assorted code cleanup

behavior

Note: when referring to partial reads below, they are partial only if allowed by the backing KeyValueAccess.
Behavior is unchanged for un-sharded datasets, for sharded datasets:

readBlock

Partially read the shard index, partially read the encoded block, decode and return.

readBlocks

High-level behavior is identical to calling readBlock multiple times and returning the collection but aggregates operations per shard.

At a lower level, it performs one partial read for the shard index and one partial read for each requested block.

writeBlock

If no shard exists, create a shard index containing the one block. Encode the block, write the one block and the index.

Otherwise:
Read the data for the entire shard and decode to a RawShard, and add the encoded block data to the raw

  • replaces existing data for the block at that position if it exists
  • this updates the shard index

write all the data.
This does not decode / encode blocks that are not touched.

writeBlocks

High-level behavior is identical to calling writeBlock multiple times and returning the collection but aggregates operations per shard, i.e. Calls writeBlock once per unique shard - i.e. has one read and one write operation per unique shard.

extensibility

The use of codecs in this and previous PRs made the implementations in n5-zarr simpler. For example, the padding of "incomplete" blocks needed for zarr is now handled by a codec inserted by the ZarrWriter. As a result, it can directly reuse the writeBlock implementation here.

Example: ZarrKeyValueReader does not have readBlock(s) methods

details: readBlocks

details: writeBlocks

cmhulbert and others added 30 commits April 8, 2025 14:56
…ay be needed when multiple codecs are supported
* remove duplicate license header
* add constants
…ip/codecsReadData

# Conflicts:
#	src/main/java/org/janelia/saalfeldlab/n5/HttpKeyValueAccess.java
…tation

refactor: reduce scope of shard capability. Only support full Shard writes (InMemoryShard) and partial shard reads (VirtualShard)
* not Function
* because the function is DatasetAttributes.relativeBlockPath
* Slices
* SliceTrackingReadData
Co-authored-by: Caleb Hulbert <cmhulbert@gmail.com>
Co-authored-by: tpietzsch <tobias.pietzsch@gmail.com>

commit 552d416f07197325a5341d8f2c69b97bd8aa7521
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Nov 3 15:07:59 2025 -0500

    chore!: rm tentative blockExists method stub

commit 1bb10bb098c67ced598d957ce0f7395843f29525
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Nov 3 15:02:22 2025 -0500

    style!: remove unused classes

    * Slices
    * SliceTrackingReadData

commit 619f308b7ee9d0dd3d85d4e9e0d128ea466a0ecb
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Nov 3 15:01:39 2025 -0500

    style!: rm unused method registerGson

commit 06a1e2d60a6ecbe52f114c92120631825229a29e
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Nov 3 11:06:31 2025 -0500

    test: rm unused testWriteReadShardOnUnshardedDataset

commit ef2de58ec7141a02e15cd5a33543ae67df99f609
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Nov 3 10:56:58 2025 -0500

    refactor!: PositionValueAccess takes DatasetAttributes

    * not Function
    * because the function is DatasetAttributes.relativeBlockPath

commit ebca3401df63870376e32f6362fcd26f90a396c8
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Nov 3 10:20:11 2025 -0500

    BREAING!: rm GsonKeyValueN5Reader.absoluteDataBlockPath

    * moved to PositionValueAccess

commit 0dff84989df182e8a75449efc6f8f5e514585aa0
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Nov 3 10:18:55 2025 -0500

    feat!/test: clean up N5Writer delete implementation

    * refactor tests in shardstuff

commit 5f23b09d592db214a4c4af2f34bd5135819e7ecc
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Nov 3 10:02:32 2025 -0500

    test: clean up ShardTest

commit 1ea9da21cf5f731e7856254c75ff24f29fda1b4b
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri Oct 31 16:16:59 2025 -0400

    doc: correct DatasetAttributes.getDatasetAccess

commit 2e5d86b83f65e33a1f7b52542682c1e1fb6f043b
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 29 15:14:29 2025 -0400

    test: update tests to work with less accessible DatasetAccess

commit 162309cbcf6c544f5659262e37ffda42cce2a5da
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 29 15:12:31 2025 -0400

    feat: add getNestedBlockGrid method to DatasetAttributes

    * getDatasetAccess no longer public

commit 1de7b706598640f06a39f330e6d9a6667075c2d8
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Wed Oct 29 14:00:01 2025 -0400

    fix(test): don't specify relative paths for createTempN5Writer; in this case, default is fine

commit 380964c6d4cae6bd991c80a6c8c51c92112062ca
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri Aug 16 14:00:54 2024 -0400

    test: start of partial read benchmarks

    Signed-off-by: Caleb Hulbert <cmhulbert@gmail.com>

commit ddcc821f153bfa997d212ef148bc3d53df999b85
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 29 13:05:37 2025 -0400

    test: add extensible method that defines illegal characters

commit 152aef6b8f50f6a3153b69e0a0cf9ec219c01efe
Merge: e9ece6e 7fe7749
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 28 10:35:00 2025 -0400

    Merge branch 'development' of github.com:saalfeldlab/n5 into development

commit e9ece6e21d2fdd47ecd9461100b9ea04d72ba0a5
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 28 10:34:47 2025 -0400

    doc: improve Nesting.positionInSubGrid doc

commit a4f8b4c7fee2f2cdefbfd63e45cde2697c0dfb9d
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 28 10:34:25 2025 -0400

    test: generalize ShardTest for n5-zarr re-use

commit 7fe774905e05ec9d5432881298d67b5c128d5e34
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Oct 24 16:59:54 2025 -0400

    feat(test): change test size defaults so the dimensions are larger than the blocks;

    add tests for blocksize/dimensions edge cases

commit 574127b32b4cd4f37430901edfdc70c4e68c086c
Merge: 14cd4f5 8442671
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Thu Oct 23 15:19:48 2025 -0400

    Merge branch 'feat/attributesKey' into development

    # Conflicts:
    #	src/main/java/org/janelia/saalfeldlab/n5/DatasetAttributes.java
    #	src/main/java/org/janelia/saalfeldlab/n5/GsonN5Reader.java
    #	src/main/java/org/janelia/saalfeldlab/n5/GsonUtils.java
    #	src/test/java/org/janelia/saalfeldlab/n5/http/HttpReaderFsWriter.java

commit 844267138974525b795e0573ba8b136641f9e1fa
Merge: f1e82a7 41fb0e5
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Thu Oct 23 14:37:44 2025 -0400

    Merge branch 'master' into feat/attributesKey

commit 14cd4f5762ca1e91aa3778104d5cb35f43e911d0
Merge: 685eabe 41fb0e5
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Thu Oct 23 13:57:46 2025 -0400

    Merge remote-tracking branch 'origin/master' into development

    # Conflicts:
    #	src/main/java/org/janelia/saalfeldlab/n5/KeyValueAccessReadData.java
    #	src/main/java/org/janelia/saalfeldlab/n5/readdata/segment/SegmentedReadData.java
    #	src/test/java/org/janelia/saalfeldlab/n5/readdata/segment/SegmentTest.java

commit 685eabe960664881bd4a499d229f261c10364220
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 22 22:03:31 2025 -0400

    feat: add NestedGrid.positionInSubGrid

commit d53b7a6de4276ab9caf03142d5e75733f7a01156
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 22 17:56:30 2025 -0400

    test: additions to ShardTest

commit 26576f248c324fd7054e96d6010a2dabc83405b5
Merge: 8b9a85f fc4a1ec
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 22 17:05:32 2025 -0400

    Merge branch 'development' of github.com:saalfeldlab/n5 into development

commit 8b9a85fe039c6dbd2b8d8fb977aa7a2c85b50f46
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 22 17:05:28 2025 -0400

    test: more NestedGrid tests

commit fc4a1ec97e2642a19a1cc977bb6502ef2998c659
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Oct 22 22:37:58 2025 +0200

    clean up

    Better to not have a default implementation for requireLength().
    The details are different and tricky enough between ReadData
    implementations to encourage thinking about every case individually.

commit 8a491ef41a986d7c347dd2f7b019ee97cbe54221
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Oct 22 22:29:51 2025 +0200

    typo

commit 5eab7660bfb74cbac3fda4a773f0b330fd0d3ff4
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 22 16:09:28 2025 -0400

    refactor/doc: NestedGrid

    * rename NestedGrid fields
    * add some basic javadoc

commit 0b8ffed749064807ea8ecd4bbf97f672a8546b1f
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Oct 22 22:06:37 2025 +0200

    javadoc

commit 15c5768a1e606fd5ab850e7cffe07d42dd1ab03c
Merge: 7120b38 387a10b
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 22 13:42:38 2025 -0400

    Merge branch 'development' of github.com:saalfeldlab/n5 into development

commit 7120b3875f06f132ae19f6d7d5ac75634f4699c5
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 22 13:42:30 2025 -0400

    test: update getTestAttributes given dstAttribute changes

commit 9186e2d066caa7597c93ce72fee845d01874ff8b
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 22 13:42:12 2025 -0400

    fix: DefaultShardCodecInfo's serialization

    * default serialization should be for zarr

commit 6c99a00dbe75b306f9f2f6a241341a0a81db3b19
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 22 13:41:23 2025 -0400

    wip!: DatasetAttributes changes

    * remove constructor with shard size
    * createDatasetAccess method now protected (for zarr)
    * rm defaultShardCodecInfo (n5 format does not use it)

commit 80d9e01dab6e10802f5fff0df13f6b187b0de1ff
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 22 13:39:45 2025 -0400

    fix: IdentityCodec implements DeterministicSizeDataCodec

commit 387a10b8b32dad10ed97cfb2c87597b29b968698
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Oct 22 13:00:36 2025 +0200

    javadoc

commit e980a041f8689c857b40d3db6d4633fe5504de47
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Oct 22 12:17:17 2025 +0200

    Add static Range.equals() to check two Ranges for equality

commit d987cd461608fce2e3415c00175cefc63d8cc3f7
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Oct 22 12:16:40 2025 +0200

    augment and document concatenate test

commit de5ec1a98f710d02018a4b48202142866cd49081
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Oct 22 10:30:22 2025 +0200

    refactor: rename Concatenate to ConcatenatedReadData

commit f807bd767f86ec4f2e157a9b9754e79ffb3dcec3
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Oct 21 21:51:52 2025 +0200

    javadoc

commit 81a4890c9f5a7b2a02db18c9d894393ff0a65eff
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Oct 21 13:03:22 2025 -0400

    fix: return empty list for readBlocks over nonexistent blocks, not null

commit a4ea057148cc54f2d29ef24fb435a9af2d491ce1
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Oct 21 16:57:53 2025 +0200

    refactor: rename SegmentLocation to Range and move to readdata package

commit 6fb023c95250419816385601834a32b8c73608f0
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Oct 21 16:49:31 2025 +0200

    refactor: Make DefaultSegmentLocation a local class

commit d3b111a3f0a14f4edb8ddfab9d4e1ac8f94ca9ef
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Oct 21 13:41:30 2025 +0200

    Use SegmentLocation.at instead of constructor

commit c8f0cad53778fa55b228e74bc16dd94c777e8e21
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Oct 21 13:24:44 2025 +0200

    clean up imports

commit 4d2d201413fb6361e47747565ab101c5c136033f
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Oct 21 13:11:13 2025 +0200

    javadoc

commit 5a1d57c5ce0803d59033c478310091495d96a239
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Sep 23 21:31:47 2025 +0200

    DefaultSegmentedReadData forwards prefetch() to delegate

commit eeca2a4f02b8aab864c1d7823655ff2dcf3e2f4f
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Sep 23 21:28:00 2025 +0200

    Add prefetch() to ReadData interface

    default implementation does nothing

commit efc6b5770d7e5a007e48d76dabc740591455a1e7
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Sep 23 21:21:25 2025 +0200

    Remove redundant modifier

commit 7c5b609ef74a23975a06475f51c4d41073e205ed
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Oct 21 12:29:36 2025 +0200

    clean up

commit 10fc3df0da66da5ac3a29ebec4c957d9bddbda4d
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri Oct 17 15:01:07 2025 -0400

    refactor: rm old shard classes, shardstuff -> shard

commit 24a75d6006b4341862336bcfc753774b5f7fe887
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri Oct 17 14:22:57 2025 -0400

    test: AbstractN5Test fix random seed

commit 1f13153f0301ccc7cb23c97f04b05eace6b261d3
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri Oct 17 14:20:27 2025 -0400

    refactor: rename ShardedDatasetAccess to DefaultDatasetAccess

    * move creation into DatasetAttributes

commit 16cd811e3d41944b73a6bdbcc3bb82948a5413b2
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Thu Oct 16 13:04:24 2025 -0400

    feat: StringDataBlock uses UTF_8 encoding

commit ace0b16a439ac9387cb89ad5b6ef1a4f905d4476
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Thu Oct 16 10:52:42 2025 -0400

    test: remove hard-coded compressor for testOverwriteBlock

commit 61e6075ab9bb112bf0aad86f2b0cf09d10f933cc
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Thu Oct 16 10:52:25 2025 -0400

    fix: NameConfig.Names should not collid with CompressionType name

    * because Compression is also a DataCodecInfo
    * causing serialization issues for zarr

commit 6e2dfd364acb68c859e281d3c4f7b514f05e33db
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 14 16:41:38 2025 -0400

    feat: DatasetAttributes can map grid positions to relative path

    * necessary for zarr's dimensionSeparator
    * use this in PositionValueAccess

commit f5385ba686be1123dde7871f791dc04c6a45b739
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 14 16:34:38 2025 -0400

    feat: add block / data codecinfo getters

    * useful for zarr

commit e73ecd3ee41b88e6e02fbf2ff07ba20bd339696b
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 14 16:34:06 2025 -0400

    DatasetAttributes clean up

commit 98d7618080fca32357f382822bb99a38ee297a11
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 14 16:32:32 2025 -0400

    n5.list returns a sorted list

commit feb70afebd049746b95c954952bc5b11a47b9341
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 14 16:32:12 2025 -0400

    createDataset takes Block/DataCodecInfos

    * and has a default BlockCodecInfo
    * guard against null dataCodecInfos

commit a379ed400bc17351b54d85019b787aa7e08de5ab
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 14 16:29:44 2025 -0400

    remove read/write Shard implementations

commit 901642c0d78b41e5d7084fa898ad2cb3e503c9c0
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 14 16:24:14 2025 -0400

    test: ignore testWriteInvalidBlock for the moment

commit 493db08e279ebe577cdf90f001c8b717495835aa
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 14 16:23:03 2025 -0400

    remove read/write/delete Shard interface methods

commit c940ebbb5b641c2d40f12792edab3ce694a68807
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Oct 14 16:17:22 2025 -0400

    style: rm unused dependencies

commit 7751fade975c1222aa9c4969bbae687c34a1fedd
Merge: 3dcb8f0 ff994d4
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 8 18:07:10 2025 -0400

    Merge branch 'wip/nesting-into-development' of github.com:saalfeldlab/n5 into wip/nesting-into-development

commit 3dcb8f0c28271c54e845d74641aae63e6ca81a63
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Oct 8 18:06:28 2025 -0400

    test: start backward compatibility tests

    * check that old data can be read
    * check that written data matches some specfied version
    * adds legacy data from previous major versions
    * adds scripts to create data for future versions

commit ff994d4c4bf7b222d856fcfd6aea7669806d0a61
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Mon Oct 6 16:11:02 2025 -0400

    feat: nested implementation of readBlocks/writeBlocks

commit 2091dad4ed8682579d3a37c2dd71176262d9d2ee
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Oct 6 16:13:38 2025 -0400

    make DatasetAccess transient

commit e1725361db21fb66d019135492291ff9e7856fff
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Oct 6 16:09:41 2025 -0400

    partially working ShardTest

commit 8f7f5da363ee52caa292c8cae982562d4547ee07
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Oct 6 16:09:30 2025 -0400

    feat: serialization for DefaultShardCodecInfo and RawCompression

commit 6232eda77537e3ba82276de3e64cd837de9be0c2
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri Sep 26 08:24:33 2025 -0400

    fix: ShardedDatasetAccess set existingData to null if no key

commit e61b513f0a0fa164663c75693ecac65c30c2e357
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Sep 24 21:54:57 2025 -0400

    fix: null check on existingData in writeBlockRecursive is not enough

    * when the existingData is a LazyReadData

commit 1db5b73211e25f1b596d58724cf1f7afb3cca52b
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Sep 24 21:53:55 2025 -0400

    fix: ShardedDatasetAccess create method with validation

commit 3d97e94131531eead8604acb21af6ac89fe25401
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Sep 24 15:50:17 2025 -0400

    wip: tmp comment shard related things

commit 07b4b811cbcf7d809a97c2e4e3ac1697d65a19a6
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Sep 24 15:50:01 2025 -0400

    fix: DatasetAttributes build dataCodecInfos from shard size

    * tmp commenting out some shard methods

commit 10b87c2166f1499f4fe10bc4cb2003463f4bf75d
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Sep 24 15:42:00 2025 -0400

    feat: add NestedGrid.getBlockSize

commit ec27cb595471dd146ba319260deca06245c4b4be
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Sep 24 15:38:06 2025 -0400

    fix: Nesting blockSize size checks were backwards

commit 1861cc1891ca3bd4b79c3dc80dc0ae5263918024
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Sep 24 12:02:42 2025 -0400

    fix: use NestedGrid for error checking

    * before building BlockCodecs

commit 552d7123332f94819aea30b78fdd5d4c9fbc2edb
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Sep 24 11:58:00 2025 -0400

    fix: NestedGrid validates blockSizes

commit 8cba4f9face221e30f0a3b4bec98890f273d00ba
Merge: 3ac4f2f 39f1c8a
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Sep 23 15:24:19 2025 -0400

    Merge remote-tracking branch 'origin/nesting' into wip/nesting-into-development

commit 3ac4f2fa01e3e7034a9d46a34b0e033663b1b00a
Merge: f255fd8 6dec879
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Sep 23 15:23:48 2025 -0400

    Merge branch 'nesting' into development

    # Conflicts:
    #	src/main/java/org/janelia/saalfeldlab/n5/DatasetAttributes.java
    #	src/main/java/org/janelia/saalfeldlab/n5/GsonKeyValueN5Reader.java
    #	src/main/java/org/janelia/saalfeldlab/n5/GsonKeyValueN5Writer.java
    #	src/main/java/org/janelia/saalfeldlab/n5/codec/BlockCodecInfo.java
    #	src/main/java/org/janelia/saalfeldlab/n5/codec/N5BlockCodecInfo.java

commit 39f1c8a4c69acef654c21180f2899e7ad29c3fd5
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 22 22:45:21 2025 +0200

    minimal prefetch implementation

commit 97098890e371a5bf166c5fd76596bc56e43ab2a3
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 22 22:36:09 2025 +0200

    Add (empty) prefetch method

commit cc1312a808543b01b06b5025f4e8a0c53e3a3ee6
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 22 11:31:52 2025 +0200

    WIP: Always use SliceTrackingReadData in SegmentedReadData wrapper

commit 2082f86e564970e0769f4334146b3f67d43709df
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 22 21:51:29 2025 +0200

    WIP: Add SliceTrackingReadData

commit e8ce75be41fded5cb34c047758ac421222aba4bf
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 22 21:51:05 2025 +0200

    Slice prefetching math and tests

commit db1928dbf6bef9240eaf2ab3d26a83ff521e4950
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 22 21:47:32 2025 +0200

    Revise SegmentLocation

    Add TODO for potential renaming: SegmentLocation will be uased in other
    instances that require a (offset, length) pair. Therefore, it should
    probably be renamed to "Range" or similar.

    Add convenience method end() == offset() + length().

    Add equals/hashCode for DefaultSegmentLocation.

commit 6dec87911fc7c7b9bc20727179ba020195409914
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Sep 17 20:00:46 2025 -0400

    feat!: use DatasetAccess instead of BlockCodec

    * rm getBlockCodecInfo and getBlockCodec from DatasetAttrubutes
    * add getDatasetAccess
    * use getDatasetAccess in readBlock / writeBlock
    * add PositionValueAccess wrapping KeyValueAccess

commit 373c0ecf3438e121b1e87ca202be1ec4272715de
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Sep 17 19:58:49 2025 -0400

    fix/test: ReadData test for length vs requiredLength

commit 6b284e0746a47946df44fa0848cb9a39c2ab0b8c
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Sep 13 14:38:54 2025 +0200

    RawCompression is a DeterministicSizeDataCodec

commit 73042ccb6c4bd209335bd11d60d24a6e79f6a44b
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Sep 13 14:36:52 2025 +0200

    Concatenation of DeterministicSizeDataCodec

commit ce464735a092f78ed4e9dbc61902777db38d9aa3
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Sep 12 23:41:14 2025 +0200

    Add BlockDodec.encodedSize(int[]) and implementations

commit 500f600dcbf20e946baadebab430c9d3a0d13261
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Sep 12 23:17:40 2025 +0200

    clean up

commit f9645d8762d708e17956fa1eb6b14c1161aa0d61
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Sep 12 23:17:33 2025 +0200

    MAke ShardIndex package-private

commit ca0c9f87f42b88ac38dab7108eaf3b6bca8c6ac9
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Sep 12 23:17:18 2025 +0200

    add TODO

commit cba45a4c97ca24a48cfc809c9db1131bcbaaf9b8
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 22:39:33 2025 +0200

    refactor

commit 76c83c041a48823357b9fbed8304494c2fbf66c2
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 22:37:28 2025 +0200

    refactor

commit dad4adc4ba1d8fe715458b1983a55afcd32076d8
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 22:17:11 2025 +0200

    refactor

commit 9627749976b618f6fce798b80db42d63661ad3eb
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 22:03:00 2025 +0200

    Clean up

commit 6531f00b3d878f19a3dd62faa9e706d20dccae4d
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 21:59:17 2025 +0200

    Add some TODOs

commit 35166d8980a9adccafd88f0772edfb51d9e30d22
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 21:50:46 2025 +0200

    WIP deleteBlock

commit e233eab29c7cfd2ca86ade6336b283ddd60354c7
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 18:10:47 2025 +0200

    WIP testing

commit 09000189aadddce45b6176035a0cc72898fb6c93
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 17:27:49 2025 +0200

    bugfix: ReadData should know its length() after writeTo(OutputStream)

commit 0e00feaae6bebc2845de6bb27be09c28ffc549e1
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 17:23:59 2025 +0200

    WIP testing

commit 8fc92447f9121bf35ce300b6edc663ad85f46054
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 16:40:37 2025 +0200

    WIP

commit b482a4b320bf1b6d417b92872830cb94b45d4c69
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 13:24:16 2025 +0200

    WIP DatasetAccess<T>

commit 353d2ac314c077c5696780c8c7f10b046a6ea12f
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 8 10:28:07 2025 +0200

    WIP

commit a9d9500f230cc28bb935508eca1643a6b5fc6e50
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Sep 7 22:12:10 2025 +0200

    DefaultShardCodecInfo

commit 524b2e75055d6d3c71a98031a9a7a623fbb9d5bf
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Sep 7 22:02:53 2025 +0200

    WIP dummy CodecInfos

commit d3cae93f63732c5dfdfc3e5af653348a8ab3365f
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Sep 7 22:02:35 2025 +0200

    WIP index CodecInfo and location

commit 9b501dd383704a140d0d48536a5f0fa00bd086cd
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Sep 7 20:33:12 2025 +0200

    refactor

commit 2b1a38d38a9b1306052dea1f7eaba820fd519cad
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Sep 6 22:57:46 2025 +0200

    clean up

commit 926348ce13d86b8792582bf6ee2b496eaa80127a
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Sep 6 22:56:48 2025 +0200

    WIP RawShard encoding

commit 69f27ed2590b8c1a8f0441f1986a82fff79b455e
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Sep 6 22:52:25 2025 +0200

    WIP RawShard encoding

commit 9f56850e25ab0baece538f283a7f731521fd9c9f
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Sep 6 22:21:37 2025 +0200

    refactor

commit 8f7e4c301f1268b83dffb6fbc9ecb0796eafd3a7
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Sep 6 21:54:00 2025 +0200

    javadoc

commit e0289b7c2f724f823ecf742f87ec2ff4c02a3954
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Sep 6 21:44:12 2025 +0200

    WIP RawShard deconding

commit 816924cdc243de60eee6860710714452bf7ac619
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Sep 6 21:43:28 2025 +0200

    javadoc

commit 30d9e4069bd6b97dab4b44d7f2b447a92861dc92
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Sep 6 21:43:03 2025 +0200

    clean up

commit 55a0962a501634811cf0c27f5b70c643be90f323
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Sep 6 17:14:11 2025 +0200

    WIP

commit 7f87a746d96c9eb828e6e59d80d23971fafd7eb1
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Sep 5 13:14:25 2025 +0200

    WIP ShardIndex to/from Segments

commit 455afce7be403d9101b0701f9e34070de7cdbdab
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Sep 5 12:54:59 2025 +0200

    WIP

commit d29a4f2e9bb219470bd9a811335052b7e72f670a
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Sep 5 12:54:56 2025 +0200

    Revise DataCodecInfo to take DataType and blockSize instead of DatasetAttributes

    This will make more sense when instantiating from nested ShardCodecs

commit 0b2c658b9de74291439b6af9e8779b73505b4b70
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Sep 5 12:52:54 2025 +0200

    Segment.source() is the SegmentedReadData that originally defined it

    Idea is that this allows to slice() the Segment from its source(), so we
    don't need to keep the sources around explicitly in shard
    implementation.

commit c4ea774f623ecfc2200c803249a125e9b650ab05
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Sep 5 10:06:56 2025 +0200

    WIP requireLength

commit 44d5a75c70f9501f24e932a05dc4c472d4c2f462
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Sep 3 23:21:18 2025 +0200

    Add ReadData.requireLength

commit d719fbbf68d8ae0700a04e1c12ef85e3c698227f
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Sep 4 22:11:43 2025 +0200

    Add ReadData.materialize javadoc (implementation note)

commit 9d641f358564ed27ea62ed88d79420ae9fe1fafb
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Sep 4 10:41:03 2025 +0200

    WIP handle ReadData.slice with length < 0

commit c6019fdbd2e1e7cd9b0f9be16fedb0e2b2aa4997
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Sep 3 22:58:34 2025 +0200

    WIP Concatenate

commit 686da94f0e441015b1fc1a8a6f87f9f3a28992b6
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Sep 2 21:42:26 2025 +0200

    WIP clean up

commit f503f55ceac628ce2f03a379604bf59560dcc492
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Sep 2 21:30:17 2025 +0200

    WIP slicing

commit 02013f44e7e4d3020d3e2fafd0d6f93db5a18b1b
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Sep 2 12:59:48 2025 +0200

    WIP

commit e32e7b07303488520735276a676e4eaa3f2b2c98
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Sep 2 12:49:15 2025 +0200

    Revise ReadData implementations to return itself from materialize()

commit ed349e22d6e1940feca022379a64f098985b882c
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Tue Sep 2 11:32:18 2025 +0200

    WIP SegmentedReadData

commit 77048145abf9f1ceac8bc975e4119d51f9ba1088
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Sep 1 09:06:13 2025 +0200

    wip

commit d041601408be9486b7b26fd8568370f03aaeb4e7
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Aug 31 22:43:58 2025 +0200

    WIP SegmentedReadData

commit 8d2232dfda0931cad1f34fca34315133e912e892
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Aug 30 22:09:12 2025 +0200

    WIP nested decoding

commit 637cb52bb6b5c8a22f0903dbaed4a4bb11fc14ef
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Aug 29 22:19:52 2025 +0200

    WIP nested decoding again

commit 37b51ce51200adc95109a0459372d8d691137afd
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Aug 29 17:24:57 2025 +0200

    WIP NestedPosition

commit f255fd8e0bad4f013e5a2b819eed6e4b5c1cc520
Merge: 1dd88cb 4364b82
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Aug 29 11:14:14 2025 -0400

    Merge branch 'master' into development

commit 1dd88cbddca2555f2a0d7e4af18c6a393768aec8
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Aug 29 09:52:03 2025 -0400

    refactor: large renaming to align with master before merge

commit 4b65d41bd45812dad2292899a4836005bb91d520
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Aug 29 12:30:02 2025 +0200

    WIP NestedGrid

commit 94fdf95350dcee9f938c8cab603aaa772d4acc1f
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Aug 29 08:25:50 2025 +0200

    move WIP to separate package

commit d9e2f373c22a4bae9fef34cc0581a405def3fc91
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Aug 28 21:56:47 2025 +0200

    WIP

commit a97e604c0fb805bf3513335b8d850fde6f8f49da
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Aug 28 18:28:38 2025 +0200

    WIP

commit 72ede5419ff40b43883bedad94b3cd0d0643de73
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Aug 28 17:40:42 2025 +0200

    WIP

commit f8abd61922874d32ccd50f9b0f1b664f3949d11e
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Aug 28 16:59:37 2025 +0200

    WIP

commit 0f84cb5bb4842c0b5aa53c6cc6611e5f7f85441e
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Aug 28 13:39:36 2025 +0200

    WIP

commit 2f2e2fe0a0c46fb56d4e0fd7eeac34d865f112ce
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Aug 28 11:24:29 2025 +0200

    WIP BlockCodecInfo

commit 4e3d353c3201bff2aea68a3a0584728fc34331c2
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Aug 28 11:24:02 2025 +0200

    Remove superfluous modifiers

commit 609e4f2c0fa8f87fe796ceb9d832f598fdb01d93
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Aug 27 17:35:42 2025 +0200

    WIP

commit f1e82a7cb3a5a8fbbe08c40a63d83e3837cae48e
Merge: 7b9dee4 4364b82
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Aug 27 10:37:30 2025 -0400

    Merge remote-tracking branch 'origin/master' into feat/attributesKey

    # Conflicts:
    #	src/main/java/org/janelia/saalfeldlab/n5/DatasetAttributes.java
    #	src/main/java/org/janelia/saalfeldlab/n5/GsonUtils.java

commit d78f161858986d5b30acd4aa08b312da7528b477
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Aug 27 11:58:14 2025 +0200

    temp

commit 7b9dee43f54c5941eb2805f00ff5134f3f48fc60
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Aug 26 16:50:44 2025 -0400

    feat: make registerGson an instance method

    * so that it can be overrided by ZarrV3Reader
    * remove static registerGson in GsonUtils

commit bce0138f64cd4fe495d05326b6d5d933acbdb03a
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Aug 26 16:49:57 2025 -0400

    RawBytes type should be "bytes"

    * so that it can be used for zarr v3

commit 51e510ddf9d77f04d6cedc898fcbf1e9a93a99ae
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Aug 26 16:47:33 2025 -0400

    fix: remove attribute should use setAttributes

    * not writeAttributes
    * this change allows zarr v3 to re-use this method

commit 7915ed364405b4e8db79d4fb58d01ce827d7884b
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Aug 20 15:37:46 2025 -0400

    feat: getAttributesKey method

    * enables zarr to re-use the implementation here re: attributes

commit 75772b8720a76595dc6f5fdaf39e67b78cf19c78
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Aug 20 15:36:28 2025 -0400

    feat: DatasetAttributes.getCodecs

    * downstream implementations (zarr) need access to the bytesCodecs

commit 0fa24086bb05ab5ce7c3adb9cdb7803e09cd5934
Merge: a9e9822 45b9d71
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Wed Aug 13 18:58:41 2025 -0400

    Merge branch 'master' into development

    # Conflicts:
    #	src/main/java/org/janelia/saalfeldlab/n5/DatasetAttributes.java
    #	src/main/java/org/janelia/saalfeldlab/n5/GsonKeyValueN5Reader.java
    #	src/main/java/org/janelia/saalfeldlab/n5/GsonUtils.java
    #	src/main/java/org/janelia/saalfeldlab/n5/HttpKeyValueAccess.java
    #	src/main/java/org/janelia/saalfeldlab/n5/NameConfigAdapter.java
    #	src/main/java/org/janelia/saalfeldlab/n5/codec/Codec.java
    #	src/main/java/org/janelia/saalfeldlab/n5/codec/ConcatenatedBytesCodec.java
    #	src/main/java/org/janelia/saalfeldlab/n5/codec/N5BlockCodec.java
    #	src/main/java/org/janelia/saalfeldlab/n5/codec/RawBlockCodecs.java
    #	src/main/java/org/janelia/saalfeldlab/n5/codec/RawBytes.java

commit a9e982205b3f28ba5648605e0d07e9e714d4f9aa
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Jul 9 16:02:53 2025 -0400

    feat: add GridIterator.positionToIndex

    * useful in n5-imglib2

commit 6ed67a8a67baee5b1e1a72c4bb410ddc8dae40d3
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Jul 8 13:24:56 2025 -0400

    test: TestN5ShardWriter should not register Compression adapter

commit 939cb77e27738b0689634e1e0554cb04a795914f
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Jul 8 13:24:38 2025 -0400

    fix: InMemoryShard.fromShard returns null for null input

commit 1f93f685517069f6c189cde58fe181ed09c723c5
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Jul 8 13:24:15 2025 -0400

    fix: ShardingCodec.getCodecs

commit 7c5bd7e6a8cacc6785d74aeeac4112bebc6aff05
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Jul 7 19:08:13 2025 -0400

    fix/test: serialization of DatasetAttributes

    * ensure that n5-format serialization is unchanged
    * separate test of sharding functionality

commit 2be0d47d23ac256906658d69aad95df1d3750d51
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Jul 7 19:04:49 2025 -0400

    refactor: mark getCompression() as deprecated

    * instead of private
    * to make updates a little easier

commit d31ce223d63b0955e5567895b57b912dc0ed4f26
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Thu Jul 3 09:34:00 2025 -0400

    feat/doc: add ShardIndex.setEmpty

    * add documentation

commit 3ea57cc0f825e8ff77246646c639dd1e423e8571
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Jul 2 16:27:36 2025 -0400

    feat: add GridIterator.nextInt

    * shards index their blocks with int[]
    * avoids creating many int[]s

commit e22e50515e5aae9b91d6207bb66d3651cc5002fe
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed Jul 2 14:49:46 2025 -0400

    refactor!: blockPositions for shard methods are shardRelative

    * rename and better document methods taking blockPositions
    * refactoring
    * update tests

commit 936091defc91ecbd7201192383e3b0e3f56665e2
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Jul 1 13:59:36 2025 -0400

    refactor/test: remove ShardProperties

    * move methods to DatasetAttributes
    * rm ShardPropertiesTests, add DatasetAttributesTest

commit e1468f194b5d0da17ded1fa452b574f76bf96440
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Mon Jun 30 16:10:28 2025 -0400

    fix/test: fix N5Codecs.getSize

    * split BytesTests to ArrayCodecTests and BytesCodecTests
    * better test for CodecSerialization

commit 77e86e42afaeb39dccf311361137cb9e2311a4c9
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Sat Jun 28 18:08:04 2025 -0400

    feat!: add N5Writer.deleteShard

    * add tests for sharded and unsharded datasets
    * change return value behavior for delete methods

commit 9e115342652a14198ce75315e3862295d03d72ac
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Sat Jun 28 18:04:51 2025 -0400

    feat: add Shard.blockExists

commit a541c2f03bec381b0cb41bf02f40460cebce0ea5
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Jun 27 13:08:02 2025 -0400

    chore: cleanup for PR

commit d0158c2011b746a1fb242c61e27682632f40de9d
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Jun 27 10:24:05 2025 -0400

    chore!: remove AsTypeCodec and related logic

commit a5c44d46f5060093b57e25605e7c8ce91d98ed1c
Merge: b1c785b 3955cdf
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Jun 27 10:12:17 2025 -0400

    Merge branch 'master' into development

commit b1c785b7ee6c3df62c33843c0dc9367f75b2bfb6
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Jun 24 15:26:41 2025 -0400

    doc: update README.md

commit 6ed4d8fce687c93d75767a8f00a15a4d78d41c26
Merge: 5c9a4f0 7724f25
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Jun 24 15:22:38 2025 -0400

    Merge branch 'master' into development

    # Conflicts:
    #	src/main/java/org/janelia/saalfeldlab/n5/KeyValueAccess.java
    #	src/main/java/org/janelia/saalfeldlab/n5/readdata/KeyValueAccessReadData.java
    #	src/main/java/org/janelia/saalfeldlab/n5/readdata/ReadData.java

commit 5c9a4f008608084bbc392fb9cd9ed04c17ce5190
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Jun 13 17:11:08 2025 -0400

    wip: shard merge after staged PR merges

commit fccd7e64440c5d6a6c9e822d5f60becfb3bf254a
Merge: 41d5281 fbae8ac
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Jun 13 16:53:33 2025 -0400

    Merge branch 'wip/codecsReadData' into development

commit 41d52813fa38a4218552fdc5ce9204d901ffe7d9
Merge: ba7c3e0 725c0b2
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Jun 13 15:36:37 2025 -0400

    Merge branch 'splittable-readdata' into development

commit ba7c3e079a56a4ee2c280072d68225d30d40a634
Merge: 0f69cfd 322b2b7
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Jun 13 15:25:55 2025 -0400

    Merge branch 'wip/codecs' into development

commit fbae8ac5e298c94f118fe4965c8a69ed214462b1
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Thu Jun 12 11:23:21 2025 -0400

    test: BlockAsShard AbstractN5 Test

commit 481f75afa324dd07af1cbaa0760b276a4c034855
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Thu Jun 12 11:05:46 2025 -0400

    misc: cleanup more blockAsShard stuff

commit bf0920c5626b1562f79cbcf1915e893f5cc1c781
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Thu Jun 12 11:05:07 2025 -0400

    feat: annotation to indicate a non-serializable NameConfig

commit fff741b38a5ca4c4f7893aa7cb6136080ef78782
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Thu Jun 12 10:31:19 2025 -0400

    test: write shard for http fs tests

commit 3c20ea017956e123fecf13f636cd32732a8051f9
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Thu Jun 12 10:22:08 2025 -0400

    refactor: static readFromShard

commit 74e1f700cb1fdf0c4b4bfa3d5da07f991f9be822
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Thu Jun 12 10:21:19 2025 -0400

    test: make test data smaller

commit 6c4156c1092337b47a626790bf8082615d7b0fa2
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Thu Jun 12 09:38:43 2025 -0400

    feat: more block as shard logic

commit 214466087b3a735fc1de492798236c9bffea3629
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Jun 10 16:17:46 2025 -0400

    feat: support writing blocks through shards on non-sharded datasets

commit 2acc2816a88377f6518b20ad24760bd7cde73d6c
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Mon Jun 2 14:23:41 2025 -0400

    refactor: migrate IOExceptions to N5IOExceptions for ReadData and related logic

commit 5d13af6d8b9f757da34dc3c1fe04cedac38533b2
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Mon Jun 2 11:01:12 2025 -0400

    refactor: extract Pattern matching to be reused for attribute path normalization

commit d7c9d35e64f44546cbc740eee0fe06c87cbfdfd3
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue May 27 13:38:17 2025 -0400

    test: writing / reading of invalid blocks

commit ceaf5c30848df5cc5ae225491f9cadadce7b3b53
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue May 27 13:29:20 2025 -0400

    chore: remove duplicate/outdated license header

commit 4f29c338c6bd276b5e7812d796104ff01ac3f729
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue May 27 11:53:07 2025 -0400

    fix: getArrayCodec not ShardingCodec

commit c8c433585c209a76a2e1e187bd5ab30d4e3faa79
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue May 27 11:51:54 2025 -0400

    fix: NameConfig for Bzip2

commit db0e1a3cdfc249dbf6261d8673f4ed0df0c67a3c
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue May 27 11:51:39 2025 -0400

    feat: Shard as a the base case for writing

commit c3a87cbb906f7303f1b18b099c1d3e6a000fa7d8
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue May 27 11:50:10 2025 -0400

    refactor: remove deprecated api methods, some cleanup

commit 19af7cc5411c3a5da1b929e87f49eb4686b9826d
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri May 23 17:16:27 2025 -0400

    test: add CodecTests

    * testing ConcatenatedBytesCodec

commit 2243a4f5277a0c24e2f949fae88de25133fdbf8c
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri May 23 17:13:03 2025 -0400

    perf: FileSystemKva's ReadData uses lockForReading

commit b9130deb09368268140ad3189f6e0768d10d188e
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri May 23 17:11:51 2025 -0400

    refactor: hide KeyValueAccessSplittableReadData

commit 65345d9f1e0ae308c10039eb95102081c6d529d7
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri May 23 17:10:48 2025 -0400

    doc: SplittableReadData.slice

commit d8504eb922b8e8f65e2a00dddf9e13c7d872147b
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri May 23 16:59:40 2025 -0400

    refactor: branch sharding logic on ShardingCodec

commit 15737489dd17dd631801b48240fd45be27159856
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri May 23 16:59:16 2025 -0400

    fix: N5BlockCodec adds header size to encoded size

commit a56c80b1ef930a50f04ef56e623374225a91bd22
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri May 23 14:38:53 2025 -0400

    wip: refactor KvaSplittableReadData

    * add abstract KeyValueAccessSplittableReadData
    * ReadData.length does now throw IOException

commit 3242dc716e63f950e657c8ff7f866f524f7f99b8
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri May 23 10:49:22 2025 -0400

    fix(test): index should have RawBytesCodec

commit 521b6aad987ace8866eab06af4074bd5d4318c36
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri May 23 10:49:05 2025 -0400

    feat,BREAKING: wrap IO as N5IO and rethrow; don't throw IOException in KVA for size

commit 6edda5f01d7a9cd060543db3de049fd2e8b6bcac
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri May 23 10:35:57 2025 -0400

    test: FileSplittableReadData knows its length

commit 11cc2e2901968eb4269741beaf6d5f32d9968068
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri May 23 10:21:22 2025 -0400

    rm ReadDataBenchmarksKvaReadFully

commit 25b2f5c292f2fa876cb6cb0b2f44eac11a0dcd33
Merge: 3486b0f c274213
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri May 23 10:20:33 2025 -0400

    Merge branch 'wip/codecsReadData' of github.com:saalfeldlab/n5 into wip/codecsReadData

commit 3486b0f47ee425a70860044c4ce88d9b326ebb26
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri May 23 10:20:29 2025 -0400

    wip: FileSplittableReadData now wraps a kva

commit c27421382b60b4e4cccc19596acf69019556845e
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri May 23 10:13:52 2025 -0400

    fix: write ShardIndex before closing output stream
    fix(test): shardIndex writeRead

commit 1c5f0c1165010b5febac7181c651b91b6a2f5dae
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri May 23 09:37:48 2025 -0400

    chore: feedback

commit 2cc81aab194c64dd9455efc675b5e1bca8da0f14
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri May 23 09:37:33 2025 -0400

    refactor(test): for sharding

commit b56a3945594ebb24e495bf551c521330ed6e41cd
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri May 23 09:37:13 2025 -0400

    refactor: Shards should use ReadData, not previous SplitData implementation

    refactor: reduce scope of shard capability. Only support full Shard writes (InMemoryShard) and partial shard reads (VirtualShard)

commit f3949376f6b4f4d7692978edbeb68600caaa8eb6
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri May 23 09:34:26 2025 -0400

    feat: ReadDataSplittableReadData and KVA#createReadData;

commit 3d27db9903b109508ff36e632429227494a58e8e
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri May 23 09:33:19 2025 -0400

    refactor: rename to ArrayCodec#initialize

commit 967df11f8ee859eb1b76b4865d55354fa7d7ebe6
Merge: d8aedbd 02e0488
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Thu May 22 11:09:05 2025 -0400

    Merge branch 'wip/codecsReadData' of github.com:saalfeldlab/n5 into wip/codecsReadData

    # Conflicts:
    #	src/main/java/org/janelia/saalfeldlab/n5/HttpKeyValueAccess.java

commit d8aedbdf1277fd87232f1580a85dc707726d80cc
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Thu May 22 10:22:28 2025 -0400

    perf/style: http kva, implement range request

    * remove duplicate license header
    * add constants

commit 02e0488f7e51f1fd802d54cb11d175da6ee2f5ac
Merge: 0023d4e 424c101
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Thu May 22 10:05:56 2025 -0400

    Merge remote-tracking branch 'origin/wip/codecsReadData-splittable' into wip/codecsReadData

commit 0023d4e5ade62cf7e64f63cec75b6628ae89a28d
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Thu May 22 09:49:33 2025 -0400

    fix(test): add N5BlockCodec to shard test

commit 424c1018550f6b4ea3f5ef748fd97986f160f005
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed May 21 21:04:21 2025 -0400

    perf: use range request for http KeyValueAccess

commit 24817915bc14d4159628521bda1378037097c708
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed May 21 16:27:04 2025 -0400

    test: more read data benchmarks

commit fecd95db597f84dadfc7ae9dbca326753a8fd18e
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed May 21 16:26:26 2025 -0400

    test: more ReadDataTests

commit 1564aa572ba4a45721aab1205c63b970a2aabd34
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed May 21 16:25:55 2025 -0400

    feat: add FileSplittableReadData

commit c7a119ec632360db9a82954d120aa297a8a3fefb
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Wed May 21 13:42:39 2025 -0400

    test: fix ShardProperties tests

commit 20b5c003e92df59aab50cfdbe49f1777e67714bd
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue May 20 16:55:55 2025 -0400

    feat: add splittable read data

    * add a test

commit 38017fff277c9d11abfb9ec2ceb4773562df34d4
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue May 20 16:34:23 2025 -0400

    fix: AbstractInputStreamReadData close stream

commit 31e0a9a3c92448731a5ed14a16864ea39f6d0707
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue May 20 16:30:27 2025 -0400

    test: add ReadData benchmark

commit 1ba662d72b29c688c4c57cb45d10946c11ecd6a6
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue May 20 14:34:50 2025 -0400

    chore: remove duplicate license headers

commit 95e5aff2a020d6de752f87f1a2072f3f783a5749
Merge: c1485a9 9502d93
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue May 20 14:23:12 2025 -0400

    Merge branch 'master' into wip/codecsReadData

commit c1485a929f4cb5d6ffbb2e1576cc81d6fc50e6b3
Merge: 0dcade4 b4ca260
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Mon May 12 14:24:35 2025 -0400

    Merge branch 'codecsReadData' into zarr3-readdata

commit b4ca260c4df3c405620ca994cdee161122a9bc99
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Mon May 12 13:56:23 2025 -0400

    tmp

commit 0dcade45bf3a53466aca68c8a1850c1881171e9d
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Apr 8 14:58:13 2025 -0400

    feat: add ZarrStringDataCodec support

commit d4ebfefe2be06d87e92efdd4739f5d04c14498b2
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Apr 8 14:57:50 2025 -0400

    refactor: rename encodeBlockHeader -> createBlockHeader

commit 2e056286a27668056a485d058727eb1bacbf68b8
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Apr 8 14:57:30 2025 -0400

    refactor: dont expose N5Codecs internals

commit ab8b83b3e41512dce7a41bee0340dbf7b4169da4
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Apr 8 14:56:34 2025 -0400

    refactor: remove currently unused N5BlockCodec. Something like this may be needed when multiple codecs are supported

commit 70ec77710cc1ec9453efa5c98611ae9a64060948
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Apr 8 14:55:32 2025 -0400

    revert: keep protected constructor with DataBlockCodec parameter

    refactor: inline createDataBlockCodec from constructor params

commit 0f8b2c59e2dcd60f65593f380b61813e0f9ae151
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Apr 8 14:53:32 2025 -0400

    doc: retain javadoc from before refactor

commit 0db21be4fc6b4f325cf43d9cd93cc1b4ce36daec
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Apr 8 14:52:52 2025 -0400

    revert: add back createDataBlock logic in DataType

commit 7b713cd7f93a76a9536799ae44852433b5655d0c
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Wed Mar 5 16:59:15 2025 -0500

    refactor: DatasetAttributes responsible for DataBlockCodec creation

    N5BlockCodec uses dataType (and potentially other DatasetAttributes to wrap the desired DataBlockCodec

commit ae85a55844d8090ce0e17b26fc0f65d22169ef4b
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Wed Mar 5 16:55:21 2025 -0500

    refactor: add AbstractDataBlock to extract shared logic between Default/String/Object blocks

commit f948f578479501e0e8a45e91904427428a7dc864
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Wed Mar 5 16:54:56 2025 -0500

    feat: Add StringDataCodec, ObjectDataCodec,  StringDataBlockCodec, ObjectDataBlockCodec

    DataCodecs now creat the access object and return it during `deserialize`

commit b03e897db8d2d89bc480c8595eaef93225f5b2cc
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Wed Mar 5 16:48:34 2025 -0500

    refactor: move DataBlockFactory/DataBlockCodecFactory to N5Codecs

commit 46c7eab42fc70a475fc9bc2880aa6f2d00b22995
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Wed Mar 5 16:40:52 2025 -0500

    refactor: don't pass `decodedLength` to ReadData

commit 2648d380f070320cff8f3083565d5ccd4b0e9076
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Feb 26 23:01:50 2025 +0100

    Remove unnecessary flush()s, instead close OutputStream where it is constructed

commit 4db22cfd276944c6b0003110e9b82961a2f6e9b8
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Feb 26 22:13:31 2025 +0100

    rename ChunkHeader to BlockHeader

commit 31f351e14274209157815e80b7dfed2a747b71f7
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Feb 19 10:47:19 2025 +0100

    fix javadoc error

commit 1154bf9f5510ecce82e89509d1fe2fb837df1de2
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Feb 19 10:35:29 2025 +0100

    Remove SplittableReadData interface

commit f191b7d62d4759ccd8ab83b118594dde30db1bb5
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Feb 19 10:27:12 2025 +0100

    refactor, add ReadData.materialize()

    This is in preparation for moving SplittableReadData into a separate PR

commit d8b7c1f4596c80fbe225ea7a9cb5aa35f8f85d49
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Feb 16 16:29:02 2025 +0100

    Let DatasetAttributes provide the DataBlockCodec

    avoids the Compression argument to encode/decode methods

commit ffea7a8842442050404b4b3a558d514e3077462e
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Feb 16 16:04:33 2025 +0100

    refactor

commit 4290e0b414df26ae694cf82448d68c9f1c48e9eb
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Feb 16 16:03:54 2025 +0100

    refactor

commit fa88b72515272a146d4c897fa5282a5069a808de
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Feb 16 12:02:19 2025 +0100

    typo

commit 72986216b5e699c0956e27b38c37af1d770d62c6
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Feb 16 11:35:34 2025 +0100

    convenience DataCodec methods to get codec with approprioate endianness

commit 2a0cd24854eba5552163bf7fe9b9e22c8426f6a7
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Feb 15 13:09:05 2025 +0100

    refactor

commit fedfbc7f4977099a883e7246eb85018c0883b019
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Feb 15 00:27:09 2025 +0100

    refactor

commit a4fb38e54d75f7270f00865b78f085cdd9822e66
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Feb 15 00:15:03 2025 +0100

    use only array type in DataBlockCodec generics

commit d8d07195b88948c1e8114574020885c7e736910f
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Feb 14 23:17:26 2025 +0100

    Use ProxyOutputStream. FilterOutputStream is slow

commit 1be51a5d2321b26bbd6187ce6b5c76571a1b0b35
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Feb 14 22:55:43 2025 +0100

    WIP use Codecs, remove serialization methods from DataBlock

commit 6cd52d0771b1bc5cd25919cc969781eb73c75eea
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Feb 14 22:12:29 2025 +0100

    WIP Codecs

commit e52d0fc743e516106fbbedb5127d1ec3c62c53ba
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Feb 14 17:46:49 2025 +0100

    WIP Codecs

commit 8683dfa3e775e119149813347e70ab2646ddf0c9
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Feb 14 17:03:51 2025 +0100

    WIP Codecs

commit 0d66ee69dd7866e379ff3eef1ab0df1953d60cde
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Feb 14 17:03:15 2025 +0100

    Add LazyReadData and OutputStreamWriter

    When data is requested from the LazyReadData, the LazyReadData will ask
    its OutputStreamWriter to write the data to a ByteArrayOutputStream.

    When the LazyReadData itself is written to an OutputStream, it will pass
    that OutputStream to its OutputStreamWriter (without loading the data
    into a byte[] array first).

commit 2bcdab883ed583d9c5ba67474184e218427c0ccf
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Feb 13 09:37:44 2025 +0100

    idea

commit 018d31186f269f1d7efc0d5701e3ef96d1e65928
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Feb 13 13:32:22 2025 +0100

    remove BytesCodec interface and put encode/decode into Compression for now

commit a2e9596706265abf2a40d73337f1539ef2409427
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Feb 13 13:14:17 2025 +0100

    ReadData.encode/decode methods forwarding to BytesCodec

commit b70e6b5ba1b2a91e857c61ee07811f45777b12f4
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Feb 13 13:11:33 2025 +0100

    Use OutputStream wrapper to intercept close() in EncodedReadData

    We still need a custom interface "OutputStreamOperator" because we want
    to throw IOException and UnaryOperator::apply doesn't.

commit d9f42220f98462440829ee6eb318744de6f78fa7
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Feb 13 10:18:26 2025 +0100

    clean up

commit 8b097b5e7dda6db10992bef2daa32d8e87c84c77
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Feb 3 17:46:20 2025 +0100

    Add ReadData method toByteBuffer()

commit 4fd4723318f78195d10689ff35d9180aa1ce6fd9
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Feb 3 17:53:31 2025 +0100

    fix javadoc error

commit 24dc39398fdcb218f3f68d25b9ca1cfc302092d9
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Wed Feb 5 10:11:33 2025 -0500

    test: don't override with zarr (oops)

commit 231aacdffd6e9335734cca7fe8cbfed688297b0b
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Wed Feb 5 10:10:42 2025 -0500

    test: easier to local debug

commit 5b9c4a371ff83921f7f3ef48977cac00cf4dbd49
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Wed Feb 5 10:10:22 2025 -0500

    fix: readblock with split data

commit f854ac64f3c53e1a767e3b87dc306d1fa397cf1f
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Feb 4 16:53:01 2025 -0500

    chore: rebase cleanup

commit 4c0e0fe8171c9a8285202a6dff528f5302f69667
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Mon Feb 3 14:20:32 2025 -0500

    fix: revert some changes that broke split data for ShardTest

commit 7970281a6de4237f88cfca05d15ac193dca76b0e
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Jan 24 16:28:53 2025 -0500

    refactor: more SplitData implementation

commit 765a7b428502a992c32a98e38ad28d94f5390be4
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Fri Jan 24 15:27:27 2025 -0500

    feat(wip): initial SplitableData implementation

commit 0d1eb525c8065f77fa73280f25629e2ff73a0d25
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Feb 4 17:10:40 2025 -0500

    refactor: more from refactorShard branch

commit 3bf8fe830747aa4f96e53ae50de374b25649133d
Author: Caleb Hulbert <cmhulbert@gmail.com>
Date:   Tue Feb 4 16:02:20 2025 -0500

    refactor: large codecs/shards implementation refactor

commit 3b54467a253f2ec255ea74248bbc10fc5cdb1570
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Feb 3 13:42:06 2025 +0100

    Remove DataBlock de/serialize() methods

    Maybe we'll rename readData()/writeData() later, the point is to remove
    the ByteBuffer methods from the API

commit decdafdada750047452e65027da9fa2ccb1219bc
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Feb 3 12:32:09 2025 +0100

    Remove old Compression methods. Everything goes through ReadData

commit 5ff62a98e7f93d31306715ee675e5067e862ab88
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Feb 2 21:36:12 2025 +0100

    javacod

commit 89a6bfd805be826718a898f7fbdad3269c789cbd
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Feb 2 20:55:50 2025 +0100

    Clean up

commit a43bf40a8378526bfa7bad3921cc5d5cdd1ca1cd
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Feb 2 20:31:13 2025 +0100

    Remove deprecated BlockWriter/BlockReader interfaces

commit 80fa6a87827381ec59f007701eb3e26715557cff
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Feb 2 20:21:20 2025 +0100

    Hide ReadData implementations, use static ReadData factory methods instead

commit 47578e3ddd2c70566f20dfec4b910093daea7183
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Feb 1 22:20:51 2025 +0100

    Add decode(ReadData readData) variant that knows the length of the decoded data

commit 4b6ee4ff12962a78d22b7fc4a073b498c1808d94
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Feb 1 22:08:46 2025 +0100

    WIP ReadData.decode(Codec)

commit 4c348baae207f7b91ab3357ad52f9801bed3b69b
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Jan 31 22:38:22 2025 +0100

    Lean more on ReadData

    * Move ReadData etc to separate classes
    * Add ReadData.writeTo(OutputStream)
    * Add EncodedReadData that wraps a ReadData and an OutputStreamEncoder
    * Compression (BytesCodec) can encode ReadData. (This might happen
      immediately or later when the ReadData is written to OutputStream).

commit fbee9db8091ad4fdf08bdcfa387509feb864234b
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Jan 30 08:44:33 2025 +0100

    Add explicit commons-io dependency

commit 5c43f5bc1897729f1a74fbb327fb230beb112457
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Thu Jan 30 08:44:01 2025 +0100

    switch from byte[] to ByteBuffer for DataBlock.de/serialize()

commit 705ffb329e1644198948bfde75d95d1ae070d5ad
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Jan 29 13:58:09 2025 -0500

    fix javadoc error

commit 3df2b0b4f6c650a82da3aba78898abb1452752ec
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Jan 27 21:23:59 2025 -0500

    Clean up

commit 190a8ce38805dff0a084395be693355afd35a28f
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Jan 27 21:19:11 2025 -0500

    Clean up

commit 8732a0b5a31189f11f47736120fffeb93785e1fe
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Jan 27 21:10:05 2025 -0500

    Add ByteOrder to DataBlock.writeData()

commit e47ba4c50d1614b33e9eab39fb6f63875be9a903
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Jan 27 16:10:03 2025 -0500

    WIP revise StringDataBlock

    revert to holding serialized and actual data. otherwise we can't be
    compatible with existing N5 datasets.

commit 8cffeed489cd75c8d1bd5a6f59eb1b5d4c2df07d
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Jan 27 15:21:48 2025 -0500

    WIP revise StringDataBlock (doesn't work yet)

commit 701d4218cdeb1d30f0474466dc4460d3a191ebbf
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Mon Jan 27 14:55:50 2025 -0500

    WIP use Splittable.ReadData in DefaultBlockReader

commit 4fca725c2a81ec04a51e0778663e8e3e1f028d62
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sun Jan 26 19:52:16 2025 -0500

    WIP DataBlock.writeData(OutputStream)

commit 069f3e2755c1adad561b61223452a5143d85482f
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Jan 25 10:59:29 2025 -0500

    WIP speed up DataBlock.readData(InputStream), and clean up

commit 8811f1d570817fbd2b1e35ae81b0e065bbece606
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Sat Jan 25 10:58:37 2025 -0500

    WIP clean up Compression interface

commit a18d137e179674e22d542d038bde571389d64b92
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Jan 24 21:22:58 2025 -0500

    WIP SplittableReadData

commit 22ece34ecb5cdd98dc2f4fb5ca0fb2c1796e49e2
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Jan 24 20:23:17 2025 -0500

    WIP DataBlock readData variants

commit 953715bcf55ef376dcc8995ce9b9bdd57937324d
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Jan 24 20:22:33 2025 -0500

    WIP: SplittableReadData

commit b94ba8b10b7c8024380987043ac5c6d1780d01ae
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Sep 3 16:48:17 2024 -0400

    feat: DataBlock methods to read/write directly from DataInput/Output

commit eba1fd750322e1d8b0072e6b2a5297dfbe9cb00b
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Fri Jan 24 10:11:00 2025 -0500

    wip

commit 63f51ad6c08461fa0912896e18c3871493671688
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Jan 22 18:29:53 2025 -0500

    cleanup

commit e8dde834dcd6234069df70951aeda5f64c19b8d2
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Jan 22 18:25:57 2025 -0500

    bugfix

commit 17f197612afb58b1fc89aefbab63f4bd4308f2f5
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Jan 22 17:17:15 2025 -0500

    WIP encode/decode implementations

commit ad30b381c74ddefa9fcfd33206ca1d658961c97c
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Jan 22 15:19:15 2025 -0500

    WIP Compression / Codec API

commit 08940ee6668863a906f72a8a403262e547bde912
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Jan 22 15:17:14 2025 -0500

    Add byte[] DataType.createSerializeArray(numElements)

commit 27b6057b51bba7b1ee1830931d669e1e030d13cc
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Jan 22 10:07:41 2025 -0500

    Fix benchmark image URL

commit 9151207e2604339650e09c82e2c10e7a17327244
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Jan 22 10:07:03 2025 -0500

    WIP: remove @Override annotations for ByteBuffer methods

    to be able to turn those methods on/off in the DataBlock interface
    without causing compile errors in the implementations.

commit 3401fcf7cb78874ff37149342a35b93e8cb5fe59
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Jan 22 09:40:30 2025 -0500

    remove redundant modifiers

commit 9518d00b8a54bf1bc014f96137d991901c908be3
Author: tpietzsch <tobias.pietzsch@gmail.com>
Date:   Wed Jan 22 18:11:47 2025 -0500

    Add N5ReadBenchmark

commit ce50fa9a746179e4f741ef0c62939586f44fcc82
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri Jan 24 13:12:19 2025 -0500

    test: add a test for nested sharding codecs

    * but ignore it for now

commit a74d3437d0b5520076e4e2629de4dc50a11db787
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Jan 21 10:08:02 2025 -0500

    feat: add ShardIndex.isEmpty

    * use it to return early for getBlocks

commit 9224215e811bf9f0f637291d86d68ace92a1353a
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Tue Jan 21 09:31:28 2025 -0500

    wip/feat: N5Reader.readShard

commit f67943dcbb804227ca2d1d2ae441fa03dc7e1063
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri Jan 17 13:59:16 2025 -0500

    refactor: InMemoryShard, read/writeBlocks

    * Using Position class
    * using ShardParameters.groupBlocks helper method

commit 709730868111ffcdc584efaffe5379836c5d49a0
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri Jan 17 13:57:17 2025 -0500

    wip: rm unused flatIndex in Shard

    * methods in GridIterator replaces this

commit 0e353e42fc2c6175561ead61258197580fd875c0
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri Jan 17 13:54:18 2025 -0500

    feat: ShardParameters methods

    * shardsPerImage, blocksPerImage
    * grouping DataBlocks by shard postion
    * stream of block positions ordered by shard

commit 43bc1e04eaa6ff8253439032322c18718da6267f
Author: John Bogovic <bogovicj@janelia.hhmi.org>
Date:   Fri Jan 17 13:51:04 2025 -0500

    feat: add positionToIndex static methods in GridIterator

commit 1a44168191b161def0f6a73d262608b9dab97c0f
Author: John Bogovic …
@bogovicj bogovicj mentioned this pull request Nov 3, 2025
@cmhulbert
cmhulbert merged commit 54b812f into master Nov 5, 2025
2 checks passed
@cmhulbert cmhulbert mentioned this pull request Nov 5, 2025
@cmhulbert
cmhulbert deleted the dev/sharding-squash branch November 5, 2025 21:13
@bogovicj bogovicj mentioned this pull request Jan 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants