Skip to content

Commit 9b50b12

Browse files
authored
Merge branch 'main' into table_maintenance_pypaimon
2 parents 185dc98 + ae53bbf commit 9b50b12

231 files changed

Lines changed: 75445 additions & 4998 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 48 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
check:
3939
runs-on: ubuntu-latest
4040
steps:
41-
- uses: actions/checkout@v6
41+
- uses: actions/checkout@v7
4242

4343
- name: Validate .asf.yaml
4444
run: python3 scripts/validate_asf_yaml.py
@@ -58,7 +58,7 @@ jobs:
5858
run: cargo fmt --all -- --check
5959

6060
- name: Clippy
61-
run: cargo clippy --all-targets --workspace --features fulltext,vortex,mosaic -- -D warnings
61+
run: cargo clippy --all-targets --workspace --features fulltext,vortex -- -D warnings
6262

6363
build:
6464
runs-on: ${{ matrix.os }}
@@ -69,9 +69,9 @@ jobs:
6969
- macos-latest
7070
- windows-latest
7171
steps:
72-
- uses: actions/checkout@v6
72+
- uses: actions/checkout@v7
7373
- name: Build
74-
run: cargo build --features fulltext,vortex,mosaic
74+
run: cargo build --features fulltext,vortex
7575

7676
unit:
7777
runs-on: ${{ matrix.os }}
@@ -82,10 +82,10 @@ jobs:
8282
- macos-latest
8383
- windows-latest
8484
steps:
85-
- uses: actions/checkout@v6
85+
- uses: actions/checkout@v7
8686

8787
- name: Test
88-
run: cargo test -p paimon --all-targets --features fulltext,vortex,mosaic
88+
run: cargo test -p paimon --all-targets --features fulltext,vortex
8989
env:
9090
RUST_LOG: DEBUG
9191
RUST_BACKTRACE: full
@@ -101,12 +101,40 @@ jobs:
101101
RUST_BACKTRACE: full
102102

103103
integration:
104+
name: integration (${{ matrix.suite }})
104105
runs-on: ubuntu-latest
106+
strategy:
107+
fail-fast: false
108+
matrix:
109+
include:
110+
- suite: rust
111+
needs_docker: true
112+
needs_lumina: false
113+
needs_uv: false
114+
- suite: datafusion
115+
needs_docker: true
116+
needs_lumina: true
117+
needs_uv: false
118+
- suite: lumina
119+
needs_docker: false
120+
needs_lumina: true
121+
needs_uv: false
122+
- suite: python
123+
needs_docker: true
124+
needs_lumina: false
125+
needs_uv: true
126+
- suite: go
127+
needs_docker: true
128+
needs_lumina: false
129+
needs_uv: false
130+
env:
131+
RUST_LOG: DEBUG
132+
RUST_BACKTRACE: full
105133
steps:
106-
- uses: actions/checkout@v6
134+
- uses: actions/checkout@v7
107135

108136
- name: Rust Cache
109-
uses: actions/cache@v5
137+
uses: actions/cache@v6
110138
with:
111139
path: |
112140
~/.cargo/registry
@@ -117,65 +145,60 @@ jobs:
117145
integration-${{ runner.os }}-
118146
119147
- name: Start Docker containers
148+
if: matrix.needs_docker == true
120149
run: make docker-up
121150

122151
- name: Rust Integration Test
152+
if: matrix.suite == 'rust'
123153
run: cargo test -p paimon-integration-tests --all-targets
124-
env:
125-
RUST_LOG: DEBUG
126-
RUST_BACKTRACE: full
127154

128155
- name: Install lumina native library
156+
if: matrix.needs_lumina == true
129157
run: |
130158
pip install lumina-data
131159
echo "LUMINA_LIB_PATH=$(python3 -c 'import lumina_data; print(lumina_data.__path__[0])')/lib/liblumina_py.so" >> $GITHUB_ENV
132160
133161
- name: Core Lumina Native Build Test
162+
if: matrix.suite == 'lumina'
134163
run: >
135164
cargo test -p paimon
136165
table::lumina_index_build_builder::tests::test_execute_writes_lumina_index_manifest
137166
--features fulltext,vortex
138167
-- --ignored --exact
139-
env:
140-
RUST_LOG: DEBUG
141-
RUST_BACKTRACE: full
142168
143169
- name: DataFusion Lumina Build Query E2E Test
170+
if: matrix.suite == 'lumina'
144171
run: >
145172
cargo test -p paimon-datafusion
146173
--features vortex
147174
vector_search_tests::test_lumina_build_then_vector_search_query
148175
-- --ignored --exact
149-
env:
150-
RUST_LOG: DEBUG
151-
RUST_BACKTRACE: full
152176
153177
- name: DataFusion Integration Test
178+
if: matrix.suite == 'datafusion'
154179
run: cargo test -p paimon-datafusion --all-targets
155-
env:
156-
RUST_LOG: DEBUG
157-
RUST_BACKTRACE: full
158180

159181
- name: DataFusion Vortex Integration Test
182+
if: matrix.suite == 'datafusion'
160183
run: cargo test -p paimon-datafusion --features vortex --test vortex_tables
161-
env:
162-
RUST_LOG: DEBUG
163-
RUST_BACKTRACE: full
164184

165185
- name: Install uv
166-
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b
186+
if: matrix.needs_uv == true
187+
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39
167188
with:
168189
version: "0.9.3"
169190
enable-cache: true
170191

171192
- name: Python Binding Integration Test
193+
if: matrix.suite == 'python'
172194
working-directory: bindings/python
173195
run: make install && make test
174196

175197
- name: Go Integration Test
198+
if: matrix.suite == 'go'
176199
working-directory: bindings/go
177200
run: make test
178201

179202
- name: Stop Docker containers
180-
if: always()
203+
if: ${{ always() && matrix.needs_docker }}
181204
run: make docker-down

.github/workflows/release-go-binding.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
tag: ${{ steps.meta.outputs.tag }}
4848
source_sha: ${{ steps.meta.outputs.source_sha }}
4949
steps:
50-
- uses: actions/checkout@v6
50+
- uses: actions/checkout@v7
5151
with:
5252
fetch-depth: 0
5353
ref: ${{ inputs.source_ref || github.sha }}
@@ -111,7 +111,7 @@ jobs:
111111
expected_file: libpaimon_c.darwin.arm64.dylib.zst
112112

113113
steps:
114-
- uses: actions/checkout@v6
114+
- uses: actions/checkout@v7
115115
with:
116116
ref: ${{ needs.validate.outputs.source_sha }}
117117

@@ -121,7 +121,7 @@ jobs:
121121
rustup default stable
122122
123123
- name: Cache Rust build outputs
124-
uses: actions/cache@v5
124+
uses: actions/cache@v6
125125
with:
126126
path: |
127127
~/.cargo/bin/
@@ -162,7 +162,7 @@ jobs:
162162
- build
163163
runs-on: ubuntu-latest
164164
steps:
165-
- uses: actions/checkout@v6
165+
- uses: actions/checkout@v7
166166
with:
167167
fetch-depth: 0
168168
ref: ${{ needs.validate.outputs.source_sha }}

.github/workflows/release-rust.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545
- paimon
4646
- paimon-datafusion
4747
steps:
48-
- uses: actions/checkout@v6
48+
- uses: actions/checkout@v7
4949

5050
- name: Setup Rust toolchain
5151
run: |

.github/workflows/release_python_binding.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
sdist:
4242
runs-on: ubuntu-latest
4343
steps:
44-
- uses: actions/checkout@v6
44+
- uses: actions/checkout@v7
4545

4646
- uses: PyO3/maturin-action@v1
4747
with:
@@ -68,7 +68,7 @@ jobs:
6868
- { os: ubuntu-latest, target: "x86_64" }
6969
- { os: ubuntu-latest, target: "aarch64", manylinux: "manylinux_2_28" }
7070
steps:
71-
- uses: actions/checkout@v6
71+
- uses: actions/checkout@v7
7272

7373
- uses: PyO3/maturin-action@v1
7474
with:

CONTRIBUTING.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,30 @@ This is a pure Rust project, so only `cargo` is needed. Here are some common com
4545
2. Open a pull request on the project's GitHub page. Provide a clear description of your changes and why they are necessary.
4646
3. Wait for reviews and address any feedback. Once the pull request is approved and merged, your changes will be part of the project.
4747

48+
## AI-Assisted Contributions
49+
50+
Apache Paimon Rust has the following policy for AI-assisted pull requests:
51+
52+
- The PR author should **understand the core ideas** behind the implementation **end-to-end** and be able to justify the design and code during review.
53+
- **Call out unknowns and assumptions.** It is acceptable not to fully understand some details of AI-generated code, but authors should identify these cases and point them out to reviewers. This allows reviewers to apply their knowledge of the codebase and evaluate potential concerns, such as correctness, concurrency, compatibility, or performance risks.
54+
55+
### Why fully AI-generated PRs without understanding are not helpful
56+
57+
AI tools cannot reliably make complex changes to Apache Paimon Rust on their own, which is why we rely on pull requests and code review.
58+
59+
The purposes of code review are:
60+
61+
1. Complete the intended task correctly.
62+
2. Share knowledge between authors and reviewers as a long-term investment in the project.
63+
64+
A fully AI-generated contribution without sufficient author understanding does not meet these purposes. Maintainers could use AI tools directly, while contributors acting only as a proxy gain little knowledge of the project.
65+
66+
Review capacity is limited, so large pull requests that appear to lack the required understanding may not be reviewed and may eventually be closed or redirected.
67+
68+
### Better ways to contribute than an "AI dump"
69+
70+
Consider writing a high-quality issue with a clear problem statement and a minimal reproducible example. This often makes it easier for the community to investigate the problem and develop an appropriate solution.
71+
4872
### Read the design docs
4973

5074
For a deeper understanding of the project, read the design documentation available on our [Paimon Rust](https://paimon.apache.org/docs/rust/).

Cargo.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,16 @@ rust-version = "1.91.0"
3030
[workspace.dependencies]
3131
arrow = "58.0"
3232
arrow-array = { version = "58.0", features = ["ffi"] }
33+
arrow-arith = "58.0"
3334
arrow-buffer = "58.0"
3435
arrow-schema = "58.0"
3536
arrow-cast = "58.0"
3637
arrow-ord = "58.0"
3738
arrow-row = "58.0"
3839
arrow-select = "58.0"
39-
datafusion = "53.0.0"
40-
datafusion-ffi = "53.0.0"
40+
arrow-string = "58.0"
41+
datafusion = "54.0.0"
42+
datafusion-ffi = "54.0.0"
4143
paimon = { version = "0.3.0", path = "crates/paimon" }
4244
parquet = "58.0"
4345
constant_time_eq = ">=0.4.0, <0.5.0"

0 commit comments

Comments
 (0)