mirror of
https://github.com/lancedb/lancedb.git
synced 2026-10-13 07:12:27 +00:00
Targets `release/v0.39`, not `main`. That branch was cut from `56bbd19f`, the last commit on `main` still pinned to lance 12, and carries eight backported fixes; it will publish the next stable lancedb on the lance 12.0.0 release. ## What changed Rust workspace lance crates and `java/pom.xml` `lance-core` move from `v12.0.0-beta.18` to [`v12.0.0`](https://github.com/lance-format/lance/releases/tag/v12.0.0). No compatibility fixes were needed. Because the target is a stable lance, `ci/set_lance_version.py` takes the `set_stable_version` path, so the workspace dependencies drop their `git` and `tag` fields and resolve from crates.io. That switch is required for the release itself — `cargo publish` rejects a crate with git dependencies — and `Cargo.lock` now has zero `lance-format/lance` references. ## Validation * `python3 ci/validate_stable_lance.py` passes — the gate the `Create Release Commit` workflow runs for a stable release. * `cargo fmt --all`, `git diff --check` clean. * All lance 12.0.0 crates confirmed published on crates.io, and `org.lance:lance-core:12.0.0` on Maven Central. * Full build and test verification is delegated to this PR's CI, which also exercises the eight backported fixes on the branch. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
LanceDB Java Enterprise Client
Configuration and Initialization
LanceDB Cloud
For LanceDB Cloud, use the simplified builder API:
import com.lancedb.LanceDbNamespaceClientBuilder;
import org.lance.namespace.LanceNamespace;
// If your DB url is db://example-db, then your database here is example-db
LanceNamespace namespaceClient = LanceDbNamespaceClientBuilder.newBuilder()
.apiKey("your_lancedb_cloud_api_key")
.database("your_database_name")
.build();
LanceDB Enterprise
For Enterprise deployments, use your custom endpoint:
LanceNamespace namespaceClient = LanceDbNamespaceClientBuilder.newBuilder()
.apiKey("your_lancedb_enterprise_api_key")
.database("your_database_name")
.endpoint("<your_enterprise_endpoint>")
.build();
MemWAL LSM write path
Most table operations reach LanceDB through the LanceNamespace above, which is
generated from the Lance Namespace specification. The MemWAL LSM routes are not part
of that specification, so they are issued through a separate client:
import com.lancedb.LanceDbRestClient;
import com.lancedb.LanceDbTableLsm;
import com.lancedb.LsmWriteSpec;
LanceDbRestClient client = LanceDbNamespaceClientBuilder.newBuilder()
.apiKey("your_lancedb_cloud_api_key")
.database("your_database_name")
.buildRestClient();
LanceDbTableLsm lsm = new LanceDbTableLsm(client, "my_table");
// Route future merge_insert upserts through the MemWAL, hash-bucketed by `id`.
lsm.setLsmWriteSpec(LsmWriteSpec.bucket("id", 16));
// ... merge_insert traffic ...
// Converge the fresh tier into the base table.
lsm.checkpointLsm();
// Inspect live per-bucket state.
lsm.getLsmStats().ifPresent(stats -> stats.buckets().forEach(bucket ->
System.out.println(bucket.shardId() + ": " + bucket.generations().size() + " L0 generations")));
client.close();
maintainedIndexes is tri-state, and the null default is the opposite of what a Java
reader usually expects:
| Value | Meaning |
|---|---|
| unset (null) | Maintain every index the MemWAL can, resolved on install |
Collections.emptyList() |
Maintain none |
Arrays.asList("id_idx") |
Maintain exactly those |
Development
Build:
./mvnw install -pl lancedb-core -am
Run tests:
./mvnw test -pl lancedb-core