Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
179 commits
Select commit Hold shift + click to select a range
7179626
feat(java): allow schema override for fragment writes (#6919)
beinan Jun 3, 2026
f317dd1
feat!: migrate bitmap to index segment based (#6869)
Xuanwo Jun 3, 2026
880745b
fix(filtered-read): record IO metrics even when filter matches no row…
westonpace Jun 3, 2026
e7cbad9
perf: make HNSW cheaper to load (#6798)
wombatu-kun Jun 3, 2026
4a7d21e
fix(fts): handle empty query tokens in flat full-text search (#7046)
vivek-bharathan Jun 3, 2026
549ce37
perf(index): fix O(N log N) warm-cache regression in BitmapIndex (#7079)
westonpace Jun 3, 2026
24469e1
docs: fix broken pre-release install commands (#7088)
prrao87 Jun 3, 2026
73025ce
feat: use indexes to accelerate filtered count_rows (#6916)
westonpace Jun 3, 2026
bd31c79
feat: dedup FTS results across LSM tiers in LsmFtsSearchPlanner (#7066)
hamersaw Jun 3, 2026
71990be
perf: block-max pruning on the disjunctive WAND path (#7089)
wkalt Jun 3, 2026
f6e2bf4
perf(fts): share a top-k threshold across partitions during WAND (#7062)
wkalt Jun 3, 2026
f154b4e
chore: release beta version 8.0.0-beta.2
Jun 4, 2026
38d289d
feat(python): add shared RaBitQ rotation for distributed IVF_RQ build…
gstamatakis95 Jun 4, 2026
2a73364
feat: add TOS object store support via OpenDAL (#7019)
ddupg Jun 4, 2026
679ef3d
fix: advance kmeans redo random init rng (#7074)
ddupg Jun 4, 2026
0d3f125
fix(python): clamp target partition sizing (#7036)
ddupg Jun 4, 2026
49c0a62
fix(lance-index): fix some flaky tests (#7052)
XuQianJin-Stars Jun 4, 2026
63c37e7
docs: update ecosystem role for maintainer (#7102)
prrao87 Jun 4, 2026
f55d208
feat!: return write summaries from file writers (#7096)
Xuanwo Jun 4, 2026
de176bd
feat(index): implement FM-Index scalar index for exact substring sear…
beinan Jun 4, 2026
4378491
chore: release beta version 8.0.0-beta.3
Jun 4, 2026
2b4e4c8
chore(deps): bump idna from 3.10 to 3.15 in /python (#6847)
dependabot[bot] Jun 4, 2026
f80b83a
perf(pq): wrap l2_targets in Arc to eliminate per-partition clones (#…
yuju-huang Jun 4, 2026
507ecc2
fix: cap exec-node parallelism to DataFusion target_partitions (#7087)
wjones127 Jun 4, 2026
dd7201c
chore(deps): bump aiohttp from 3.13.4 to 3.14.0 in /python (#7090)
dependabot[bot] Jun 4, 2026
0d4afa8
fix(mem-wal): fence predecessor with a WAL sentinel on claim (#7110)
hamersaw Jun 4, 2026
8369dbb
chore: add dependabot config for weekly patch-level lockfile bumps (#…
wjones127 Jun 4, 2026
5f4c091
perf(fts): defer DocSet load until wand actually needs it (#6983)
wkalt Jun 4, 2026
12f529f
fix(fts): reset TokenSet next_id and total_length after remap (#7115)
vivek-bharathan Jun 5, 2026
1f7e8f7
feat(index): support multi-bit IVF_RQ storage (#7038)
BubbleCal Jun 5, 2026
fe875b7
fix: compile AVX-512 dist table for target CPU (#7121)
Xuanwo Jun 5, 2026
60d061b
test(index): cover flat bm25 doc length normalization (#7120)
Xuanwo Jun 5, 2026
58bac59
fix(namespace): tolerate reqwest client model additions (#7124)
Xuanwo Jun 5, 2026
c7ae55a
feat: add segmented BTree index merge_segments support (#6889)
zhangyue19921010 Jun 5, 2026
6eba183
feat(lance-io): add GooseFS object store provider (#7034)
XuQianJin-Stars Jun 5, 2026
6b6c486
chore: release beta version 8.0.0-beta.4
Jun 5, 2026
cb9a782
fix(mem-wal): surface fenced flush to durability waiters instead of h…
hamersaw Jun 5, 2026
9b46abe
chore: release beta version 8.0.0-beta.5
Jun 5, 2026
4441d15
fix(linalg): reduce cosine bench TOTAL to avoid FixedSizeBinaryArray …
westonpace Jun 5, 2026
df94ee6
feat: expose tracked_files and all_files on LanceDataset (#6011)
wjones127 Jun 5, 2026
d624893
chore: release beta version 8.0.0-beta.6
Jun 5, 2026
13854cc
refactor: clean up lance-index/lance-table boundary (#6988)
wjones127 Jun 5, 2026
8d03258
fix(python)!: derive index type from details instead of opening the i…
wjones127 Jun 5, 2026
9c81ac3
feat: add EnforceDistribution to physical optimizer (#7086)
wjones127 Jun 5, 2026
352f432
feat(java): add missing scanner and merge insert params to align with…
WenDing-Y Jun 5, 2026
466405f
fix(python): avoid pandas requirement for add_columns UDFs (#7131)
prrao87 Jun 5, 2026
b6f8936
perf(index): avoid HEAD call when opening vector indexes (#7064)
gstamatakis95 Jun 7, 2026
4c9ae20
docs: clarify distributed vector model scopes (#7148)
Xuanwo Jun 8, 2026
fb1676e
perf!: avoid listing index files after writes (#7129)
Xuanwo Jun 8, 2026
c186e41
perf: reuse WAND lead buffer capacity in push_back_leads (#7153)
wkalt Jun 8, 2026
0fa8ae6
fix: remove empty index segment when committing real segments (#7141)
wkalt Jun 8, 2026
8a30c57
docs: correct alter_columns nullable docstring (#7095)
Alowator Jun 8, 2026
a266f2b
chore: release beta version 8.0.0-beta.7
Jun 8, 2026
53f1ac6
refactor(io/exec): address #6799 review (drop helper, inline RAII tim…
brendanclement Jun 8, 2026
9cc9615
ci: harden protoc install for Linux wheels (#7149)
Xuanwo Jun 8, 2026
8151ec4
refactor: replace deepsize crate with custom DeepSizeOf trait for Arr…
wjones127 Jun 8, 2026
9698bfb
perf(index): cache parsed btree lookup state (#7161)
LuQQiu Jun 8, 2026
9dbcb9b
chore: use Uuid type throughout index infrastructure instead of Strin…
wombatu-kun Jun 9, 2026
bd4ed80
fix(encoding): improve dict sampling for sorted strings (#7159)
Xuanwo Jun 9, 2026
d95c2c2
feat(index): support raw-query ivf rq search (#7078)
BubbleCal Jun 9, 2026
cc657c5
feat: support merging zonemap index segments (#7128)
Xuanwo Jun 9, 2026
07efb90
fix(index): support HNSW segment merge (#7178)
Xuanwo Jun 9, 2026
d666c8d
feat(python): expose segment FTS build through create_index_uncommitt…
ddupg Jun 9, 2026
8a12c1a
feat(lance-select): expose selected rows accessor on NullableRowAddrS…
LuQQiu Jun 9, 2026
d957a05
fix: search all unindexed fragments in FTS flat match (#7188)
wkalt Jun 9, 2026
4149197
ci: add missing bumpversion entry for lance-derive (#7190)
LuQQiu Jun 9, 2026
f24846b
chore: release beta version 8.0.0-beta.8
Jun 9, 2026
b8055c2
docs: fix incorrect method call in `create_scalar_index` example (#5399)
wayneadams Jun 9, 2026
70f5695
feat(index): support configurable multi-segment FM-Index builds (#7123)
beinan Jun 10, 2026
a0664ba
chore: release beta version 8.0.0-beta.9
Jun 10, 2026
294d48a
perf(merge_insert): probe every indexed key column for composite join…
ytyky Jun 10, 2026
8986de0
chore: minor doc fix for segmented Btree index (#7181)
zhangyue19921010 Jun 10, 2026
e256207
feat(vector)!: add approx mode for RaBitQ search (#7179)
BubbleCal Jun 10, 2026
66ea533
feat: branch-aware table version ops in directory and rest namespaces…
brendanclement Jun 10, 2026
6e676ec
fix(fts): recompute next_id when loading FST token set (#7200)
wkalt Jun 10, 2026
0dd8c3b
perf(fts): stream prewarm posting lists in chunks (#7208)
wkalt Jun 10, 2026
d8f443c
test(compat): search maintenance-op sequences between two arbitrary r…
wkalt Jun 10, 2026
0aec536
chore: release beta version 8.0.0-beta.10
Jun 10, 2026
932860f
fix(namespace): tolerate new IndexContent fields from reqwest client …
wkalt Jun 10, 2026
739ef90
chore: release beta version 8.0.0-beta.11
Jun 10, 2026
a2ddebc
feat: populate enriched IndexContent fields in dir namespace ListTabl…
wjones127 Jun 10, 2026
89a6dae
perf(index): query BTree lookup batch directly (#7186)
wjones127 Jun 11, 2026
e8748a4
feat(python): expose zonemap segment builds (#7177)
everySympathy Jun 11, 2026
c256326
feat(index): expose per-query I/O metrics on ANN operators (#7204)
wombatu-kun Jun 11, 2026
e87bae1
docs(object_store): add Tencent Cloud COS and GooseFS configuration (…
XuQianJin-Stars Jun 11, 2026
bb9b463
chore(deps): bump lance-namespace from 0.8.0 to 0.8.4 in /python (#7218)
dependabot[bot] Jun 11, 2026
7173468
perf(dir-catalog): rewrite manifest mutations with copy-on-write (#7176)
jackye1995 Jun 11, 2026
d3f0db3
fix: branch support on object stores, python branch ops, s3/ddb integ…
brendanclement Jun 11, 2026
434682d
chore: release beta version 8.0.0-beta.12
Jun 11, 2026
ddefa44
fix(datafusion): coerce filter literals for dictionary-encoded column…
valkum Jun 11, 2026
b6a99cd
perf(vector)!: add dedicated SIMD kernels for RaBitQ ex-code rerankin…
BubbleCal Jun 12, 2026
5ca5810
feat(rust): add cleanup explain API (#7147)
yanghua Jun 12, 2026
837dc15
fix(dataset): resolve Blob v2 external URIs and robustly clean failed…
yyzhao2025 Jun 12, 2026
e380167
fix(python): expose stable row id property in stub (#7249)
BubbleCal Jun 12, 2026
9714d8b
chore: release beta version 8.0.0-beta.13
Jun 12, 2026
b9dc32d
perf(dir-catalog): avoid unchanged manifest reloads (#7234)
jackye1995 Jun 12, 2026
e100ce5
refactor(namespace): remove table_version_storage_enabled and __manif…
jackye1995 Jun 12, 2026
ccefc53
build: remove brotli from dependency graph (#7270)
Xuanwo Jun 15, 2026
a8cbd3b
perf(vector): vectorize RaBitQ dist table quantization (#7241)
BubbleCal Jun 15, 2026
924e4a4
perf(index): set ivf_rq target partition size to 4096 (#7273)
BubbleCal Jun 15, 2026
c188de5
chore: release beta version 8.0.0-beta.14
Jun 15, 2026
f405b34
feat: configure blob inline threshold per column (#7269)
Xuanwo Jun 15, 2026
c626c1a
fix: record TakeExec output and I/O metrics (#7228)
skyshineb Jun 16, 2026
8743fba
fix(index): share FTS position stream offsets (#7275)
BubbleCal Jun 16, 2026
3c2e36e
fix(mem_wal): push LIMIT/OFFSET down to fresh-tier scan sources (#7256)
hamersaw Jun 16, 2026
a558da5
fix: reject nested legacy blobs in v2.2 (#7278)
Xuanwo Jun 16, 2026
440acf0
fix: support blob v2 in nested structs (#7281)
Xuanwo Jun 16, 2026
705cef5
fix: make FTS finalization idempotent (#7272)
jackye1995 Jun 16, 2026
0362c19
feat: expose io_buffer_size in CompactionOptions (#7226)
aimanmalib Jun 16, 2026
464f0bc
perf(vector): vectorize RaBitQ top-k lower-bound pruning scan (#7243)
BubbleCal Jun 16, 2026
72ea21c
feat(index): accelerate regex and infix LIKE with the ngram index (#7…
wombatu-kun Jun 16, 2026
27570a3
perf(mem_wal): parallelize fresh-tier source planning and execution (…
hamersaw Jun 16, 2026
bf9f706
fix(python): python binding of `Compaction.commit` (#7210)
gstamatakis95 Jun 16, 2026
8e98f51
fix(dataset)!: fail-fast casting for columns with attached indices (#…
WenDing-Y Jun 16, 2026
80e35ec
feat: bump lance-namespace-reqwest-client to 0.8.6 (source_task_size)…
justinrmiller Jun 16, 2026
1b78086
fix: handle empty batch from deletion in add_columns_from_stream (#7233)
zhangyang0418 Jun 16, 2026
1f98d89
fix: merge_insert silently drops matches when a leading payload colum…
Ar-maan05 Jun 16, 2026
e60f569
chore: release beta version 8.0.0-beta.15
Jun 16, 2026
2ced0a7
feat: expose session cache key inventory (#7298)
jackye1995 Jun 17, 2026
6e734df
chore: release beta version 8.0.0-beta.16
Jun 17, 2026
4eace83
fix(rust): fixed IVF_RQ indexes ignoring the frag-reuse index (#7217)
gstamatakis95 Jun 17, 2026
747fa0b
fix: remap index data when its fragment bitmap was already coverage-r…
xuanyu-z Jun 17, 2026
d076a7a
feat: stabilize cache codec with a versioned envelope (#7163)
wjones127 Jun 17, 2026
9813867
perf(fts): push prefilter through scalar index on flat FTS (#7283)
LuQQiu Jun 17, 2026
d9ab79f
fix(index): refresh PQ storage row ids after fragment-reuse remap (#7…
xuanyu-z Jun 17, 2026
8818925
feat(dir-catalog): add reader/writer feature flags to __manifest (#7191)
jackye1995 Jun 17, 2026
af47bc5
feat(java): expose RTree scalar index type to Java (#7291)
zhangyue19921010 Jun 17, 2026
ae74092
fix(fts): keep inverted index correct under deletions in the fragment…
xuanyu-z Jun 17, 2026
113f513
test(python): use non-deprecated params in search benchmark fixtures …
sezruby Jun 17, 2026
34b5474
fix: dedup active-memtable predicate-crossing stale reads (vector + F…
hamersaw Jun 17, 2026
bb72a16
fix: return error instead of panicking on zero-dimension fixed-size-l…
DanielMao1 Jun 17, 2026
996e063
perf(scalar): compile IsIn predicate once across BTree pages (#7287)
JulianYG Jun 17, 2026
64c7fbd
perf: batch fragment-reuse index remap into a single rebuild + commit…
xuanyu-z Jun 17, 2026
0f2745d
chore: release beta version 8.0.0-beta.17
Jun 17, 2026
134042a
feat(scalar): expose LogicalScalarIndex::try_new and load_named_scala…
LuQQiu Jun 17, 2026
909dea1
chore: release beta version 8.0.0-beta.18
Jun 17, 2026
1f87111
chore(deps): bump lance-namespace from 0.8.5 to 0.8.6 in /python (#7343)
dependabot[bot] Jun 17, 2026
6484a0b
chore(deps): bump geoarrow-rust-core from 0.6.1 to 0.6.3 in /python (…
dependabot[bot] Jun 17, 2026
838f78b
fix: avoid versioned describe table for namespace opens (#7250)
FANNG1 Jun 18, 2026
c4e6564
feat: support mixed-language FTS stop words (#7324)
Xuanwo Jun 18, 2026
5886192
feat(mem-wal): snapshot-consistent as-of cut for fresh-tier membershi…
hamersaw Jun 18, 2026
cfc3b6c
perf(index): reuse WAND doc info (#7358)
BubbleCal Jun 18, 2026
d0d8dad
feat(mem_wal): warm flushed generations into shared caches before que…
hamersaw Jun 18, 2026
5fd0659
chore: release beta version 8.0.0-beta.19
Jun 18, 2026
2878189
feat: allow tuning miniblock value chunks to 32k (#7356)
Xuanwo Jun 18, 2026
b2c26ea
perf(fts): defer term frequency collection (#7357)
BubbleCal Jun 18, 2026
cdcb18a
fix: stream FM index partition builds (#7354)
jackye1995 Jun 18, 2026
5651ff5
chore: bump main to 8.1.0-beta.0
Jun 18, 2026
062ee31
fix: route JSON index queries to the correct sub-parser by path (#7072)
ztorchan Jun 18, 2026
245f927
refactor(index): rely on total ordering for nan zonemap max (#7049)
HaochengLIU Jun 18, 2026
fb17c93
ci(java): parallelize macOS build, split publish; scope release lock …
wjones127 Jun 18, 2026
629dc8e
fix: apply per-segment filters and frag-reuse remap in BTree segment …
zhangyue19921010 Jun 19, 2026
75bc428
fix: evaluate all list-element docs in FTS prefilter walk-the-allowli…
Ar-maan05 Jun 19, 2026
b15865f
chore: drop Python 3.9 support, set 3.10 as minimum (#7345)
wjones127 Jun 19, 2026
6ba89d5
feat: support hamming clustering (#7379)
brendanclement Jun 19, 2026
0fd0c37
fix(ci): replace deprecated array.shape assignment for NumPy 2.5 (#7384)
zhangyue19921010 Jun 22, 2026
9152d61
perf(knn): reduce memory for batch flat vector search (#6950)
LeoReeYang Jun 22, 2026
f9690ba
refactor: remove as_vector_index from the Index trait (#7392)
westonpace Jun 22, 2026
2b1b100
fix(fts): enforce required terms for and queries (#7385)
BubbleCal Jun 22, 2026
a13a760
perf: speed up ICU FTS index builds by 11% (#7393)
Xuanwo Jun 22, 2026
bccd5a2
feat: support COUNT(*) pushdown on stable row id datasets (#7360)
wkalt Jun 22, 2026
b022a99
chore: bump to 9.0.0-beta.1 based on breaking change detection
Jun 22, 2026
1c3d201
fix: support manifests >5 GB via size-aware copy (#7047)
lixmgl Jun 22, 2026
f4d24ca
fix: reject DataReplacement racing concurrent Update/Delete/Merge (#7…
wkalt Jun 22, 2026
9f26271
perf(fts): prune low-scoring conjunction candidates (#7386)
BubbleCal Jun 23, 2026
b1efc9d
feat(namespace-dir): add alter table column operations (add/alter/dro…
XuQianJin-Stars Jun 23, 2026
7b9ea60
fix(index): use range block max for fts conjunction (#7387)
BubbleCal Jun 23, 2026
aa544a8
perf(index): improve FTS search metadata caching (#7398)
Xuanwo Jun 23, 2026
2321198
chore: release beta version 9.0.0-beta.2
Jun 23, 2026
7ebc22d
perf(fts): open fts segments as scalar indices (#7408)
BubbleCal Jun 23, 2026
ed9caf3
feat(mem-wal): add ShardWriter::put_no_wait (#7362)
hamersaw Jun 23, 2026
df08f7f
fix(io): clamp ObjectStore::io_parallelism() to at least 1 (#7414)
LuciferYang Jun 23, 2026
5cfc088
feat: expose staged index segment transactions
ragnorc Jun 23, 2026
a128e52
fix(update): keep nested-field index correct when updating a struct c…
jackye1995 Jun 23, 2026
5f7f6c9
perf(index): reduce TwoFileShuffler peak memory via interleave sort (…
wjones127 Jun 23, 2026
f24ec20
Merge branch 'main' into ragnorc/two-phase-index-segments
ragnorc Jun 23, 2026
666e5b2
fix(index): drop stale scalar index entries after stable-row-id updat…
wkalt Jun 23, 2026
5266629
docs: clarify local LTO guidance (#7400)
Xuanwo Jun 23, 2026
75c5c79
Merge branch 'main' into ragnorc/two-phase-index-segments
ragnorc Jun 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 6 additions & 1 deletion .bumpversion.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[tool.bumpversion]
current_version = "8.0.0-beta.1"
current_version = "9.0.0-beta.2"
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)(-(?P<prerelease>(beta|rc))\\.(?P<prerelease_num>\\d+))?"
serialize = [
"{major}.{minor}.{patch}-{prerelease}.{prerelease_num}",
Expand Down Expand Up @@ -55,6 +55,11 @@ filename = "Cargo.toml"
search = 'lance-datagen = {{ version = "={current_version}"'
replace = 'lance-datagen = {{ version = "={new_version}"'

[[tool.bumpversion.files]]
filename = "Cargo.toml"
search = 'lance-derive = {{ version = "={current_version}"'
replace = 'lance-derive = {{ version = "={new_version}"'

[[tool.bumpversion.files]]
filename = "Cargo.toml"
search = 'lance-encoding = {{ version = "={current_version}"'
Expand Down
7 changes: 7 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ debug = true
codegen-units = 16
lto = "thin"

[profile.release-no-lto]
inherits = "release"
debug = true
lto = false
# Prioritize compile time when LTO is not relevant to the measurement.
codegen-units = 16

[profile.bench]
inherits = "release"
lto = "thin"
Expand Down
30 changes: 30 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
version: 2
updates:
- package-ecosystem: "cargo"
directory: "/"
versioning-strategy: lockfile-only
schedule:
interval: "weekly"
day: "wednesday"

- package-ecosystem: "cargo"
directory: "/python"
versioning-strategy: lockfile-only
schedule:
interval: "weekly"
day: "wednesday"

- package-ecosystem: "cargo"
directory: "/java/lance-jni"
versioning-strategy: lockfile-only
schedule:
interval: "weekly"
day: "wednesday"

- package-ecosystem: "uv"
directory: "/python"
versioning-strategy: lockfile-only
schedule:
interval: "weekly"
day: "wednesday"

26 changes: 10 additions & 16 deletions .github/workflows/build_linux_wheel/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: build-linux-wheel
description: "Build a manylinux wheel for lance"
inputs:
python-minor-version:
description: "9, 10, 11, 12"
description: "10, 11, 12, 13"
required: true
args:
description: "--release"
Expand Down Expand Up @@ -41,11 +41,9 @@ runs:
args: ${{ inputs.args }}
maturin-version: "1.10.2"
before-script-linux: |
set -e
yum install -y openssl-devel \
&& curl -L https://github.com/protocolbuffers/protobuf/releases/download/v24.4/protoc-24.4-linux-$(uname -m).zip > /tmp/protoc.zip \
&& unzip /tmp/protoc.zip -d /usr/local \
&& rm /tmp/protoc.zip
set -euo pipefail
yum install -y openssl-devel
bash "${GITHUB_WORKSPACE}/.github/workflows/build_linux_wheel/install-protoc.sh"
- name: Build x86_64 Manylinux {manylinux} wheel
if: ${{ inputs.arm-build == 'false' && inputs.manylinux != '2_17' }}
uses: PyO3/maturin-action@04ac600d27cdf7a9a280dadf7147097c42b757ad # v1
Expand All @@ -60,11 +58,9 @@ runs:
args: ${{ inputs.args }}
maturin-version: "1.10.2"
before-script-linux: |
set -e
yum install -y openssl-devel clang \
&& curl -L https://github.com/protocolbuffers/protobuf/releases/download/v24.4/protoc-24.4-linux-$(uname -m).zip > /tmp/protoc.zip \
&& unzip /tmp/protoc.zip -d /usr/local \
&& rm /tmp/protoc.zip
set -euo pipefail
yum install -y openssl-devel clang
bash "${GITHUB_WORKSPACE}/.github/workflows/build_linux_wheel/install-protoc.sh"
- name: Build Arm Manylinux Wheel
if: ${{ inputs.arm-build == 'true' }}
uses: PyO3/maturin-action@04ac600d27cdf7a9a280dadf7147097c42b757ad # v1
Expand All @@ -76,8 +72,6 @@ runs:
args: ${{ inputs.args }}
maturin-version: "1.10.2"
before-script-linux: |
set -e
yum install -y openssl-devel clang \
&& curl -L https://github.com/protocolbuffers/protobuf/releases/download/v24.4/protoc-24.4-linux-aarch_64.zip > /tmp/protoc.zip \
&& unzip /tmp/protoc.zip -d /usr/local \
&& rm /tmp/protoc.zip
set -euo pipefail
yum install -y openssl-devel clang
bash "${GITHUB_WORKSPACE}/.github/workflows/build_linux_wheel/install-protoc.sh"
47 changes: 47 additions & 0 deletions .github/workflows/build_linux_wheel/install-protoc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/usr/bin/env bash
set -euo pipefail

version="${PROTOC_VERSION:-24.4}"
install_dir="${PROTOC_INSTALL_DIR:-/usr/local}"
machine="${1:-$(uname -m)}"

case "${machine}" in
aarch64 | arm64)
asset_arch="aarch_64"
;;
x86_64)
asset_arch="x86_64"
;;
*)
echo "Unsupported protoc architecture: ${machine}" >&2
exit 1
;;
esac

zip_path="/tmp/protoc-${version}-linux-${asset_arch}.zip"
url="https://github.com/protocolbuffers/protobuf/releases/download/v${version}/protoc-${version}-linux-${asset_arch}.zip"

for attempt in 1 2 3 4 5; do
rm -f "${zip_path}"

if curl -fsSL --connect-timeout 15 --max-time 120 -o "${zip_path}" "${url}" \
&& unzip -tq "${zip_path}" >/dev/null; then
break
fi

if [[ "${attempt}" == "5" ]]; then
echo "Failed to download a valid protoc archive from ${url}" >&2
exit 1
fi

sleep "$((attempt * 2))"
done

unzip -q -o "${zip_path}" -d "${install_dir}"
rm -f "${zip_path}"

if [[ "$(uname -s)" == "Linux" ]]; then
"${install_dir}/bin/protoc" --version
else
test -f "${install_dir}/bin/protoc"
fi
2 changes: 1 addition & 1 deletion .github/workflows/build_mac_wheel/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: build_wheel
description: "Build a lance wheel"
inputs:
python-minor-version:
description: "9, 10, 11, 12"
description: "10, 11, 12, 13"
required: true
args:
description: "--release"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build_windows_wheel/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: build_wheel
description: "Build a lance wheel"
inputs:
python-minor-version:
description: "9, 10, 11, 12"
description: "10, 11, 12, 13"
required: true
args:
description: "--release"
Expand Down
78 changes: 78 additions & 0 deletions .github/workflows/compat-pair.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# On-demand cross-version index compatibility run between two arbitrary refs.
#
# The PR path lives in python.yml (compat-sequence job), which ages the two previous
# majors into the PR head reusing the prebuilt wheel. This workflow is the manual escape
# hatch for any other pairing: each ref (version, sha, branch, or tag) is provisioned by
# the framework -- a published release installs a wheel, anything else is built from a
# worktree via maturin -- so two arbitrary refs can be compared even when neither has a
# published wheel. The suite ages an index under the writer ref and exercises it under the
# reader, searching maintenance-op sequences for panics or correctness divergence.
name: Compat (index ref pair)

on:
workflow_dispatch:
inputs:
from_ref:
description: "Writer ref (version / sha / branch). Blank = 2nd most recent release."
required: false
default: ""
to_ref:
description: "Reader ref (version / sha / branch). Blank = most recent release."
required: false
default: ""
kinds:
description: "Comma-separated index kinds (INVERTED,BTREE,...) or 'all'."
required: false
default: "all"
max_length:
description: "Max maintenance-op sequence length to search (deeper = slower)."
required: false
default: "5"

jobs:
compat-pair:
runs-on: ubuntu-latest
timeout-minutes: 120
defaults:
run:
working-directory: python
env:
COMPAT_FROM_REF: ${{ inputs.from_ref }}
COMPAT_TO_REF: ${{ inputs.to_ref }}
COMPAT_MAX_LENGTH: ${{ inputs.max_length || '5' }}
steps:
# Full history so arbitrary refs can be checked out for builds.
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: "3.11"
# Toolchain for the build-from-source provisioning path (refs without a wheel).
- uses: actions-rust-lang/setup-rust-toolchain@a0b538fa0b742a6aa35d6e2c169b4bd06d225a98 # v1
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
- name: Install build deps
run: |
sudo apt update
sudo apt install -y protobuf-compiler libssl-dev
- name: Install host deps
run: pip install pytest pytest-xdist pyarrow packaging maturin
- name: Resolve kinds
id: kinds
env:
KINDS_IN: ${{ inputs.kinds }}
run: |
if [ -z "$KINDS_IN" ] || [ "$KINDS_IN" = "all" ]; then
echo "value=INVERTED,BTREE,BITMAP,LABEL_LIST,NGRAM,ZONEMAP,BLOOMFILTER" >> "$GITHUB_OUTPUT"
else
echo "value=$KINDS_IN" >> "$GITHUB_OUTPUT"
fi
# Oversubscribe (4x cores): each scenario writes a small dataset to disk and the
# reader spends most of its time in short subprocess round-trips, so a worker waiting
# on disk or the sub-venv pipe overlaps another's compute.
- name: Run compat suite (${{ inputs.from_ref }} -> ${{ inputs.to_ref }})
env:
COMPAT_KINDS: ${{ steps.kinds.outputs.value }}
run: |
python -m pytest python/tests/compat/test_index_sequence.py \
--run-compat -n "$(( $(nproc) * 4 ))" -v --no-header
Loading
Loading