Skip to content

fix: avoid OSS multipart limit in Parquet writes - #713

Merged
JingsongLi merged 1 commit into
apache:mainfrom
jerry-024:fix/opendal-writer-chunk-size
Aug 15, 2026
Merged

fix: avoid OSS multipart limit in Parquet writes#713
JingsongLi merged 1 commit into
apache:mainfrom
jerry-024:fix/opendal-writer-chunk-size

Conversation

@jerry-024

@jerry-024 jerry-024 commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Purpose

Paimon Rust previously created OpenDAL writers without an explicit chunk size. Parquet writes use OpenDAL FuturesAsyncWriter, which buffers 256 KiB at a time. Because the minimum OSS multipart part size is 100 KiB, OpenDAL forwarded each 256 KiB buffer as a separate part instead of coalescing it.

OSS allows at most 10,000 parts per multipart upload, which limited a single Parquet file to about 2.44 GiB before the upload exceeded the part-count limit.

Brief change log

  • Create the OpenDAL writer with writer_with.
  • Set the writer chunk size to 8 MiB so OpenDAL coalesces Parquet writes into larger multipart parts.
  • Increase the resulting multipart size ceiling from about 2.44 GiB to about 78.125 GiB.

Tests

  • cargo fmt --all -- --check
  • The targeted FileIO write/read test was blocked locally by the existing paimon-vindex-core use of the unstable stdarch_neon_f16 feature on aarch64 Rust 1.92.0; CI will run the repository test suite.

API and Format

No public API or storage format changes.

Documentation

No documentation changes are required.

@jerry-024 jerry-024 changed the title fix: configure OpenDAL writer chunk size fix: avoid OSS multipart limit in Parquet writes Aug 14, 2026
@JingsongLi
JingsongLi force-pushed the fix/opendal-writer-chunk-size branch from d47df9c to 229e200 Compare August 15, 2026 08:21

@JingsongLi JingsongLi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@JingsongLi
JingsongLi merged commit 87da7bf into apache:main Aug 15, 2026
13 checks passed
jerry-024 added a commit to jerry-024/paimon-rust that referenced this pull request Aug 17, 2026
* main:
  perf(vindex): size native batches by active indexes (apache#709)
  fix(data-evolution): require row tracking and row IDs (apache#718)
  feat(go): add table write bindings (apache#658)
  fix(scan): preserve Data Evolution file order in row-id groups (apache#717)
  fix(file_index): align file index format with Java V1 (apache#719)
  fix: configure OpenDAL writer chunk size (apache#713)
  fix(python): release GIL during catalog I/O (apache#716)
  feat(write): add fixed-bucket write primitives for postpone tables (apache#659)
  feat: rust examples for creating and querying Paimon tables (apache#648)
  fix(table): reject row ranges for format tables at read construction (apache#700)
  perf(arrow): prune IN predicates with row-group stats (apache#705)
  feat(io): support in-memory local cache (apache#710)
  fix(dlf): refresh expiring credentials (apache#714)
  fix(datafusion): normalize index_type in global index procedures (apache#715)
  fix(auth): fail closed on query-auth tables outside the read boundary (apache#691)

# Conflicts:
#	crates/paimon/src/table/vector_search_builder.rs
#	crates/paimon/src/vindex/reader.rs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants