)]}'
{
  "log": [
    {
      "commit": "ccbc37a9d586fd64c9979dce65e11cd9f09c0643",
      "tree": "fc58ef0cd25a574a3bbf84c6ec52dbaacad01d0b",
      "parents": [
        "34e586cdc4797c8db17c5086d563c57d23d48285"
      ],
      "author": {
        "name": "Anas Khan",
        "email": "83116240+anxkhn@users.noreply.github.com",
        "time": "Fri Oct 23 07:32:14 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 10:02:14 2026 +0800"
      },
      "message": "MINOR: Use constant-time comparison for signed footer GCM tag (#3655)\n\nThe signature of an encrypted file with a plaintext (signed) footer is\nverified in ParquetMetadataConverter.verifyFooterIntegrity by comparing\nthe stored GCM authentication tag against a recomputed tag. It used\njava.util.Arrays.equals, which returns as soon as it finds a mismatching\nbyte, so the comparison time depends on how many leading bytes match. For\na MAC/authentication-tag check that is a timing side channel (CWE-208).\n\nReplace it with java.security.MessageDigest.isEqual, which has the same\nboolean contract (true iff both arrays are non-null, of equal length, and\nbyte-for-byte equal) but runs in time that does not depend on the number\nof matching bytes. The change is behavior-preserving; tampered footers are\nstill rejected with a TagVerificationException.\n\nAdd TestFooterIntegrity covering both the accepted valid signature and a\ntampered GCM tag that must be rejected.\n\nSigned-off-by: Anas Khan \u003c83116240+anxkhn@users.noreply.github.com\u003e"
    },
    {
      "commit": "34e586cdc4797c8db17c5086d563c57d23d48285",
      "tree": "c04601cf0859c12f21fea6ff300b964f1c915730",
      "parents": [
        "c972bd040f5448ba551877e87941ff20fe96cb9f"
      ],
      "author": {
        "name": "Aaron Niskode-Dossett",
        "email": "aniskodedossett@etsy.com",
        "time": "Thu Oct 22 21:01:26 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 10:01:26 2026 +0800"
      },
      "message": "GH-3856: Allow callers to provide known Hadoop file lengths (#3678)"
    },
    {
      "commit": "c972bd040f5448ba551877e87941ff20fe96cb9f",
      "tree": "2dae917c5364357e46d6e10f2a65af4fbe938217",
      "parents": [
        "cc4e2bd7b2755178174f267827d3a4e2d28007d0"
      ],
      "author": {
        "name": "Chao Sun",
        "email": "chao@openai.com",
        "time": "Wed Oct 21 01:54:09 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 16:54:09 2026 +0800"
      },
      "message": "GH-3719: Fix vectored read allocation limits and fallback safety (#3726)\n\n## Why are the changes needed?\n\nThe Hadoop vectored-read path can fall back to ordinary reads after filesystem\nrequests have been submitted or results partially consumed. Replaying reads into\nthe same chunk builder can duplicate selected page data and return incorrect\nfiltered rows. Outstanding requests also need to retain ownership of their stream\nand buffers during failure cleanup.\n\nThe current path requests a single buffer for an entire contiguous projected\nrange, without splitting it at `parquet.read.allocation.size`.\n\n## What changes were proposed in this PR?\n\n- Split requested ranges at the configured allocation size while preserving the\n  logical page/column plan. Verify dictionary and V1/V2 page checksums across split\n  buffers without another contiguous checksum allocation.\n- Cache file length lazily. A non-interruption metadata lookup failure before\n  submission disables vectored IO for that reader and permits ordinary reads.\n- Fail the read after filesystem submission is attempted, including synchronous\n  filesystem rejection; the interface cannot reliably distinguish rejection from\n  partial submission.\n- Share bounded vectored-read workers across readers: 64 by default, configurable\n  once through the JVM system property `parquet.hadoop.vectored.io.threads`.\n  Admission, submission, and range waits share one 300-second deadline. Admission\n  failure leaves the stream with its reader. Accepted operations retain capacity\n  until submission exits, the caller transfers or abandons buffer ownership, and\n  failure cleanup finishes. Cancellation cannot free capacity prematurely.\n  Idle workers in the default pool expire after 60 seconds.\n- Allow engines to supply and share their own pool through\n  `withVectoredReadExecutor(new VectoredReadExecutor(executor, maximumConcurrentReads))`\n  on read options or the `ParquetReader` builder. Reuse the wrapper to share an\n  admission limit across readers; both base and Hadoop options preserve it when\n  copied. The shared JVM pool remains the default. Parquet never shuts down a\n  caller-owned pool. Reject inline execution before filesystem submission and\n  preserve the reader for retry.\n- Track original allocator buffers, including merged and checksum allocations,\n  and transfer them to the row-group releaser on success. Preserve automatic\n  row-group cleanup on sequential reads and reader closure.\n- Publish available Hadoop futures even when submission fails. After an operation\n  is accepted, invalidate failed readers and defer stream cleanup until submission\n  exits; release buffers only when completion can be established. Guarantee abort\n  with `finally` even when draining sibling reads throws an `Error`, and retain the\n  original failure as suppressed on the escaping error. Remove the unused CRC allocator.\n\nThe allocation setting bounds requested range lengths, not every filesystem\nallocation: backends may merge ranges or align them for checksums and allocate\nlarger buffers. It does not bound footer/decoder allocations or total memory.\nThe worker limit does not bound threads created by the filesystem. A backend\nthat ignores interruption, or a blocked stream close, can retain capacity\nindefinitely; when all workers are occupied, further reads time out at admission.\nMissing, cancelled, or never-completing result futures can prevent safe buffer\nreclamation. Caller-supplied executors must dispatch asynchronously, reject instead\nof silently dropping work, and drain accepted tasks during shutdown. Reading\nthreads must not exhaust that same pool while waiting for their vectored work.\n\n## How was this PR tested?\n\nLocal validation used Java 17.0.20.1 with Maven 3.9.16 and Thrift 0.24.0:\n\n- Full `parquet-hadoop` verification with default Hadoop 3.3.0: **877 tests,\n  zero failures/errors, 26 Hadoop-capability skips**, plus **17 integration tests\n  with zero failures/errors/skips**. Packaging, API compatibility, dependency\n  analysis, Spotless, and RAT (274 approved licenses) passed.\n- Focused Hadoop 3.4.1 run with `-Dparquet.hadoop.vectored.io.threads\u003d2`:\n  **118 tests, zero failures/errors/skips**, including the real local-filesystem\n  vectored and file-range bridge tests.\n- `git diff --check` passed.\n\nThe focused run selected\n`TestParquetFileReaderVectoredIO,TestParquetFileReaderVectoredOwnership,TestVectoredReadBufferAllocator,TestVectoredReadOperation,TestVectoredReadExecutor,TestDataPageChecksums,TestVectorIoBridge,TestFileRangeBridge,TestParquetFileReaderBufferLeak`.\n\nCoverage includes shared admission across repeated retries, capacity retained\nthrough blocked submission and cleanup, original-buffer ownership, interrupted\nadmission and reader reuse, queued aborts, and sibling errors with pending reads.\nNew regressions exercise caller-owned pools through both options builders and\ncopies, successful reads and error cleanup without pool shutdown, inline and\n`CallerRunsPolicy` rejection, permit recovery, and retrying the same reader after\ninline rejection.\n\nThe full unit suite used a RAM-backed temporary directory for its large-file tests.\nLocal setup also used a test-JVM hosts file for the machine hostname and interop\nfixtures fetched at the commits pinned in the tests. No live S3 validation or\nperformance benchmark was performed.\n\nGitHub CI for head `effbc384` also passed:\n\n- Hadoop JDK 17 verification ran on merge revision `ad7b9934`, which includes this\n  head: **898 `parquet-hadoop` tests, zero failures/errors, 26 skips**. With default\n  Hadoop 3.3.0, all 22 `TestVectorIoBridge` tests were skipped; real local-filesystem\n  bridge coverage comes from the separate Hadoop 3.4.1 run above.\n- Vector-plugin verification on JDK 17, 21, and 25, and zizmor analysis passed.\n\nCloses #3719."
    },
    {
      "commit": "cc4e2bd7b2755178174f267827d3a4e2d28007d0",
      "tree": "9f825dec3e6d4311927d30c3b0d0d7fc9b28c8fd",
      "parents": [
        "db9e61050651c2cb808abc05297a0033552850bc"
      ],
      "author": {
        "name": "Xinyao Zhang",
        "email": "43081360+zhangxinyao88@users.noreply.github.com",
        "time": "Wed Oct 21 04:45:33 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 16:45:33 2026 +0800"
      },
      "message": "GH-3289: Test read commands through CLI arguments (#3858)"
    },
    {
      "commit": "db9e61050651c2cb808abc05297a0033552850bc",
      "tree": "44b18dabf5bbf0514fa37767f94ef88189c0b9c5",
      "parents": [
        "744ed4c6dcdc00a0911f67f613c4856cabb8f7b3"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 19 10:08:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 10:08:33 2026 +0800"
      },
      "message": "Bump org.xerial.snappy:snappy-java from 1.1.10.10 to 1.1.10.12 (#3865)\n\nBumps [org.xerial.snappy:snappy-java](https://github.com/xerial/snappy-java) from 1.1.10.10 to 1.1.10.12.\n- [Release notes](https://github.com/xerial/snappy-java/releases)\n- [Commits](https://github.com/xerial/snappy-java/compare/v1.1.10.10...v1.1.10.12)\n\n---\nupdated-dependencies:\n- dependency-name: org.xerial.snappy:snappy-java\n  dependency-version: 1.1.10.12\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "744ed4c6dcdc00a0911f67f613c4856cabb8f7b3",
      "tree": "d5b41d883afcc7757bcf7817e0104d660bb95b4d",
      "parents": [
        "813e3ac91b29b6efab08e920962aee0be30d4f4c"
      ],
      "author": {
        "name": "Costas Zarifis",
        "email": "115515316+costas-db@users.noreply.github.com",
        "time": "Sun Oct 18 18:57:59 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 09:57:59 2026 +0800"
      },
      "message": "GH-3829: Preserve column path identity when copying row groups (#3831)"
    },
    {
      "commit": "813e3ac91b29b6efab08e920962aee0be30d4f4c",
      "tree": "b5380d2ed21f736af3c50ff360bf33fd70322f35",
      "parents": [
        "bca2eaeac0afc88197c622f0f27c8a55739a5be9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 19 09:54:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 09:54:27 2026 +0800"
      },
      "message": "Bump com.github.luben:zstd-jni from 1.5.7-21 to 1.5.7-23 (#3864)\n\nBumps [com.github.luben:zstd-jni](https://github.com/luben/zstd-jni) from 1.5.7-21 to 1.5.7-23.\n- [Commits](https://github.com/luben/zstd-jni/compare/v1.5.7-21...v1.5.7-23)\n\n---\nupdated-dependencies:\n- dependency-name: com.github.luben:zstd-jni\n  dependency-version: 1.5.7-23\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "bca2eaeac0afc88197c622f0f27c8a55739a5be9",
      "tree": "dfb0e98a8f926abcf2a44f65aaca438cbe0ef8a3",
      "parents": [
        "6ae2a8f173dcd2a121e41e3dc05d3dfc284d84a5"
      ],
      "author": {
        "name": "Costas Zarifis",
        "email": "115515316+costas-db@users.noreply.github.com",
        "time": "Wed Oct 14 20:27:56 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 11:27:56 2026 +0800"
      },
      "message": "GH-3828: Preserve column path identity in dictionary lookup (#3830)"
    },
    {
      "commit": "6ae2a8f173dcd2a121e41e3dc05d3dfc284d84a5",
      "tree": "00cc514745e072af072044a25f122df0a588222b",
      "parents": [
        "24e70f1da5746c7ea227b715e91a0da0a3228557"
      ],
      "author": {
        "name": "Costas Zarifis",
        "email": "115515316+costas-db@users.noreply.github.com",
        "time": "Tue Oct 13 22:54:41 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 13:54:41 2026 +0800"
      },
      "message": "GH-3826: Preserve component paths for Bloom filters (#3827)"
    },
    {
      "commit": "24e70f1da5746c7ea227b715e91a0da0a3228557",
      "tree": "4a2e5460e738a42e099158cb62618adb15bd3b18",
      "parents": [
        "acd278942642343e6bde585b8b4f5eb671ee531b"
      ],
      "author": {
        "name": "Xinyao Zhang",
        "email": "43081360+zhangxinyao88@users.noreply.github.com",
        "time": "Tue Oct 13 12:12:50 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 00:12:50 2026 +0800"
      },
      "message": "GH-3289: Add basic CLI smoke tests (#3848)"
    },
    {
      "commit": "acd278942642343e6bde585b8b4f5eb671ee531b",
      "tree": "f42947d466aec158e046a51ac29851233d160458",
      "parents": [
        "dc6e2f13f9910a59555685968e79c78f8edba67a"
      ],
      "author": {
        "name": "Anas Khan",
        "email": "83116240+anxkhn@users.noreply.github.com",
        "time": "Tue Oct 13 14:56:34 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 17:26:34 2026 +0800"
      },
      "message": "GH-3667: Close input readers when ParquetRewriter setup fails (#3662)\n\nParquetRewriter.getFileReaders opens each input reader into a local list. If opening a later file fails, close the readers already opened before rethrowing so their input streams do not leak. Preserve close failures as suppressed exceptions on the original failure.\n\nAdd a regression test that verifies the earlier input stream is closed, using AssertJ assertions.\n\nSigned-off-by: Anas Khan \u003c83116240+anxkhn@users.noreply.github.com\u003e"
    },
    {
      "commit": "dc6e2f13f9910a59555685968e79c78f8edba67a",
      "tree": "f6b6421fbe1592ae1678f8af4b940dc8bbcc20d8",
      "parents": [
        "b97860d73c3d38e6d6a61188f5ade88f5a071abc"
      ],
      "author": {
        "name": "Yigit Colakoglu",
        "email": "root@yigit.run",
        "time": "Tue Oct 13 05:24:41 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 11:24:41 2026 +0800"
      },
      "message": "GH-3706: Mark writer aborted on end() failure to avoid flushing incomplete files (#3707)\n\n### Rationale for this change\n\nMakes ParquetFileWriter#end() mark the writer aborted before flushing, so an incomplete file is never committed on failure. Previously close() ran before the catch block in withAbortOnFailure and withAbortOnFailure only caught IOException, causing:\n\n - an incomplete file being flushed to storage when serializing indexes/stats/footer throws any exception\n - a RuntimeException (e.g. OOM) to be missed, leaving the writer un-aborted and still flushing\n\n### What changes are included in this PR?\n- withAbortOnFailure catches Throwable (not just IOException) and marks the writer aborted.\n- end() runs close() in an outer finally, so abort happens before close() and the flush is skipped on failure.\n\n### Are these changes tested?\nYes. 2 new tests in TestParquetFileWriter inject an IOException/RuntimeException during end() and assert the stream is never flushed.\n\n## Are there any user-facing changes?\nNo. Successful writes are unchanged; only the failure path is affected.\n\nCloses #3706"
    },
    {
      "commit": "b97860d73c3d38e6d6a61188f5ade88f5a071abc",
      "tree": "0075c90cf91d0e92e521c1c8a2715a5f2df1a8ad",
      "parents": [
        "b0ce2e4e48b3993a72531ad1acf1b8fc477fbcaa"
      ],
      "author": {
        "name": "Fokko Driesprong",
        "email": "fokko@apache.org",
        "time": "Mon Oct 12 15:02:32 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 15:02:32 2026 +0200"
      },
      "message": "MINOR: Update Thrift to 0.25 (#3855)"
    },
    {
      "commit": "b0ce2e4e48b3993a72531ad1acf1b8fc477fbcaa",
      "tree": "024c0f53d54722471d298c0de8f7ff51fcc1170b",
      "parents": [
        "3051aa0b8caede2acd8fa1896e92ffefe1320857"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 12 11:51:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 11:51:39 2026 +0800"
      },
      "message": "Bump org.apache.maven.wrapper:maven-wrapper from 3.3.2 to 3.3.4 (#3723)\n\n* Bump org.apache.maven.wrapper:maven-wrapper from 3.3.2 to 3.3.4\n\nBumps [org.apache.maven.wrapper:maven-wrapper](https://github.com/apache/maven-wrapper) from 3.3.2 to 3.3.4.\n- [Release notes](https://github.com/apache/maven-wrapper/releases)\n- [Commits](https://github.com/apache/maven-wrapper/compare/maven-wrapper-3.3.2...maven-wrapper-3.3.4)\n\n---\nupdated-dependencies:\n- dependency-name: org.apache.maven.wrapper:maven-wrapper\n  dependency-version: 3.3.4\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\n\n* Add back license\n\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Fokko Driesprong \u003cfokko@apache.org\u003e"
    },
    {
      "commit": "3051aa0b8caede2acd8fa1896e92ffefe1320857",
      "tree": "fe1ba4c25873709938454d1ff01c0fae3c054b40",
      "parents": [
        "d933b7b56aa0803a0f57e19bede215e864c2ef7d"
      ],
      "author": {
        "name": "Bodor Laszlo",
        "email": "bodorlaszlo0202@gmail.com",
        "time": "Mon Oct 12 05:10:30 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 11:10:30 2026 +0800"
      },
      "message": "GH-3772: Bulk skip in RunLengthBitPackingHybridDecoder / DictionaryValuesReader (#3773)\n\n### Rationale for this change\n\n`ValuesReader.skip(int n)` defaults to a naive loop of `skip()` calls. For dictionary-encoded columns each `skip()` bottoms out in `RunLengthBitPackingHybridDecoder.readInt()` — a mode switch, array indexing, and a value the caller immediately discards. Any filter-then-skip path (column-index row ranges, hash-join probe filtering, runtime filters) pays this cost per skipped row.\n\n`RleSkipBenchmark`, JMH throughput, JDK 17, 100 k values/op:\n\n| pattern | bitWidth | `readInt()` loop | `skipInts` | speedup |\n|---------|---------:|-----------------:|-----------:|--------:|\n| rle     |        8 |        1.38 B/s  | 104.9 B/s  |   ~76×  |\n| packed  |        8 |        0.89 B/s  |   4.12 B/s |   ~4.6× |\n| mixed   |        8 |        0.96 B/s  |   6.99 B/s |   ~7.2× |\n\n### What changes are included in this PR?\n\n- New `RunLengthBitPackingHybridDecoder.skipInts(int)` — re-uses `readNext()` per run, then advances `currentCount` by `min(n, currentCount)` instead of walking every value through `readInt()`.\n- `skip(int)` overrides on `DictionaryValuesReader` and `RunLengthBitPackingHybridValuesReader` delegating to `decoder.skipInts(n)`.\n- `parquet-benchmarks / RleSkipBenchmark` JMH benchmark.\n\n`readNext()` and the `ValuesReader.skip(int)` default are unchanged.\n\n### Are these changes tested?\n\n`TestRunLengthBitPackingHybridDecoderSkip` covers RLE-only, PACKED-only, mixed, zero-skip, full-skip, mid-run partial skip, `bitWidth \u003d 0`, and a randomised 4 K-value read/skip interleaving cross-checked against a `readInt()` reference. All `parquet-column` tests pass.\n\n### Are there any user-facing changes?\n\nNo. Additive and binary-compatible: no signatures change; `skipInts(n)` is semantically identical to N discarded `readInt()`s. Existing callers of `ValuesReader.skip(int)` pick up the fast path with no code change."
    },
    {
      "commit": "d933b7b56aa0803a0f57e19bede215e864c2ef7d",
      "tree": "433ea7c063c1f7b3a92e1c830f69236801504286",
      "parents": [
        "c6e91658f5fa8218f28c4e2e45738d6aab76d005"
      ],
      "author": {
        "name": "Sankalp Thakur",
        "email": "31366524+sankalpsthakur@users.noreply.github.com",
        "time": "Mon Oct 12 07:08:31 2026 +0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 11:08:31 2026 +0800"
      },
      "message": "GH-3039: Keep protobuf oneof fields optional when unwrapping wrappers (#3799)\n\nUnwrap mode was forcing every primitive to REQUIRED, which is invalid for\noneof members because only one alternative can be written. Keep oneof\nfields optional and add schema plus validated round-trip coverage.\n\nCo-authored-by: Sankalp Thakur \u003csankalpsthakur@users.noreply.github.com\u003e"
    },
    {
      "commit": "c6e91658f5fa8218f28c4e2e45738d6aab76d005",
      "tree": "e3346ec50b3833e2b0cb7c922bdbc7a87432e570",
      "parents": [
        "e0835fa861971b9dda242d0157a0ef2bb147c915"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 12 11:08:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 11:08:05 2026 +0800"
      },
      "message": "Bump protobuf.version from 4.36.1 to 4.36.2 (#3823)\n\nBumps `protobuf.version` from 4.36.1 to 4.36.2.\n\nUpdates `com.google.protobuf:protobuf-java` from 4.36.1 to 4.36.2\n- [Release notes](https://github.com/protocolbuffers/protobuf/releases)\n- [Commits](https://github.com/protocolbuffers/protobuf/commits)\n\nUpdates `com.google.protobuf:protobuf-java-util` from 4.36.1 to 4.36.2\n\n---\nupdated-dependencies:\n- dependency-name: com.google.protobuf:protobuf-java\n  dependency-version: 4.36.2\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n- dependency-name: com.google.protobuf:protobuf-java-util\n  dependency-version: 4.36.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "e0835fa861971b9dda242d0157a0ef2bb147c915",
      "tree": "ce982f6d512f08a056bf3207bc518359fb126657",
      "parents": [
        "11eba124afd25cc9909e6e5a0f0a03144ad87d57"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 12 11:07:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 11:07:31 2026 +0800"
      },
      "message": "Bump org.apache:apache from 39 to 40 (#3824)\n\n* Bump org.apache:apache from 39 to 40\n\nBumps [org.apache:apache](https://github.com/apache/maven-apache-parent) from 39 to 40.\n- [Release notes](https://github.com/apache/maven-apache-parent/releases)\n- [Commits](https://github.com/apache/maven-apache-parent/commits)\n\n---\nupdated-dependencies:\n- dependency-name: org.apache:apache\n  dependency-version: \u002740\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\n\n* Add missing licenses\n\n* Revert license headers on .par test fixtures\n\nThe .par files are schema fixtures that are parsed by MessageTypeParser, which requires the input to start with \u0027message\u0027 and does not support comments. The // headers therefore break ProtoSchemaConverterTest, so exclude **/*.par from the RAT check instead, like the other data files.\n\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Fokko Driesprong \u003cfokko@apache.org\u003e\nCo-authored-by: Gang Wu \u003custcwg@gmail.com\u003e"
    },
    {
      "commit": "11eba124afd25cc9909e6e5a0f0a03144ad87d57",
      "tree": "93cc88a65b8dcf3855c8d2ee70c091af6bcb6d34",
      "parents": [
        "e00e780e9a1adbb0c5bbd4840e80d69f30c4d43b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 12 10:56:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:56:28 2026 +0800"
      },
      "message": "Bump com.github.siom79.japicmp:japicmp-maven-plugin (#3849)\n\nBumps [com.github.siom79.japicmp:japicmp-maven-plugin](https://github.com/siom79/japicmp) from 0.26.2 to 0.26.3.\n- [Release notes](https://github.com/siom79/japicmp/releases)\n- [Changelog](https://github.com/siom79/japicmp/blob/master/release.py)\n- [Commits](https://github.com/siom79/japicmp/compare/japicmp-base-0.26.2...japicmp-base-0.26.3)\n\n---\nupdated-dependencies:\n- dependency-name: com.github.siom79.japicmp:japicmp-maven-plugin\n  dependency-version: 0.26.3\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "e00e780e9a1adbb0c5bbd4840e80d69f30c4d43b",
      "tree": "281c41308f08cdb16b6304461e889cfc17d8383f",
      "parents": [
        "878a5e550d1372533da388d1fbbe9564ac92a384"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 12 10:56:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:56:11 2026 +0800"
      },
      "message": "Bump com.google.guava:guava from 33.7.1-jre to 33.7.2-jre (#3850)\n\nBumps [com.google.guava:guava](https://github.com/google/guava) from 33.7.1-jre to 33.7.2-jre.\n- [Release notes](https://github.com/google/guava/releases)\n- [Commits](https://github.com/google/guava/commits)\n\n---\nupdated-dependencies:\n- dependency-name: com.google.guava:guava\n  dependency-version: 33.7.2-jre\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "878a5e550d1372533da388d1fbbe9564ac92a384",
      "tree": "be04d3fc89a769956932ca4d1c0685ef9f701538",
      "parents": [
        "adb148d5ac2037cd7e7f06fe4c4602a576983634"
      ],
      "author": {
        "name": "Divjot Arora",
        "email": "div.arora@databricks.com",
        "time": "Mon Oct 12 04:40:07 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:40:07 2026 +0800"
      },
      "message": "GH-3609: Add new sort order for int96 timestamps (#3610)"
    },
    {
      "commit": "adb148d5ac2037cd7e7f06fe4c4602a576983634",
      "tree": "db8a9a4561f077e2b023c779a6f63fa4280eacee",
      "parents": [
        "05b16af8ca7db76c088095b877b8497234a2fc7b"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Mon Oct 12 04:25:44 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:25:44 2026 +0800"
      },
      "message": "MINOR: Respect ByteBuffer offset in Binary equality (#3701)"
    },
    {
      "commit": "05b16af8ca7db76c088095b877b8497234a2fc7b",
      "tree": "32620e4e397c38b495c537eda505d37f34bfcc12",
      "parents": [
        "72abdcc0537260810b2c4b0c481902c3e8f568a0"
      ],
      "author": {
        "name": "Ismaël Mejía",
        "email": "iemejia@gmail.com",
        "time": "Mon Oct 12 04:05:09 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:05:09 2026 +0800"
      },
      "message": "Upgrade Avro dependency from 1.11.5 to 1.12.2 (#3731)\n\n- Create typed arrays instead of Object[] in AvroArrayConverter.end to\n  satisfy Avro 1.12\u0027s stricter ReflectData.setField type checks\n- Add SERIALIZABLE_PACKAGES surefire property for Avro 1.12\u0027s\n  ClassSecurityValidator"
    },
    {
      "commit": "72abdcc0537260810b2c4b0c481902c3e8f568a0",
      "tree": "eafc5e033b896b9ea193af736490a6d027b2da5a",
      "parents": [
        "5a133e135672a8683a0921a0b726cb56dea899e1"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 12 10:03:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:03:55 2026 +0800"
      },
      "message": "Bump org.xerial.snappy:snappy-java from 1.1.10.8 to 1.1.10.10 (#3851)\n\nBumps [org.xerial.snappy:snappy-java](https://github.com/xerial/snappy-java) from 1.1.10.8 to 1.1.10.10.\n- [Release notes](https://github.com/xerial/snappy-java/releases)\n- [Commits](https://github.com/xerial/snappy-java/compare/v1.1.10.8...v1.1.10.10)\n\n---\nupdated-dependencies:\n- dependency-name: org.xerial.snappy:snappy-java\n  dependency-version: 1.1.10.10\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "5a133e135672a8683a0921a0b726cb56dea899e1",
      "tree": "d2f31ebef23084fe42620921594ef8ccb55abdd8",
      "parents": [
        "76de93df2f699026e56a32430ba17521cc4efa42"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 12 10:03:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:03:34 2026 +0800"
      },
      "message": "Bump com.google.api.grpc:proto-google-common-protos (#3852)\n\nBumps [com.google.api.grpc:proto-google-common-protos](https://github.com/googleapis/google-cloud-java) from 2.76.0 to 2.78.0.\n- [Release notes](https://github.com/googleapis/google-cloud-java/releases)\n- [Changelog](https://github.com/googleapis/google-cloud-java/blob/main/java-document-ai/CHANGELOG.md)\n- [Commits](https://github.com/googleapis/google-cloud-java/compare/gapic-generator-java/v2.76.0...gapic-generator-java/v2.78.0)\n\n---\nupdated-dependencies:\n- dependency-name: com.google.api.grpc:proto-google-common-protos\n  dependency-version: 2.78.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "76de93df2f699026e56a32430ba17521cc4efa42",
      "tree": "41f765652e536a7eb7d29585545d69214536efee",
      "parents": [
        "2e0ec560a162ba78d760d169f1cc363ddab3811d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 12 10:00:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:00:03 2026 +0800"
      },
      "message": "Bump org.apache.maven:apache-maven from 3.9.16 to 3.10.0 (#3853)\n\nBumps org.apache.maven:apache-maven from 3.9.16 to 3.10.0.\n\n---\nupdated-dependencies:\n- dependency-name: org.apache.maven:apache-maven\n  dependency-version: 3.10.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "2e0ec560a162ba78d760d169f1cc363ddab3811d",
      "tree": "4429f357c28e355ea3d3fbbc3b0217cd497fc7d5",
      "parents": [
        "47382e63d1f8cbe0451434a24d1aa23de8aa0df4"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 12 09:59:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 09:59:10 2026 +0800"
      },
      "message": "Bump com.github.luben:zstd-jni from 1.5.7-16 to 1.5.7-21 (#3854)\n\nBumps [com.github.luben:zstd-jni](https://github.com/luben/zstd-jni) from 1.5.7-16 to 1.5.7-21.\n- [Commits](https://github.com/luben/zstd-jni/compare/v1.5.7-16...v1.5.7-21)\n\n---\nupdated-dependencies:\n- dependency-name: com.github.luben:zstd-jni\n  dependency-version: 1.5.7-21\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "47382e63d1f8cbe0451434a24d1aa23de8aa0df4",
      "tree": "3a8e0d1f3b49f4c0fdd4059cbce7ccaab99d1c94",
      "parents": [
        "e01aa19bc752ca85fd2937243af41c66cbef8bc3"
      ],
      "author": {
        "name": "Stefan Wang",
        "email": "1fannnw@gmail.com",
        "time": "Sat Oct 10 22:58:58 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 13:58:58 2026 +0800"
      },
      "message": "GH-2870: Report compressed dictionary page sizes in the CLI (#3798)"
    },
    {
      "commit": "e01aa19bc752ca85fd2937243af41c66cbef8bc3",
      "tree": "8a58224cb7b063cafa84ac4bc1dcf30b3f65b3cb",
      "parents": [
        "72719f3e91e2ca0781992a3929b96ef276297155"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Oct 11 13:24:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 13:24:55 2026 +0800"
      },
      "message": "Bump org.apache.commons:commons-lang3 from 3.20.0 to 3.21.0 (#3836)\n\nBumps org.apache.commons:commons-lang3 from 3.20.0 to 3.21.0.\n\n---\nupdated-dependencies:\n- dependency-name: org.apache.commons:commons-lang3\n  dependency-version: 3.21.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "72719f3e91e2ca0781992a3929b96ef276297155",
      "tree": "bd8cd95bc33eac1bd10bac47c44d56fc86454287",
      "parents": [
        "43e3d03e9fed506d7fcfe91ba8db1fbd0fde7c64"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Oct 11 13:24:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 13:24:41 2026 +0800"
      },
      "message": "Bump org.mockito:mockito-core from 5.23.0 to 5.24.0 (#3840)\n\nBumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.23.0 to 5.24.0.\n- [Release notes](https://github.com/mockito/mockito/releases)\n- [Commits](https://github.com/mockito/mockito/compare/v5.23.0...v5.24.0)\n\n---\nupdated-dependencies:\n- dependency-name: org.mockito:mockito-core\n  dependency-version: 5.24.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "43e3d03e9fed506d7fcfe91ba8db1fbd0fde7c64",
      "tree": "8bdda1149f4589e6f765722d6ddf8b46f0472769",
      "parents": [
        "398b63efb780b2cb7633635e68e239f9c487d0eb"
      ],
      "author": {
        "name": "Xinyao Zhang",
        "email": "43081360+zhangxinyao88@users.noreply.github.com",
        "time": "Sat Oct 10 02:58:48 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 10 14:58:48 2026 +0800"
      },
      "message": "GH-3289: Test schema and metadata through CLI arguments (#3843)"
    },
    {
      "commit": "398b63efb780b2cb7633635e68e239f9c487d0eb",
      "tree": "96829cd81e838f4234642426cd2b53946f44af20",
      "parents": [
        "63983b857e44cfe183947d9093e8dad32771fb9c"
      ],
      "author": {
        "name": "Peter Puškár",
        "email": "93598525+puskarpeter@users.noreply.github.com",
        "time": "Fri Oct 09 05:50:10 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 11:50:10 2026 +0800"
      },
      "message": "GH-3751: Preserve field repetition when truncating recursive proto fields (#3752)\n\nThe maxRecursion truncation (PARQUET-1711) replaced recursive fields\nwith a hardcoded optional binary, while ProtoWriteSupport still wraps\nrepeated/map fields\u0027 writers in ArrayWriter/RepeatedWriter/MapWriter.\nWriting data that nests deeper than maxRecursion through a repeated\nrecursive field crashed with a ClassCastException in parquet-specs mode\nand corrupted the file in the old style (inconsistent repetition\nlevels: reads fail with ParquetDecodingException or return a wrong\ntree). A map field exhausting the recursion budget collapsed entirely\n- keys included - into one binary, and writing data through it crashed\nthe same way.\n\nTruncate to proto bytes preserving the field\u0027s shape instead, reusing\nthe terminate-as-bytes path introduced for empty message types\n(GH-2142): LIST-wrapped binary for repeated fields in specs mode,\nrepeated binary in the old style, and the MAP structure kept with the\nrecursive value truncated inside key_value (the map branch now runs\nbefore the recursion check). Truncated optional fields are unchanged;\nproto2 required fields now keep their required repetition. Each\ntruncated cell round-trips as the serialized subtree, and with the\nbinary-to-message read path from GH-2142 the truncated messages read\nback losslessly through ProtoParquetReader.\n\nSigned-off-by: Puškár, Peter \u003cpeter.puskar@firma.seznam.cz\u003e"
    },
    {
      "commit": "63983b857e44cfe183947d9093e8dad32771fb9c",
      "tree": "aed541514643bcab2edda02911eb489281ace582",
      "parents": [
        "921c3571f4086464c2888a9532ca6d925559c241"
      ],
      "author": {
        "name": "Manu Zhang",
        "email": "OwenZhang1990@gmail.com",
        "time": "Sun Oct 04 23:35:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 23:35:03 2026 +0800"
      },
      "message": "Bump jackson.version from 2.22.2 to 2.22.3 (#3834)\n\nJackson 2.22.2, which parquet-jackson shades, is affected by\nCVE-2026-89407 and CVE-2026-89425 in jackson-core. Both are fixed in\n2.22.3.\n\nGenerated-by: Claude Code\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "921c3571f4086464c2888a9532ca6d925559c241",
      "tree": "f1b8cd50348a1787c55bb834411a6245c14b3347",
      "parents": [
        "4b37c193e2f796d553a20cc57ec9835ceaa1c95c"
      ],
      "author": {
        "name": "Eduard Tudenhoefner",
        "email": "etudenhoefner@gmail.com",
        "time": "Wed Sep 30 09:09:45 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 09:09:45 2026 +0200"
      },
      "message": "GH-3792: Bind parquet fields to Avro names before aliases (#3793)"
    },
    {
      "commit": "4b37c193e2f796d553a20cc57ec9835ceaa1c95c",
      "tree": "6ab69e27166405ab3fe4a20d86f11d11de4fe35b",
      "parents": [
        "b1e2d0358c4f8a652a44307a897944c4ca1e5e73"
      ],
      "author": {
        "name": "Sankalp Thakur",
        "email": "31366524+sankalpsthakur@users.noreply.github.com",
        "time": "Thu Sep 24 13:50:45 2026 +0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 17:50:45 2026 +0800"
      },
      "message": "GH-3587: Test Util -1 max message size sentinel (#3800)\n\nThe validation fix is already on master; GitHub issue 3587 stayed open\nbecause #3588 used Closes #GH-3587. Cover the -1 default at the Util\nread path and document the public sentinel.\n\nCo-authored-by: Cursor Agent \u003ccursoragent@cursor.com\u003e\nCo-authored-by: Sankalp Thakur \u003csankalpsthakur@users.noreply.github.com\u003e"
    },
    {
      "commit": "b1e2d0358c4f8a652a44307a897944c4ca1e5e73",
      "tree": "853fd705e5b2571a86d242d69881c17732baff66",
      "parents": [
        "29347baf0aa7f294cb7e9b0587674c9f1f203f0c"
      ],
      "author": {
        "name": "Claire McGinty",
        "email": "clairem@spotify.com",
        "time": "Thu Sep 24 00:47:18 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 12:47:18 2026 +0800"
      },
      "message": "GH-3816: Automatically detect list encodings in AvroReadSupport (#3753)\n\n### Rationale for this change\n\nparquet-avro supports writing both \"old\" and \"new\" list encodings via the [parquet.avro.write-old-list-structure](https://github.com/apache/parquet-java/blob/apache-parquet-1.18.0/parquet-avro/src/main/java/org/apache/parquet/avro/AvroWriteSupport.java#L72-L73) config. \"old\" encodings (aka \"2-level\"), which wrap the list in a `repeated group array` schema, are the default; \"new\" encodings (aka \"3-level\") are opt-in.\n\nOn the reader side, if you\u0027re using `ParquetAvroReader` to read data that was written using `ParquetAvroWriter`, and don\u0027t specify a projection, both type sof list encoding get parsed automatically from a combination of the file schema + the `parquet.avro.schema` metadata key. There\u0027s no need to set `parquet.avro.write-old-list-structure` key in your Configuration.\n\nHowever, if you\u0027re either:\n\n- specifying a projection (`AvroReadSupport.setRequestedProjection(...)`), or\n- reading data _not_ written using ParquetAvroWriter (and thus not containing the `parquet.avro.schema` metadata key),\n\n3-levle list encodings will not be parsed correctly - the reader will inject an extra nested record, named `element`, into the list item type.\n\nAs a reader this introduces some pain, since you have to look up the underlying file metadata of the upstream Parquet file, and risk reading incorrect data. This PR attempts to automatically detect new list encodings based on the writer file schema.\n\nlmk what you think of this change. Automatic inference is always a bit risky, but I tried to be conservative with the approach (only set the list structure property if _all_ list fields in the schema use 3-level encoding; don\u0027t override `parquet.avro.write-old-list-structure` if the user is already setting it). any ideas for a better approach here are welcome - this is becoming more of a pain point as 3-level lists become a more popular option among other writer sdks.\n\n### What changes are included in this PR?\n\nA new read configuration property `parquet.avro.read.autoDetectListStructure` (defaulting to true) that will instruct AvroReadSupport to automatically set List configuration properties based on parsing the writer file schema.\n\n### Are these changes tested?\n\nYes, unit tests + locally on real data.\n\n### Are there any user-facing changes?\n\nYes, since the new property defaults to `true` - it would impact anyone who\u0027s reading 3-level list data without setting the `parquet.avro.write-old-list-structure` key and who\u0027s relying on/working around the incorrectly formatted data (e.g. `{\"locations\": [{\"element\": {\"latitude\": 0.0, \"longitude\": 180.0}}, ...]}` instead of `{\"locations\": [{\"latitude\": 0.0, \"longitude\": 180.0}, ...]}` .\n\nadditionally, this change also modifies the underlying Configuration object to add the properties.\n\nCloses #3816"
    },
    {
      "commit": "29347baf0aa7f294cb7e9b0587674c9f1f203f0c",
      "tree": "08f834f7369bfd7bcdd5d8703e137314b9292867",
      "parents": [
        "408ddb4e3b0503028a5e5f6062f982467ba3b3d4"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 24 11:43:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 11:43:22 2026 +0800"
      },
      "message": "Bump actions/setup-java from 6.0.0 to 6.0.1 (#3806)\n\nBumps [actions/setup-java](https://github.com/actions/setup-java) from 6.0.0 to 6.0.1.\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/dd06d9cba3e5552c54d9f8ea23572deb30010f7c...de7274f081f381c8f8158605e0321c36c376e2e6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: 6.0.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "408ddb4e3b0503028a5e5f6062f982467ba3b3d4",
      "tree": "2a8d80ba209b4658c4ec44675506bd4f55292437",
      "parents": [
        "45851ec0e7ce096ca78e95922c9fd28f09153592"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 24 11:43:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 11:43:18 2026 +0800"
      },
      "message": "Bump org.codehaus.mojo:exec-maven-plugin from 3.6.3 to 3.6.4 (#3808)\n\nBumps [org.codehaus.mojo:exec-maven-plugin](https://github.com/mojohaus/exec-maven-plugin) from 3.6.3 to 3.6.4.\n- [Release notes](https://github.com/mojohaus/exec-maven-plugin/releases)\n- [Commits](https://github.com/mojohaus/exec-maven-plugin/compare/3.6.3...3.6.4)\n\n---\nupdated-dependencies:\n- dependency-name: org.codehaus.mojo:exec-maven-plugin\n  dependency-version: 3.6.4\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "45851ec0e7ce096ca78e95922c9fd28f09153592",
      "tree": "b8cd35159a201d57623d474a6e185fe8c0bda656",
      "parents": [
        "cfb157bc007ab4448251231af8d3e3c56fb6eada"
      ],
      "author": {
        "name": "Bodor Laszlo",
        "email": "bodorlaszlo0202@gmail.com",
        "time": "Thu Sep 24 04:55:09 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 10:55:09 2026 +0800"
      },
      "message": "GH-3767: Make PageReader AutoCloseable (#3768)\n\nWiden PageReader to extend AutoCloseable with a default no-op close(),\nso implementations that own resources can release them through the\nstandard try-with-resources / AutoCloseables idiom rather than a\nbespoke method. Existing implementations remain source- and\nbinary-compatible.\n\nRename ColumnChunkPageReader.releaseBuffers() to close() and let the\nenclosing ColumnChunkPageReadStore.close() hand its readers to\nAutoCloseables.uncheckedClose() directly."
    },
    {
      "commit": "cfb157bc007ab4448251231af8d3e3c56fb6eada",
      "tree": "baf9bde4b0d390eac43ec5cb8b4d5238b628ae20",
      "parents": [
        "b2905afecace1b918db5ecfbdd40836a8debaa98"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 24 10:53:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 10:53:21 2026 +0800"
      },
      "message": "Bump zizmorcore/zizmor-action from 0.6.3 to 0.6.4 (#3807)\n\nBumps [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) from 0.6.3 to 0.6.4.\n- [Release notes](https://github.com/zizmorcore/zizmor-action/releases)\n- [Commits](https://github.com/zizmorcore/zizmor-action/compare/70fb788f84895a7701f5643d103d587e460b5c99...cc914d7f3750a2d13d75c7f184a1060aa0e9d482)\n\n---\nupdated-dependencies:\n- dependency-name: zizmorcore/zizmor-action\n  dependency-version: 0.6.4\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "b2905afecace1b918db5ecfbdd40836a8debaa98",
      "tree": "32c8cbbd475f84d06eacc43c5a22d6dd657d5377",
      "parents": [
        "441b587ea618730081ad6da7b6cbde086442a88c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 24 10:39:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 10:39:33 2026 +0800"
      },
      "message": "Bump org.codehaus.mojo:buildnumber-maven-plugin from 3.2.0 to 3.3.1 (#3809)\n\nBumps [org.codehaus.mojo:buildnumber-maven-plugin](https://github.com/mojohaus/buildnumber-maven-plugin) from 3.2.0 to 3.3.1.\n- [Release notes](https://github.com/mojohaus/buildnumber-maven-plugin/releases)\n- [Commits](https://github.com/mojohaus/buildnumber-maven-plugin/compare/3.2.0...buildnumber-maven-plugin-3.3.1)\n\n---\nupdated-dependencies:\n- dependency-name: org.codehaus.mojo:buildnumber-maven-plugin\n  dependency-version: 3.3.1\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "441b587ea618730081ad6da7b6cbde086442a88c",
      "tree": "297eeecb6fd6a76b1b6dafe2722c25986f8c3849",
      "parents": [
        "53e98f185f0d47b8bae853edfce42560a16bb22f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 24 10:35:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 10:35:45 2026 +0800"
      },
      "message": "Bump org.codehaus.mojo:build-helper-maven-plugin from 3.6.1 to 3.6.2 (#3810)\n\nBumps [org.codehaus.mojo:build-helper-maven-plugin](https://github.com/mojohaus/build-helper-maven-plugin) from 3.6.1 to 3.6.2.\n- [Release notes](https://github.com/mojohaus/build-helper-maven-plugin/releases)\n- [Commits](https://github.com/mojohaus/build-helper-maven-plugin/compare/3.6.1...3.6.2)\n\n---\nupdated-dependencies:\n- dependency-name: org.codehaus.mojo:build-helper-maven-plugin\n  dependency-version: 3.6.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "53e98f185f0d47b8bae853edfce42560a16bb22f",
      "tree": "7f31909910f4a86c8f096bb2b907084eededb7d7",
      "parents": [
        "0756c3d99ed024633616ec3cbceece57ac7c42fd"
      ],
      "author": {
        "name": "Stefan Wang",
        "email": "1fannnw@gmail.com",
        "time": "Wed Sep 23 19:09:39 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 10:09:39 2026 +0800"
      },
      "message": "GH-3682: Record an explicit revision when building from a source release (#3757)\n\nThe ASF source release is a `git archive`, so it has no .git directory.\nbuildnumber-maven-plugin leaves buildNumber unset, and tarball builds\nship `(build ${buildNumber})` and a blank `git-SHA-1` entry, so they\ncannot report what they were built from.\n\nSet the plugin\u0027s existing revisionOnScmFailure so they record `unknown`.\nGit checkouts still report the real commit.\n\nSigned-off-by: 1fanwang \u003c1fannnw@gmail.com\u003e"
    },
    {
      "commit": "0756c3d99ed024633616ec3cbceece57ac7c42fd",
      "tree": "45de3e0d58b5507c3054f2323d9809cd33a58c73",
      "parents": [
        "c3def131da9f09d8bcf3968cf076f410fdcf5309"
      ],
      "author": {
        "name": "Steve Loughran",
        "email": "stevel@apache.org",
        "time": "Wed Sep 23 17:09:04 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 00:09:04 2026 +0800"
      },
      "message": "GH-3080: HadoopStreams to support ByteBufferPositionedReadable (#3096)\n\n### Rationale for this change\n\nIf a stream declares in its StreamCapabilities that it supports\n`ByteBufferPositionedReadable`, then use that API for\n`readFully(ByteBuffer)`\n\n```\nByteBufferPositionedReadable.readFully(long position, ByteBuffer buf)\n```\n\nAdding support for Hadoop `ByteBufferPositionedReadable` streams may improve performance\nby pushing retry/recovery logic into the filesystem client library.\n\nThis interface is implemented by the HDFS input stream; we are considering adding\nit elsewhere.\n\n### What changes are included in this PR?\n\n* New SeekableInputStream implementation: `H3ByteBufferInputStream`\n* Instantiated in `HadoopStreams` if the `FSDataInputStream` is considered suitable.\n* Tests for the new behavior and that no regressions are caused.\n\n#### Class `H3ByteBufferInputStream`\n\nThe reading is done in a new class, `H3ByteBufferInputStream`, which subclasses `H2ByteBufferInputStream`. This reduces the amount of duplicate code, it just makes it a bit unclean.\n\nThe purist way to do it would be to create an abstract superclass `HadoopInputStream` to hold all commonality between the the three input streams.\n\nI\u0027m happy to do this, just didn\u0027t want to doing some larger refactoring without (a) showing the core design worked and (b) getting permission to do this. Should I do this?\n\n#### `HadoopStreams` changes\n\nSelection of the new input stream is done if and only if the stream declares the capability `in:preadbytebuffer`.\nThere is no equivalent of `isWrappedStreamByteBufferReadable()` which recurses through\na chain of wrapped streams looking for the API.\nIf a stream doesn\u0027t declare its support for the API, it won\u0027t get picked up.\nThis is done knowing that the sole production implemenation which currently exists, \nthe HDFS input stream, does declare this capability.\n\n### Are these changes tested?\n\nThere is new test suite, for new behavior and ensuring that the integration with\nHadoopStreams still retains the correct behavior for existing streams.\nSuite is parameterized on heap and direct buffers.\n\n### Are there any user-facing changes?\n\nNo\n\nCloses GH-3080"
    },
    {
      "commit": "c3def131da9f09d8bcf3968cf076f410fdcf5309",
      "tree": "c19694e039afcc6f794e64317524899ce8df61df",
      "parents": [
        "d2a165e4ee963f6ce36a2a237a6f76efb6d5418b"
      ],
      "author": {
        "name": "Peter Puškár",
        "email": "93598525+puskarpeter@users.noreply.github.com",
        "time": "Wed Sep 23 17:33:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 23:33:48 2026 +0800"
      },
      "message": "GH-2142: Write fields of empty message types as proto bytes (#3750)\n\n### Rationale for this change\n\nProtobuf allows empty message definitions, but Parquet forbids empty groups. Converting a message\nthat merely *contains* a field of an empty message type produces a schema with an empty group,\nwhich writer construction rejects with `InvalidSchemaException: Cannot write a schema with an\nempty group`. Such fields appear in real-world schemas (deprecated stubs, marker/placeholder\nmessages), and a single one makes the whole message type unwritable.\n\n### What changes are included in this PR?\n\n`ProtoSchemaConverter.addMessageField` terminates a field whose message type has no fields as a\n`BINARY` column holding the serialized message — the same mechanism PARQUET-1711 uses for\nrecursion beyond `maxRecursion`. Since an empty message serializes to zero bytes, the column is\ncheap, and field **presence** still round-trips (null \u003d unset vs empty bytes \u003d set):\n\n- singular field → `optional binary stub` (or `required`, per the field);\n- repeated field, parquet-specs mode → LIST-wrapped binary via the existing\n  `addRepeatedPrimitive`, so element cardinality survives;\n- repeated field, old style → `repeated binary`;\n- map value type → `optional binary value` inside the `key_value` group (keys stay typed).\n\n`ProtoWriteSupport.createMessageWriter`\u0027s existing truncated-field check (primitive BINARY where a\nmessage field was declared → `BinaryWriter`) is generalized to look through the LIST/MAP wrapper\n(`getGroupType` → `getContentType`), so the writer tree lines up with these schemas.\n\nA message that is empty at the **root** is still rejected — there is no parent field to hold the\nbytes, and a Parquet file with zero columns is not representable.\n\n**Read side** (second commit, after review): `ProtoMessageConverter` used to cast every message\nfield\u0027s Parquet type to a group, so a message field stored as `BINARY` failed with a\n`ClassCastException` while the converter tree was built — which also means files with\nPARQUET-1711 recursion truncation have been unreadable by `ProtoParquetReader` since 1.13.0 (#995\nshipped with an explicit \"TODO: ReadSupport\"). A new `ProtoBinaryMessageConverter` parses the\nbytes back through `parentBuilder.newBuilderForField(field)` and hands the message to the existing\nparent container, so singular fields, LIST elements, old-style repeated fields and map values all\nround-trip without touching `ListConverter`/`MapConverter`. Parse failures surface as\n`ParquetDecodingException`.\n\n### Are these changes tested?\n\nYes. New `ProtoEmptyMessageTest` (new test messages `Stub`/`StubBox` in `Trees.proto`) writes\nthrough the real write path (`ProtoParquetWriter` → `MessageColumnIO`, both specs-compliant and\nold style) and reads back with `GroupReadSupport` and with `ProtoParquetReader`:\n\n- singular / repeated / map-value empty-message fields round-trip with correct cardinality and\n  zero-byte values;\n- presence round-trips (set empty message vs unset field);\n- `ProtoParquetReader` reads the written messages back equal to the originals (specs-compliant and\n  old style), and the same read path round-trips a `BinaryTree` truncated at `maxRecursion`;\n- an empty root message still fails with `InvalidSchemaException` (\"Cannot write a schema with an\n  empty group\").\n\n`ProtoSchemaConverterTest.testEmptyMessageFields` pins the converted schema. The full\nparquet-protobuf suite passes (117 tests).\n\n### Are there any user-facing changes?\n\nMessage types that previously could not be written to Parquet at all now can; fields of empty\nmessage types appear as (possibly LIST/MAP-wrapped) `binary` columns and read back into the\noriginal messages with `ProtoParquetReader`. Files with `maxRecursion` truncation, previously\nunreadable by `ProtoParquetReader`, now read back as well. No change for schemas that were\npreviously writable. Error behavior for an empty root message is unchanged.\n\nCloses #2142"
    },
    {
      "commit": "d2a165e4ee963f6ce36a2a237a6f76efb6d5418b",
      "tree": "fdf08a3f9fb2f88ca23b625fa73fe9280490ce2f",
      "parents": [
        "6247eaae9cfa04af448e0cb8bae5cd4d0615a293"
      ],
      "author": {
        "name": "Russell Spitzer",
        "email": "russell.spitzer@GMAIL.COM",
        "time": "Tue Sep 22 23:48:35 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 08:48:35 2026 +0200"
      },
      "message": "Release: complete the Nexus secret rename and harden cancel/publish (#3814)\n\nThe 2026-09-16 Cancel RC run for 1.19.0 rc9 failed with HTTP 401 because\nrelease-cancel-rc.yml still read secrets.PARQUET_NEXUS_USER /\nPARQUET_NEXUS_PASSWORD, which do not exist on apache/parquet-java. #3776\nmoved prepare-rc and publish to the ASF org-shared\nNEXUS_STAGE_DEPLOYER_USER / NEXUS_STAGE_DEPLOYER_PW but missed cancel-rc,\nthe last two references in the tree. Nothing was cancelled: verification\nis step 0, so the run aborted before dropping the staging repo or deleting\nthe SVN artifacts.\n\nAn absent secret expands to the empty string rather than failing, so the\ncredentials were present-but-blank and the first authenticated curl\nreported only \"error: 401\". Add require_env and call it from all three\nrelease scripts when DRY_RUN is not 1, so a missing credential is named\nbefore any network call. Dry runs stay usable without secrets because\nevery authenticated call is already gated on DRY_RUN. _maven.sh had this\ncheck for the deploy path only, which is why prepare-rc\u0027s Nexus 401 was\nequally opaque.\n\nAlso apply #3787\u0027s tag-push ordering to publish-release.sh. It pushed the\nfinal tag in step 3 and released the staging repo in step 4, so a Nexus\nfailure left a published release tag and the \"Final release tag already\nexists\" guard then blocked the retry -- the same trap #3787 removed from\nprepare-rc, where eight orphaned 1.19.0 RC tags accumulated. Keep git tag\n-a in step 3 for the local reads that follow and move only the push to\nstep 5, immediately before the GitHub release that needs it on the remote.\n\nGenerated-by: Claude Opus 5 (1M context)"
    },
    {
      "commit": "6247eaae9cfa04af448e0cb8bae5cd4d0615a293",
      "tree": "05e70eaa041b88fc8286ebc950be5b5212b65a66",
      "parents": [
        "efec5556522052b67090f842594bc78fc0a3e330"
      ],
      "author": {
        "name": "Stefan Wang",
        "email": "1fannnw@gmail.com",
        "time": "Tue Sep 22 18:59:01 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 09:59:01 2026 +0800"
      },
      "message": "MINOR: Include local file paths in reader diagnostics (#3804)"
    },
    {
      "commit": "efec5556522052b67090f842594bc78fc0a3e330",
      "tree": "fa2fe54ebd71266d71dc7306494ae7377e947afb",
      "parents": [
        "1c9367fd6d61146efe530af749cd57b6b002fc79"
      ],
      "author": {
        "name": "Divjot Arora",
        "email": "div.arora@databricks.com",
        "time": "Tue Sep 22 09:19:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 09:19:57 2026 +0200"
      },
      "message": "GH-3679: Allow TimestampType to annotate FLBA(12) (#3680)\n\n* Allow TimestampType to annotate FLBA(12)\n\n* address PR comments\n\n* address comments\n\n* Add InterOp read test for FLBA(12) TIMESTAMP file\n\nCo-authored-by: Isaac\n\n* Fix FLBA timestamp tests\n\n* Update timestamp validation assertions"
    },
    {
      "commit": "1c9367fd6d61146efe530af749cd57b6b002fc79",
      "tree": "bfe3d048fd83b2a5ae575fa0d0f41a091015e7d6",
      "parents": [
        "2d248a07071904e8e17c0e9f381efcc5435be344"
      ],
      "author": {
        "name": "Steven Ware Jones",
        "email": "stevenwarejones@gmail.com",
        "time": "Tue Sep 22 03:12:02 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 10:12:02 2026 +0300"
      },
      "message": "GH-3683: Support programmatic KMS client factories (#3785)\n\n* GH-3683: Support programmatic KMS client factories\n\n* GH-3683: Isolate factory caches and add cleanup\n\n* GH-3683: Pass KMS factory creation context\n\n* GH-3683: Preserve KMS factories across configuration copies\n\n* GH-3683: Scope KEK caches by KMS instance\n\n* GH-3683: Use KMS URL default in assertion\n\n* GH-3683: Limit KMS-scoped KEK cache to factories\n\n* GH-3683: Document and test KMS client factories"
    },
    {
      "commit": "2d248a07071904e8e17c0e9f381efcc5435be344",
      "tree": "42d155c383ccd8a6ba944d4458240627d8d20d15",
      "parents": [
        "61a766b0a754715dc577829ccd819ce13e75d234"
      ],
      "author": {
        "name": "Divjot Arora",
        "email": "div.arora@databricks.com",
        "time": "Mon Sep 21 20:26:58 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 20:26:58 2026 +0200"
      },
      "message": "MINOR: Migrate file status reuse test to JUnit 5 (#3813)"
    },
    {
      "commit": "61a766b0a754715dc577829ccd819ce13e75d234",
      "tree": "bd5005b4bd171d0b16018e9a79516ef39d85772b",
      "parents": [
        "b98dd9bb4d49beb933912cfde2525fe507b77a88"
      ],
      "author": {
        "name": "Divjot Arora",
        "email": "div.arora@databricks.com",
        "time": "Mon Sep 21 13:16:19 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 13:16:19 2026 +0200"
      },
      "message": "GH-3710: Tolerate unrecognized logical/physical type combinations (#3711)\n\n* Tolerate unrecognized logical/physical type combinations when reading\n\n* address comments + test\n\n* address comments\n\n* update parquet-testing file ref\n\n* address comments\n\n* improvements\n\n* add test"
    },
    {
      "commit": "b98dd9bb4d49beb933912cfde2525fe507b77a88",
      "tree": "424d5623adfe5253871b06ae88425ed592eff492",
      "parents": [
        "2f34ba390501a6d08b47fec17c507b013b4decb3"
      ],
      "author": {
        "name": "Peter Lee",
        "email": "peterxcli@gmail.com",
        "time": "Sun Sep 20 13:53:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 20 13:53:29 2026 +0800"
      },
      "message": "GH-3735: Use unsigned UTF-8 byte order for Variant object field keys (#3746)"
    },
    {
      "commit": "2f34ba390501a6d08b47fec17c507b013b4decb3",
      "tree": "7686c1340ff66a93c5ec9fd36632141e66ac7917",
      "parents": [
        "2df8d02678dab4bb8b926a0d3221cc652984c7ab"
      ],
      "author": {
        "name": "Aaron Niskode-Dossett",
        "email": "aniskodedossett@etsy.com",
        "time": "Sat Sep 19 22:31:52 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 20 11:31:52 2026 +0800"
      },
      "message": "GH-3394: Reuse listed file status during split planning (#3674)"
    },
    {
      "commit": "2df8d02678dab4bb8b926a0d3221cc652984c7ab",
      "tree": "46f042bed3f65e6f701687d85913f1df8a2b8094",
      "parents": [
        "4d2a1d2be868482e52dd33f514882676fca4ad45"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 17 15:19:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 15:19:29 2026 +0200"
      },
      "message": "Bump protobuf.version from 4.35.1 to 4.36.1 (#3790)\n\nBumps `protobuf.version` from 4.35.1 to 4.36.1.\n\nUpdates `com.google.protobuf:protobuf-java` from 4.35.1 to 4.36.1\n- [Release notes](https://github.com/protocolbuffers/protobuf/releases)\n- [Commits](https://github.com/protocolbuffers/protobuf/commits)\n\nUpdates `com.google.protobuf:protobuf-java-util` from 4.35.1 to 4.36.1\n\n---\nupdated-dependencies:\n- dependency-name: com.google.protobuf:protobuf-java\n  dependency-version: 4.36.1\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n- dependency-name: com.google.protobuf:protobuf-java-util\n  dependency-version: 4.36.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "4d2a1d2be868482e52dd33f514882676fca4ad45",
      "tree": "8fbcb4cc8f81ef1fb1ebccc613fb5590a96b11e9",
      "parents": [
        "1b1993a105f91d7f7a900ecdba9226d3417e2a30"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 17 14:32:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 14:32:37 2026 +0200"
      },
      "message": "Bump de.skuzzle.enforcer:restrict-imports-enforcer-rule (#3779)\n\nBumps [de.skuzzle.enforcer:restrict-imports-enforcer-rule](https://github.com/skuzzle/restrict-imports-enforcer-rule) from 3.0.1 to 3.0.2.\n- [Release notes](https://github.com/skuzzle/restrict-imports-enforcer-rule/releases)\n- [Changelog](https://github.com/skuzzle/restrict-imports-enforcer-rule/blob/master/CHANGELOG_LEGACY.md)\n- [Commits](https://github.com/skuzzle/restrict-imports-enforcer-rule/compare/v3.0.1...v3.0.2)\n\n---\nupdated-dependencies:\n- dependency-name: de.skuzzle.enforcer:restrict-imports-enforcer-rule\n  dependency-version: 3.0.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "1b1993a105f91d7f7a900ecdba9226d3417e2a30",
      "tree": "27a7e0d86d74974de7060c221ac2d4672fba0141",
      "parents": [
        "f318b5221a22e73dd2472a24701cbb8204b36ca1"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 17 14:32:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 14:32:26 2026 +0200"
      },
      "message": "Bump com.github.luben:zstd-jni from 1.5.7-15 to 1.5.7-16 (#3778)\n\nBumps [com.github.luben:zstd-jni](https://github.com/luben/zstd-jni) from 1.5.7-15 to 1.5.7-16.\n- [Commits](https://github.com/luben/zstd-jni/compare/v1.5.7-15...v1.5.7-16)\n\n---\nupdated-dependencies:\n- dependency-name: com.github.luben:zstd-jni\n  dependency-version: 1.5.7-16\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "f318b5221a22e73dd2472a24701cbb8204b36ca1",
      "tree": "59710f47bf4a6bb8e287149c2f90d5c1659e2a04",
      "parents": [
        "38a6318f2fca1c945ab8f1ed32035300cfd64684"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 17 14:18:50 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 14:18:50 2026 +0200"
      },
      "message": "Bump com.google.api.grpc:proto-google-common-protos (#3789)\n\nBumps [com.google.api.grpc:proto-google-common-protos](https://github.com/googleapis/google-cloud-java) from 2.74.0 to 2.76.0.\n- [Release notes](https://github.com/googleapis/google-cloud-java/releases)\n- [Changelog](https://github.com/googleapis/google-cloud-java/blob/main/java-document-ai/CHANGELOG.md)\n- [Commits](https://github.com/googleapis/google-cloud-java/commits/gapic-generator-java/v2.76.0)\n\n---\nupdated-dependencies:\n- dependency-name: com.google.api.grpc:proto-google-common-protos\n  dependency-version: 2.76.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "38a6318f2fca1c945ab8f1ed32035300cfd64684",
      "tree": "7e21164be0d8243e0d167175a4973573983b4703",
      "parents": [
        "7a9665a392551143548477f733c9321c4775b32e"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 17 14:17:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 14:17:31 2026 +0200"
      },
      "message": "Bump zizmorcore/zizmor-action from 0.6.2 to 0.6.3 (#3777)\n\nBumps [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) from 0.6.2 to 0.6.3.\n- [Release notes](https://github.com/zizmorcore/zizmor-action/releases)\n- [Commits](https://github.com/zizmorcore/zizmor-action/compare/3dc1ecc9bcb9e94e9b2c709687979e1298497054...70fb788f84895a7701f5643d103d587e460b5c99)\n\n---\nupdated-dependencies:\n- dependency-name: zizmorcore/zizmor-action\n  dependency-version: 0.6.3\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "7a9665a392551143548477f733c9321c4775b32e",
      "tree": "7f69b3ab9625015fe69cd9dafddb28b89ff4edc2",
      "parents": [
        "f420b64250781dca5a2b1ca56d105695106fc78a"
      ],
      "author": {
        "name": "Russell Spitzer",
        "email": "russell.spitzer@GMAIL.COM",
        "time": "Mon Sep 14 18:57:28 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 16:57:28 2026 -0700"
      },
      "message": "Prepare RC: use the repositories API to verify staged artifacts (#3794)\n\nnexus_check_staging_artifact built URLs under /content/repositories/\u003cid\u003e/,\nwhich does not serve open staging repositories. The check therefore failed\nfor every RC: prepare-rc.sh runs it before closing, so the repo is always\nopen at that point. 1.19.0-rc8 aborted this way even though the staging\nrepo was correct and complete.\n\nConfirmed by probing repository.apache.org: /content/repositories/\u003cid\u003e/...\nreturned 404 anonymously, with a committer user token, and with the\ndeployer service account, while /service/local/repositories/\u003cid\u003e/content/...\nreturned 200. Closing the repo by hand flipped /content/repositories/ to\n200, confirming it only serves closed repos.\n\nSwitch to the repositories API, which serves a staging repo in both states.\nThat matters because this function has call sites on both sides of the\nclose: prepare-rc.sh checks pre-close (open), while cancel-rc.sh and\npublish-release.sh reach it via nexus_verify_staging_repo post-close\n(closed). Neither of those had run against real Nexus, so both carried\nthe same latent failure.\n\nVerified against a live staging repo in both states, and end-to-end by\nrunning cancel-rc.sh against a closed repo, which also exercised\nnexus_get_staging_repo_metadata and nexus_drop_staging_repo for the\nfirst time.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "f420b64250781dca5a2b1ca56d105695106fc78a",
      "tree": "a7c5d769ee5e442ec2b036208d7abb61c33e961c",
      "parents": [
        "b033099873af82fd65be3094c80adf5ffc691517"
      ],
      "author": {
        "name": "Eduard Tudenhoefner",
        "email": "etudenhoefner@gmail.com",
        "time": "Mon Sep 14 14:17:38 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 14:17:38 2026 +0200"
      },
      "message": "Add AGENTS.md with AssertJ/JUnit5 test migration guidelines (#3728)\n\n* Add AGENTS.md with AssertJ/JUnit5 test migration guidelines\n\n* move into separate files"
    },
    {
      "commit": "b033099873af82fd65be3094c80adf5ffc691517",
      "tree": "58e95797a3d409f47195535f31686f37be1f223c",
      "parents": [
        "21baba5fbe52f15d99ac293b41b9d7bd0ae6cd9a"
      ],
      "author": {
        "name": "Vinoo Ganesh",
        "email": "vinooganesh@users.noreply.github.com",
        "time": "Mon Sep 14 08:17:00 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 14:17:00 2026 +0200"
      },
      "message": "Update inlined parquet.thrift to parquet-format 2.14.0 (#3791)\n\nBrings the IDL up from 2.13.0, picking up the FILE logical type, INT96\nchronological ordering and the ALP encoding.\n\nFILE now exists in the LogicalType union, so the converter would have\nthrown on it instead of falling into the unrecognised-type branch that\nignores it. It is ignored explicitly now, keeping the physical type as\nbefore.\n\nALP is in the format enum but has no Java implementation yet, so\ntestEnumEquivalence skips it until one lands."
    },
    {
      "commit": "21baba5fbe52f15d99ac293b41b9d7bd0ae6cd9a",
      "tree": "e3aa109cce4b8db234621113e871fd05f3add872",
      "parents": [
        "cf7ee1e01a680029d84276c3ef050acb7302f60c"
      ],
      "author": {
        "name": "Russell Spitzer",
        "email": "russell.spitzer@GMAIL.COM",
        "time": "Fri Sep 11 06:08:21 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 13:08:21 2026 +0200"
      },
      "message": "Prepare RC: push the RC tag only after staging succeeds (#3787)\n\nprepare-rc.sh created and pushed the RC tag at step 5, then did the work\nthat can actually fail -- Nexus deploy, source tarball, SVN staging -- in\nsteps 6-8. Every failure in that window left a published tag and consumed\nan RC number; 1.19.0 accumulated eight orphaned tags (rc0-rc7, all on the\nsame commit) that way, and cancel-rc.sh cannot clean them up because it\nrequires a live staging repository.\n\nKeep `git tag -a` at step 5 so local consumers still resolve it -- step 7\nreads it via `git rev-list -1` and `git archive`, both local -- and move\nonly `git push origin \u003ctag\u003e` to step 9, immediately before the GitHub\npre-release that needs it on the remote. A failure in steps 6-8 now\nleaves the tag only on the runner, so a retry reuses the same RC number\nwith no ref surgery.\n\nThe branch push stays at step 5: it publishes the version-bump commit, is\nidempotent, and is what lets a retry skip the version update.\n\nTrade-off: staged artifacts are briefly visible before the tag exists,\nand a tag push failing after staging succeeds leaves a staged RC with no\ntag. Recovery there is one idempotent `git push origin \u003ctag\u003e`, which is\ncheaper than deleting a published ref.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "cf7ee1e01a680029d84276c3ef050acb7302f60c",
      "tree": "e589cde6935fdca6b3d05169c2b62f3ef5b3d5f2",
      "parents": [
        "8e903700c18f55c9ff744e556a2b58da231afae6"
      ],
      "author": {
        "name": "Russell Spitzer",
        "email": "russell.spitzer@GMAIL.COM",
        "time": "Thu Sep 10 08:28:27 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 15:28:27 2026 +0200"
      },
      "message": "Prepare RC: install Thrift before the release build (#3786)\n\nparquet-format-structures compiles .thrift sources with the thrift\nbinary, but release-prepare-rc.yml never installed it, so the release\nbuild failed with \"thrift: not found\" once it reached module 2. This was\nmasked until now because earlier runs failed on the Nexus deploy of\nmodule 1 and never got that far.\n\nReuse dev/ci-before_install.sh — the same script ci-hadoop3.yml uses —\nso the release build compiles against the Thrift version CI validated\nagainst, and a future version bump updates both together.\n\nCI_TARGET_BRANCH is deliberately left unset. It makes the script source\ndev/ci-before_install-\u003cbranch\u003e.sh, and the only such script is a\nmaster-branch SNAPSHOT check that is irrelevant to a release build.\n\nrelease-publish.yml needs no equivalent change: its only Maven call is\n./mvnw -pl . versions:set-property, which compiles nothing.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "8e903700c18f55c9ff744e556a2b58da231afae6",
      "tree": "9450313c0c9cc93215c1774fcb92ac70d935b28b",
      "parents": [
        "9d518b179fc48338322c8e7ef251fdc5b16346e3"
      ],
      "author": {
        "name": "Divjot Arora",
        "email": "div.arora@databricks.com",
        "time": "Tue Sep 08 09:51:27 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 15:51:27 2026 +0200"
      },
      "message": "MINOR: Reuse RLE decoder buffers for packed runs (#3749)\n\n* Reuse RLE packed buffers to avoid per-run allocation\n\n* Fix Spotless formatting in RLE decoder tests\n\n* Fix RLE decoder benchmark formatting"
    },
    {
      "commit": "9d518b179fc48338322c8e7ef251fdc5b16346e3",
      "tree": "4b094e566514575a816f8f01ed03cba4c787d86f",
      "parents": [
        "6d0519f416c49c26ad360ffc77f75702870dff4e"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Sun Sep 06 17:51:50 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 06 23:51:50 2026 +0800"
      },
      "message": "MINOR: Preserve ByteBuffer order in little-endian reads (#3702)"
    },
    {
      "commit": "6d0519f416c49c26ad360ffc77f75702870dff4e",
      "tree": "ae8a8a1a4a26897a145932c56e29ef9f5972c25b",
      "parents": [
        "6cb05ba596d2d743553b6ef810c462a4d7aad6ef"
      ],
      "author": {
        "name": "Russell Spitzer",
        "email": "russell.spitzer@GMAIL.COM",
        "time": "Sat Sep 05 02:26:54 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 09:26:54 2026 +0200"
      },
      "message": "Release workflows: use ASF org-shared Nexus deployer secret names (#3776)\n\nNexus staging deploys returned HTTP 401 because the release workflows\nread secrets.PARQUET_NEXUS_USER / PARQUET_NEXUS_PASSWORD, which don\u0027t\nexist on apache/parquet-java. ASF Infra shares the deployer credentials\nat the org level under NEXUS_STAGE_DEPLOYER_USER / NEXUS_STAGE_DEPLOYER_PW.\nPoint the workflows at those names so the env vars are populated and\nNexus accepts the upload.\n\nCo-authored-by: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "6cb05ba596d2d743553b6ef810c462a4d7aad6ef",
      "tree": "86acf3447b1b2865332ce4f1d8e355586bb6870a",
      "parents": [
        "a363f5da79ebbbe7f79d6a83d6f4371fc49adfde"
      ],
      "author": {
        "name": "Russell Spitzer",
        "email": "russell.spitzer@GMAIL.COM",
        "time": "Fri Sep 04 13:57:01 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 20:57:01 2026 +0200"
      },
      "message": "Release workflows: use JDK 17 to match project target (#3771)\n\npom.xml sets \u003cmaven.compiler.release\u003e17\u003c/maven.compiler.release\u003e (since\n#3579, \"Bump minimum Java version to 17\"), but release-prepare-rc.yml\nand release-publish.yml still set up JDK 11. The mismatch produces\n\"class file version 61.0 vs. 55.0\" errors when the release build runs\nunder Java 11. Update both workflows to JDK 17 (setup-java step name\nand java-version) so the runtime matches the compile target.\n\nCo-authored-by: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "a363f5da79ebbbe7f79d6a83d6f4371fc49adfde",
      "tree": "b3639a964eec6ab54bd9d320563032e7dc6d4627",
      "parents": [
        "a1d8829b8354f1f70698d00939add8947ef911e2"
      ],
      "author": {
        "name": "Bodor Laszlo",
        "email": "bodorlaszlo0202@gmail.com",
        "time": "Fri Sep 04 20:56:09 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 20:56:09 2026 +0200"
      },
      "message": "Fix banned imports in TestParquetFileReaderBufferLeak (#3774)"
    },
    {
      "commit": "a1d8829b8354f1f70698d00939add8947ef911e2",
      "tree": "b381b752503d08e1c45466e5c58ba5388850497e",
      "parents": [
        "5702baee6818f37436064372d08429df194233fa"
      ],
      "author": {
        "name": "Fokko Driesprong",
        "email": "fokko@apache.org",
        "time": "Fri Sep 04 16:03:43 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 22:03:43 2026 +0800"
      },
      "message": "Update Parquet version to 1.18.1 in README (#3766)"
    },
    {
      "commit": "5702baee6818f37436064372d08429df194233fa",
      "tree": "3de014858a36a7b57da8f482d777bce7231d56bb",
      "parents": [
        "0b6bccb50349c3b7edb182923b67aca5127e03fd"
      ],
      "author": {
        "name": "André Rouél",
        "email": "andre.rouel@gmail.com",
        "time": "Fri Sep 04 15:45:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 15:45:53 2026 +0200"
      },
      "message": "GH-3487: Fix `PageReadStore` buffer leak in `ParquetFileReader` (#3488)\n\n* GH-3487: Fix PageReadStore buffer leak in ParquetFileReader\n\nWhy\n\nParquetFileReader never closes the ColumnChunkPageReadStore it returns from readNextRowGroup(). When a subsequent readNextRowGroup() call is made, the previous row group\u0027s reference is silently overwritten without releasing its buffers. Likewise, ParquetFileReader.close() does not close the last row group it returned. With the default heap allocator this leak is masked by GC, but with a direct ByteBufferAllocator (e.g., one backed by Arena.ofShared()) the compressed column chunk data and decompressed page buffers become a hard native memory leak that grows with every row group read.\n\nWhat\n\nAdd a closeCurrentRowGroup() helper to ParquetFileReader that null-safely closes and nulls the currentRowGroup field. Call it in readNextRowGroup() and readNextFilteredRowGroup() before assigning the new row group, and include currentRowGroup in the AutoCloseables.uncheckedClose() chain in close(). This matches the lifecycle pattern already implemented manually by InternalParquetRecordReader but bakes it into ParquetFileReader itself so all direct callers benefit.\n\n* Update ParquetFileReader.java"
    },
    {
      "commit": "0b6bccb50349c3b7edb182923b67aca5127e03fd",
      "tree": "12d744aa524c4aef7c14b6aec4aaa25a5d473c98",
      "parents": [
        "96661de79fc7805bf6d1b8a1a26e7a5d938038f9"
      ],
      "author": {
        "name": "Aaron Niskode-Dossett",
        "email": "aniskodedossett@etsy.com",
        "time": "Fri Sep 04 08:31:45 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 15:31:45 2026 +0200"
      },
      "message": "minor: Update japicmp version to 0.26.2 (#3764)"
    },
    {
      "commit": "96661de79fc7805bf6d1b8a1a26e7a5d938038f9",
      "tree": "9dc42e1d15db0712d88fafaaa19f16cbcb313d48",
      "parents": [
        "fb64102f9dac059637ec8e991fb8e6e7518853f6"
      ],
      "author": {
        "name": "Fokko Driesprong",
        "email": "fokko@apache.org",
        "time": "Fri Sep 04 15:01:54 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 15:01:54 2026 +0200"
      },
      "message": "Release: Keep random suffix in settings file (#3765)\n\nmktemp requires its template to end with at least three trailing X characters (which it replaces with random chars to make a unique name), and using --suffix\u003d.ext lets you keep a file extension after that random run — a template like parquet-release-settings.xml fails because it has no Xs.\n\nRevert \"Update release/bin/prepare-rc.sh\"\n\nThis reverts commit 784c1533f0d5920da10b7f8273b462c77884d21d."
    },
    {
      "commit": "fb64102f9dac059637ec8e991fb8e6e7518853f6",
      "tree": "c65f786314da325a131f27e6568b204e1e452d2a",
      "parents": [
        "243188883c191f32ab4b1936086362f33eeaf3af"
      ],
      "author": {
        "name": "Russell Spitzer",
        "email": "russell.spitzer@GMAIL.COM",
        "time": "Fri Sep 04 02:13:10 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 09:13:10 2026 +0200"
      },
      "message": "Prepare RC: write generated Maven settings outside the repo (#3763)\n\n* Prepare RC: write generated Maven settings outside the repo\n\n.release-settings.xml was created in the repo root before mvn deploy\n-Papache-release ran, which activates the RAT check. RAT flagged the\ngenerated file for a missing ASF license header and failed the deploy.\n\nUse mktemp under RUNNER_TEMP (with TMPDIR / /tmp fallbacks) so the file\nlives outside the tree RAT scans, and guard the EXIT trap with\n${settings_file:-} in case the script exits before the variable is set.\n\nCo-Authored-By: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e\n\n* Update release/bin/prepare-rc.sh\n\nCo-authored-by: Fokko Driesprong \u003cfokko@apache.org\u003e\n\n---------\n\nCo-authored-by: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Fokko Driesprong \u003cfokko@apache.org\u003e"
    },
    {
      "commit": "243188883c191f32ab4b1936086362f33eeaf3af",
      "tree": "c990b443d6e62a838a4f9390c0a51e37bea7c5e4",
      "parents": [
        "8000e2344d3df58ca9507e1167fd2c3fb041e15d"
      ],
      "author": {
        "name": "Chao Sun",
        "email": "chao@openai.com",
        "time": "Thu Sep 03 20:09:22 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 11:09:22 2026 +0800"
      },
      "message": "GH-3747: Preserve the final selected row when skipping pages (#3748)"
    },
    {
      "commit": "8000e2344d3df58ca9507e1167fd2c3fb041e15d",
      "tree": "6e4ddc514cb14484776f033823e0b07e3833ff6b",
      "parents": [
        "95dc8cbb603670bf9e042e2e06f83950a27b9cda"
      ],
      "author": {
        "name": "Russell Spitzer",
        "email": "russell.spitzer@GMAIL.COM",
        "time": "Thu Sep 03 13:02:12 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 20:02:12 2026 +0200"
      },
      "message": "Fix: Prepare RC check (#3762)\n\n* Prepare RC: exclude release-process workflows from CI verification\n\ncheck_github_checks_passed queried the check-runs API and counted the currently-executing \"Prepare Release Candidate\" job as an incomplete check, so the step always failed with dry_run\u003dfalse. Switch to the workflow-runs API and filter out any workflow whose path starts with .github/workflows/release-, so this run\u0027s self-reference and any historical release-process attempts on the same commit are ignored while real code CI (ci-hadoop3, vector-plugins, ci-release-scripts) is still enforced.\n\nCo-Authored-By: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e\n\n* Update github.bats tests for workflow-runs API\n\nRewrites the \"still running\" and \"failed conclusion\" tests around the\nworkflow-runs mock shape, and adds three tests covering the release-*.yml\nfilter: in-progress self-reference is ignored, historical failed release\nruns on the same commit are ignored, and real CI failures are still\ndetected when release workflows are mixed in.\n\nCo-Authored-By: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e\n\n* Trim release-filter tests to a single combined case\n\nDrop the two separate \"ignores release-*.yml\" tests and keep one test\nthat exercises both the filter and the failure detection: a release\nworkflow in-progress alongside a failed CI workflow.\n\nCo-Authored-By: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "95dc8cbb603670bf9e042e2e06f83950a27b9cda",
      "tree": "7633aed6d5d010c5e743605997e7e526027e4f89",
      "parents": [
        "7734f447440e0a5c44bcde5c2eb080730d62d600"
      ],
      "author": {
        "name": "ggershinsky",
        "email": "ggershinsky@users.noreply.github.com",
        "time": "Thu Sep 03 20:23:54 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 20:23:54 2026 +0300"
      },
      "message": "GH-3760: Clean up hadoop README.md (#3761)\n\n* add spaces\n\n* rm duplicate, fix additional parameters\n\n* 2 more\n\n* return duplicate"
    },
    {
      "commit": "7734f447440e0a5c44bcde5c2eb080730d62d600",
      "tree": "dc5c464fd548c829e8e798e440150b38ecc38f0c",
      "parents": [
        "4151b488de61b2168e250ea80fb23d1deadf22c9"
      ],
      "author": {
        "name": "Divjot Arora",
        "email": "div.arora@databricks.com",
        "time": "Thu Sep 03 12:23:57 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 09:23:57 2026 -0700"
      },
      "message": "GH-3708: Inline parquet.thrift (#3709)\n\nCo-authored-by: Isaac \u003cno-reply@databricks.com\u003e"
    },
    {
      "commit": "4151b488de61b2168e250ea80fb23d1deadf22c9",
      "tree": "160c24b3a96c906e041a224b098578dcb8fd19c4",
      "parents": [
        "aaabb5d93bcb47bb8adb265c9c86456f7ce77376"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 03 11:14:18 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 11:14:18 2026 +0200"
      },
      "message": "Bump actions/setup-java from 5.7.0 to 6.0.0 (#3754)\n\nBumps [actions/setup-java](https://github.com/actions/setup-java) from 5.7.0 to 6.0.0.\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/b6effb05e454b25005698d916606bdc6ffcbf961...dd06d9cba3e5552c54d9f8ea23572deb30010f7c)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: 6.0.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "aaabb5d93bcb47bb8adb265c9c86456f7ce77376",
      "tree": "1164e1c9f288e1a969f8a0fc44db5f949bdbd009",
      "parents": [
        "7a6f2695c594d00995dfc5237f2426fdd2035b3e"
      ],
      "author": {
        "name": "Fokko Driesprong",
        "email": "fokko@apache.org",
        "time": "Tue Sep 01 22:33:09 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 22:33:09 2026 +0200"
      },
      "message": "GH-3758: Add Zizmor to the CI (#3759)"
    },
    {
      "commit": "7a6f2695c594d00995dfc5237f2426fdd2035b3e",
      "tree": "db200a5f69980fea0c0b1483cec9b3443bc90484",
      "parents": [
        "378c30542637c5310a68b1040268d509416b9f88"
      ],
      "author": {
        "name": "Aaron Niskode-Dossett",
        "email": "aniskodedossett@etsy.com",
        "time": "Tue Sep 01 11:45:51 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 18:45:51 2026 +0200"
      },
      "message": "MINOR: Upgrade thrift to 0.24 (#3730)\n\n* Bumpt thrift to 0.24\n\n* Add an EXPERIMENTAL dockerfile for development"
    },
    {
      "commit": "378c30542637c5310a68b1040268d509416b9f88",
      "tree": "713f7832df0ee0de2a021aff474386d78a7845c5",
      "parents": [
        "c7e5c9d83a9584fb75476baa22420890c6ac159a"
      ],
      "author": {
        "name": "Asif Sohail Mohammed",
        "email": "mdasifsohail7@gmail.com",
        "time": "Mon Aug 31 22:04:18 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 11:04:18 2026 +0800"
      },
      "message": "GH-3696: Cache ParsedVersion in FileMetaData and use it in fromParquetMetadata (#3700)\n\n### Rationale for this change\n\n`VersionParser.parse(createdBy)` is called from 7 production sites, all parsing the same constant string from `FileMetaData.getCreatedBy()`. In `fromParquetMetadata`, this happens R×C times (once per column per row group) during footer metadata conversion. Since `FileMetaData` is constructed once per file and already stores the `createdBy` string, it is the natural place to parse once and cache the result.\n\nThis PR caches the parsed version and migrates the first (and hottest) call site — `ParquetMetadataConverter.fromParquetMetadata` — to use the cache, eliminating redundant `VersionParser.parse` and `SemanticVersion.parse` calls from the R×C inner loop.\n\nFixes the 1st item in this issue https://github.com/apache/parquet-java/issues/3696\n\n### What changes are included in this PR?\n\n- Add `getWriterVersion()` to `FileMetaData` with lazy-init via an immutable `WriterVersionResult` holder (thread-safe, double-checked locking)\n- Retain the semantic-version parse failure in `ParsedVersion` so cached callers can reuse the original exception without reparsing\n- Add `shouldIgnoreStatistics(ParsedVersion, String, PrimitiveTypeName)` overload to `CorruptStatistics` that uses the cached `SemanticVersion` directly and keeps the original `createdBy` string for logging\n- Refactor `ParquetMetadataConverter.fromParquetMetadata` to construct `FileMetaData` before the row-group loop and use the cached `ParsedVersion` in `buildColumnChunkMetaData`\n- Share the statistics conversion implementation between the existing String path and the cached `ParsedVersion` path\n- Fall back to the String-based path when `getWriterVersion()` throws `VersionParseException` to preserve the existing logging behavior\n\n### Are these changes tested?\n\nYes.\n\n- `FileMetaDataTest` — 6 tests covering valid, null, empty, unparseable version strings, and caching\n- `CorruptStatisticsTest.testShouldIgnoreStatisticsWithParsedVersion` — covers all branches of the new `ParsedVersion` overload, including null, non-parquet-mr, empty version, invalid semver, retained parse failure, corrupt, and fixed versions\n- `TestParquetMetadataConverter.testV2StatsDoNotTriggerCorruptStatisticsCheck` — verifies that V2 min/max statistics bypass the corrupt-statistics check\n\n### Are there any user-facing changes?\n\nNo breaking changes. Adds new public methods:\n\n- `FileMetaData.getWriterVersion()` — returns cached `ParsedVersion`, throws `VersionParseException` for unparseable strings\n- `CorruptStatistics.shouldIgnoreStatistics(ParsedVersion, String, PrimitiveTypeName)` — for callers that already have a parsed version; the String parameter preserves the original `createdBy` value for logging\n- `ParquetMetadataConverter.fromParquetStatistics(ParsedVersion, String, Statistics, PrimitiveType)` — converts statistics using a cached writer version\n- `ParquetMetadataConverter.buildColumnChunkMetaData(ColumnMetaData, ColumnPath, PrimitiveType, ParsedVersion, String)` — builds column metadata using a cached writer version\n\nCloses #3601"
    },
    {
      "commit": "c7e5c9d83a9584fb75476baa22420890c6ac159a",
      "tree": "0e0d59e8d843d9410507b91eca7f0c29e3092d30",
      "parents": [
        "05c076878fe6ab1baed16fcaf3e3b2b474cd9826"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Aug 31 18:35:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 18:35:48 2026 +0200"
      },
      "message": "Bump jackson.version from 2.22.1 to 2.22.2 (#3739)\n\nBumps `jackson.version` from 2.22.1 to 2.22.2.\n\nUpdates `com.fasterxml.jackson.core:jackson-core` from 2.22.1 to 2.22.2\n- [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.22.1...jackson-core-2.22.2)\n\nUpdates `com.fasterxml.jackson.datatype:jackson-datatype-jsr310` from 2.22.1 to 2.22.2\n\n---\nupdated-dependencies:\n- dependency-name: com.fasterxml.jackson.core:jackson-core\n  dependency-version: 2.22.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n- dependency-name: com.fasterxml.jackson.datatype:jackson-datatype-jsr310\n  dependency-version: 2.22.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "05c076878fe6ab1baed16fcaf3e3b2b474cd9826",
      "tree": "8122f295335e720316bed2aa7b39d642c80ab4ee",
      "parents": [
        "a7e78d8b154d0ce36684895c2c8ba578bd9d00fb"
      ],
      "author": {
        "name": "Aaron Niskode-Dossett",
        "email": "aniskodedossett@etsy.com",
        "time": "Mon Aug 31 11:15:31 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 18:15:31 2026 +0200"
      },
      "message": "`BytesInput.copy(BytesInput)` should return a copy (#3729)\n\n* BytesInput.copy(BytesInput) should return a copy\n\n* make tests clearer\n\n* Remove unsafe BytesInput toByteArray override"
    },
    {
      "commit": "a7e78d8b154d0ce36684895c2c8ba578bd9d00fb",
      "tree": "6326f48f9e921afe5709870c5e016d3cc209e443",
      "parents": [
        "e02f65e2ba41393f5d95f14d2ff27029f5c90639"
      ],
      "author": {
        "name": "ggershinsky",
        "email": "ggershinsky@users.noreply.github.com",
        "time": "Mon Aug 31 11:17:39 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 11:17:39 2026 +0300"
      },
      "message": "Add parameter to enable reading KMS URL from key material (#3745)\n\n* inital commit\n\n* spotless\n\n* update readme\n\n* cleanup\n\n* add unitest\n\n* update junit\n\n* clean up"
    },
    {
      "commit": "e02f65e2ba41393f5d95f14d2ff27029f5c90639",
      "tree": "176a0fecb22ca20a69b6c1c0990f0d03e946380c",
      "parents": [
        "60175684378abff1ea001b6541ec38da42a2eff1"
      ],
      "author": {
        "name": "Yiming Li",
        "email": "99833827+yimingli-vmware@users.noreply.github.com",
        "time": "Tue Aug 25 12:02:20 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 21:02:20 2026 +0200"
      },
      "message": "Fix data corruption in ByteBufferBackedBinary.getBytes() for non-array-backed buffers (#3717)\n\nFixedLenByteArrayPlainValuesReader hands out Binary values that all\nshare one page-wide ByteBuffer, advancing its live position on every\nreadBytes() call. getBytes() and toStringUsingUTF8() on the\nnon-array-backed path called value.limit(offset + length) directly on\nthat shared buffer before capturing position. ByteBuffer.limit()\nclamps position down whenever position \u003e newLimit, so calling\ngetBytes() on an earlier value after later values have already\nadvanced the buffer permanently rewinds its live position -- corrupting\nevery readBytes() call that follows.\n\nThis surfaces as data corruption when reading a repeated\n(LIST) FIXED_LEN_BYTE_ARRAY column with 2+ elements per row across 2+\nrows: record assembly stores each Binary and only materializes it once\na full row is built, which is exactly the lazy-after-later-value\npattern that triggers the clamp. Each subsequent row reads back the\nprevious row\u0027s last-written element instead of its own.\n\nFix both methods to duplicate() the buffer before adjusting its\nposition/limit, so the shared buffer\u0027s own position is never mutated.\n\nCo-authored-by: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "60175684378abff1ea001b6541ec38da42a2eff1",
      "tree": "d6af87535b3d99ef5b6d1515c16b26d7c1c4ec2c",
      "parents": [
        "18e7d1d32c43938908b3b2060e58f4c4dc95242c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Aug 23 11:24:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 23 11:24:30 2026 +0800"
      },
      "message": "Bump com.fasterxml.jackson.core:jackson-databind from 2.22.1 to 2.22.2 (#3740)\n\nBumps [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson) from 2.22.1 to 2.22.2.\n- [Commits](https://github.com/FasterXML/jackson/commits)\n\n---\nupdated-dependencies:\n- dependency-name: com.fasterxml.jackson.core:jackson-databind\n  dependency-version: 2.22.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "18e7d1d32c43938908b3b2060e58f4c4dc95242c",
      "tree": "6564581ac3ee3f10197ae3c6275fb46d54240d9e",
      "parents": [
        "c533a9f30f3642ab230b656eb6669695796bbb11"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Aug 23 11:24:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 23 11:24:25 2026 +0800"
      },
      "message": "Bump com.squareup.okhttp3:okhttp-jvm from 5.4.0 to 5.5.0 (#3738)\n\nBumps [com.squareup.okhttp3:okhttp-jvm](https://github.com/lysine-dev/okhttp) from 5.4.0 to 5.5.0.\n- [Changelog](https://github.com/lysine-dev/okhttp/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/lysine-dev/okhttp/compare/parent-5.4.0...parent-5.5.0)\n\n---\nupdated-dependencies:\n- dependency-name: com.squareup.okhttp3:okhttp-jvm\n  dependency-version: 5.5.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "c533a9f30f3642ab230b656eb6669695796bbb11",
      "tree": "18cd7d92a2da3180c7b43a32dc14573b59102cff",
      "parents": [
        "d8d7420e79faea8e20a6a8cf04c3c852d6646dcd"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Aug 23 11:24:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 23 11:24:13 2026 +0800"
      },
      "message": "Bump de.skuzzle.enforcer:restrict-imports-enforcer-rule (#3741)\n\nBumps [de.skuzzle.enforcer:restrict-imports-enforcer-rule](https://github.com/skuzzle/restrict-imports-enforcer-rule) from 3.0.0 to 3.0.1.\n- [Release notes](https://github.com/skuzzle/restrict-imports-enforcer-rule/releases)\n- [Changelog](https://github.com/skuzzle/restrict-imports-enforcer-rule/blob/master/CHANGELOG_LEGACY.md)\n- [Commits](https://github.com/skuzzle/restrict-imports-enforcer-rule/commits)\n\n---\nupdated-dependencies:\n- dependency-name: de.skuzzle.enforcer:restrict-imports-enforcer-rule\n  dependency-version: 3.0.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "d8d7420e79faea8e20a6a8cf04c3c852d6646dcd",
      "tree": "891f3cf082e22c8680d72b509cdc9ef041894ba4",
      "parents": [
        "a97db02e3ad08e497cb7f3220be9dbe8dfa01c18"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Aug 23 11:24:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 23 11:24:00 2026 +0800"
      },
      "message": "Bump com.google.guava:guava from 33.6.0-jre to 33.7.1-jre (#3743)\n\nBumps [com.google.guava:guava](https://github.com/google/guava) from 33.6.0-jre to 33.7.1-jre.\n- [Release notes](https://github.com/google/guava/releases)\n- [Commits](https://github.com/google/guava/commits)\n\n---\nupdated-dependencies:\n- dependency-name: com.google.guava:guava\n  dependency-version: 33.7.1-jre\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "a97db02e3ad08e497cb7f3220be9dbe8dfa01c18",
      "tree": "bc3d6881ea973b49c7509c6f6ff968b41d30d17c",
      "parents": [
        "a3a1de153679515e29c0dcf92085b0ad584b72a8"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Aug 23 11:23:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 23 11:23:41 2026 +0800"
      },
      "message": "Bump com.github.luben:zstd-jni from 1.5.7-13 to 1.5.7-15 (#3744)\n\nBumps [com.github.luben:zstd-jni](https://github.com/luben/zstd-jni) from 1.5.7-13 to 1.5.7-15.\n- [Commits](https://github.com/luben/zstd-jni/compare/v1.5.7-13...v1.5.7-15)\n\n---\nupdated-dependencies:\n- dependency-name: com.github.luben:zstd-jni\n  dependency-version: 1.5.7-15\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "a3a1de153679515e29c0dcf92085b0ad584b72a8",
      "tree": "bf4bed1467afaec03c02a33a99dc0e8fac1142aa",
      "parents": [
        "23ee32e3bdf120ff7276e7dcbf0f9174af4a38e0"
      ],
      "author": {
        "name": "Aaron Niskode-Dossett",
        "email": "aniskodedossett@etsy.com",
        "time": "Thu Aug 20 01:48:32 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 14:48:32 2026 +0800"
      },
      "message": "MINOR: (re)normalize Maven wrapper line endings (#3732)"
    },
    {
      "commit": "23ee32e3bdf120ff7276e7dcbf0f9174af4a38e0",
      "tree": "c01b1f71c9dd2dfe08845ee2264bdafac2679663",
      "parents": [
        "33e948a6736a20c2f23f0335f83274c00cda2597"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 18 09:00:44 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 09:00:44 2026 +0200"
      },
      "message": "Bump org.apache.maven:apache-maven from 3.9.8 to 3.9.16 (#3724)\n\nBumps org.apache.maven:apache-maven from 3.9.8 to 3.9.16.\n\n---\nupdated-dependencies:\n- dependency-name: org.apache.maven:apache-maven\n  dependency-version: 3.9.16\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "33e948a6736a20c2f23f0335f83274c00cda2597",
      "tree": "0756a5b6e73931768dd7ce87153fe5e7652807d4",
      "parents": [
        "fd2331b99a408366f4ce988965b3d7248ede26ca"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 18 10:24:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 10:24:17 2026 +0800"
      },
      "message": "Bump junit.version from 5.14.4 to 6.1.3 (#3722)\n\nBumps `junit.version` from 5.14.4 to 6.1.3.\n\nUpdates `org.junit.jupiter:junit-jupiter-api` from 5.14.4 to 6.1.3\n- [Release notes](https://github.com/junit-team/junit-framework/releases)\n- [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.4...r6.1.3)\n\nUpdates `org.junit.jupiter:junit-jupiter-params` from 5.14.4 to 6.1.3\n- [Release notes](https://github.com/junit-team/junit-framework/releases)\n- [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.4...r6.1.3)\n\nUpdates `org.junit.jupiter:junit-jupiter-engine` from 5.14.4 to 6.1.3\n- [Release notes](https://github.com/junit-team/junit-framework/releases)\n- [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.4...r6.1.3)\n\nUpdates `org.junit.vintage:junit-vintage-engine` from 5.14.4 to 6.1.3\n- [Release notes](https://github.com/junit-team/junit-framework/releases)\n- [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.4...r6.1.3)\n\nUpdates `org.junit.jupiter:junit-jupiter-migrationsupport` from 5.14.4 to 6.1.3\n- [Release notes](https://github.com/junit-team/junit-framework/releases)\n- [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.4...r6.1.3)\n\n---\nupdated-dependencies:\n- dependency-name: org.junit.jupiter:junit-jupiter-api\n  dependency-version: 6.1.3\n  dependency-type: direct:development\n  update-type: version-update:semver-major\n- dependency-name: org.junit.jupiter:junit-jupiter-engine\n  dependency-version: 6.1.3\n  dependency-type: direct:development\n  update-type: version-update:semver-major\n- dependency-name: org.junit.jupiter:junit-jupiter-migrationsupport\n  dependency-version: 6.1.3\n  dependency-type: direct:development\n  update-type: version-update:semver-major\n- dependency-name: org.junit.jupiter:junit-jupiter-params\n  dependency-version: 6.1.3\n  dependency-type: direct:development\n  update-type: version-update:semver-major\n- dependency-name: org.junit.vintage:junit-vintage-engine\n  dependency-version: 6.1.3\n  dependency-type: direct:development\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "fd2331b99a408366f4ce988965b3d7248ede26ca",
      "tree": "c831e2586dcabbc7879b876058816b8fc61f9655",
      "parents": [
        "bdd5b30eaf2cee69d7168218fb6399ba8c59d8f3"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Aug 17 17:46:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 17:46:34 2026 +0800"
      },
      "message": "Bump actions/setup-java from 5.2.0 to 5.7.0 (#3720)\n\nBumps [actions/setup-java](https://github.com/actions/setup-java) from 5.2.0 to 5.7.0.\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/v5.2.0...v5.7.0)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: 5.7.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "bdd5b30eaf2cee69d7168218fb6399ba8c59d8f3",
      "tree": "8fdfa635b56e8b489504e66e4adf21f6246f4a9a",
      "parents": [
        "741543f770f66b2811c72296dcfd745dac529a23"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Aug 17 17:46:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 17:46:18 2026 +0800"
      },
      "message": "Bump actions/checkout from 6.0.2 to 7.0.1 (#3721)\n\nBumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2 to 7.0.1.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...3d3c42e5aac5ba805825da76410c181273ba90b1)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: 7.0.1\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "741543f770f66b2811c72296dcfd745dac529a23",
      "tree": "8d8fe86b2f5ccebef02c8fdf8efc984039c99486",
      "parents": [
        "f701e81be702af3cc6748bc4d846103b6cba9f20"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Aug 17 17:44:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 17:44:38 2026 +0800"
      },
      "message": "Bump com.github.luben:zstd-jni from 1.5.7-12 to 1.5.7-13 (#3725)\n\nBumps [com.github.luben:zstd-jni](https://github.com/luben/zstd-jni) from 1.5.7-12 to 1.5.7-13.\n- [Commits](https://github.com/luben/zstd-jni/compare/v1.5.7-12...v1.5.7-13)\n\n---\nupdated-dependencies:\n- dependency-name: com.github.luben:zstd-jni\n  dependency-version: 1.5.7-13\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "f701e81be702af3cc6748bc4d846103b6cba9f20",
      "tree": "56c3f6be0d45f877b57552f0bd12ac8512971dd6",
      "parents": [
        "9756ed5860896cab7a7a6f69b2a0834f76b9ab02"
      ],
      "author": {
        "name": "Gang Wu",
        "email": "ustcwg@gmail.com",
        "time": "Mon Aug 17 13:47:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 13:47:05 2026 +0800"
      },
      "message": "Fix Maven parent and JUnit test compatibility (#3727)\n\n### Rationale for this change\n\nThe project version is now `1.19.0-SNAPSHOT`, but the vector plugin modules still declared `1.18.0-SNAPSHOT` as their parent. Once that reactor issue was corrected, CI exposed two test files that still used JUnit 4 even though this repository enforces JUnit 5 and AssertJ for non-benchmark tests.\n\n### What changes are included in this PR?\n\n- Update the parent version in `parquet-encoding-vector` to `1.19.0-SNAPSHOT`.\n- Update the parent version in `parquet-plugins-benchmarks` to `1.19.0-SNAPSHOT`.\n- Migrate `TestConcatenatingByteBufferCollector` assertions to AssertJ.\n- Migrate `ByteStreamSplitScalarOptTest` to JUnit 5 and AssertJ.\n\n### Are these changes tested?\n\nThe existing `Vector-plugins` and `CI Hadoop 3` workflows cover the updated Maven reactor and test sources.\n\n### Are there any user-facing changes?\n\nNo. This aligns Maven metadata and test conventions so the existing CI/build can resolve the correct parent version and compile the tests."
    },
    {
      "commit": "9756ed5860896cab7a7a6f69b2a0834f76b9ab02",
      "tree": "2ddc3e683d9af0f6095b04a3990c6da02a076cbc",
      "parents": [
        "dc86fe491e882a5ef72251e008563c4fa0ec8ab9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Aug 15 22:37:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 22:37:57 2026 +0200"
      },
      "message": "Bump com.google.api.grpc:proto-google-common-protos (#3714)\n\nBumps [com.google.api.grpc:proto-google-common-protos](https://github.com/googleapis/sdk-platform-java) from 2.73.0 to 2.74.0.\n- [Release notes](https://github.com/googleapis/sdk-platform-java/releases)\n- [Changelog](https://github.com/googleapis/sdk-platform-java/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/googleapis/sdk-platform-java/compare/gax/2.73.0...gax/v2.74.0)\n\n---\nupdated-dependencies:\n- dependency-name: com.google.api.grpc:proto-google-common-protos\n  dependency-version: 2.74.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "dc86fe491e882a5ef72251e008563c4fa0ec8ab9",
      "tree": "6b3de4e18f2694052680e98d4f7c537b4ee0caec",
      "parents": [
        "8e30c4cee3c7e85a8cf2133697f13138509b05b7"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Aug 15 22:37:45 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 22:37:45 2026 +0200"
      },
      "message": "Bump org.cyclonedx:cyclonedx-maven-plugin from 2.9.2 to 2.9.3 (#3713)\n\nBumps [org.cyclonedx:cyclonedx-maven-plugin](https://github.com/CycloneDX/cyclonedx-maven-plugin) from 2.9.2 to 2.9.3.\n- [Release notes](https://github.com/CycloneDX/cyclonedx-maven-plugin/releases)\n- [Commits](https://github.com/CycloneDX/cyclonedx-maven-plugin/compare/cyclonedx-maven-plugin-2.9.2...cyclonedx-maven-plugin-2.9.3)\n\n---\nupdated-dependencies:\n- dependency-name: org.cyclonedx:cyclonedx-maven-plugin\n  dependency-version: 2.9.3\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "8e30c4cee3c7e85a8cf2133697f13138509b05b7",
      "tree": "03c13c0d9618846cd04298b526db05830634248d",
      "parents": [
        "2ab0dd07a0df48fced918f9498fcb02db5f10359"
      ],
      "author": {
        "name": "Ismaël Mejía",
        "email": "iemejia@gmail.com",
        "time": "Tue Aug 11 22:36:56 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 22:36:56 2026 +0200"
      },
      "message": "GH-3530: Eagerly release column buffers (#3571)\n\n* GH-3530: Eagerly release column buffers during row group flush\n\nRelease each column\u0027s compressed page buffers immediately after writing\nto disk in flushToFileWriter(), rather than holding all buffers until the\nentire flush completes. This is correct resource management that makes\nbuffers GC-eligible sooner, though benchmarking with a PeakTrackingAllocator\nconfirms it does not reduce peak memory: the peak is reached during the\nwrite phase (as pages are compressed), not during flush.\n\nChanges:\n- Call pageWriter.close() after each column in flushToFileWriter()\n- Add writeAllToAndRelease() to ConcatenatingByteBufferCollector for\n  progressive slab-by-slab memory release during write\n- Make close() idempotent (safe to call after eager release or double-close)\n- Add RowGroupFlushBenchmark (20-column wide schema, PeakTrackingAllocator)\n  and BlackHoleOutputFile for measuring flush performance and peak memory\n- Add tests for eager release, double-close safety, and output equivalence\n\n* Address review feedback: try-with-resources and progressive release in writeAllTo\n\n- Merge writeAllToAndRelease into writeAllTo so progressive buffer\n  release is used in production (via ParquetFileWriter.writeColumnChunk).\n- Add comment explaining why the WritableByteChannel is intentionally\n  not closed (closing it would close the caller\u0027s OutputStream).\n- Use try-with-resources in flushToFileWriter for idiomatic cleanup.\n- Capture buf.size() before write in writeToFileWriter since writeAllTo\n  now releases buffers progressively."
    }
  ],
  "next": "2ab0dd07a0df48fced918f9498fcb02db5f10359"
}
