blob: a4dca0a9587954e51469a65b50de23932f413b78 [file] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# Compatibility & Release Policy
This document describes which IoTDB server versions this client targets, the
exact protocol toolchain each crate release is built from, and the versioning
rules the crate follows.
## IoTDB server compatibility matrix
The client speaks IoTDB service protocol **V3** over Apache Thrift RPC and
targets the IoTDB **2.0.x** line. There is no version-specific branching in
the client code.
| IoTDB version | Status | Notes |
|---|---|---|
| 2.0.1 | Expected to work | Untested |
| 2.0.2 | Expected to work | Untested |
| 2.0.3 | Expected to work | Untested |
| 2.0.4 | Expected to work | Untested |
| 2.0.5 | Expected to work | Untested |
| 2.0.6 | **Tested** | CI runs the full live test suite + 3 examples against `apache/iotdb:2.0.6-standalone` on every push; TLS verified end-to-end (`enable_thrift_ssl`, TLSv1.3, full certificate verification) |
| 2.0.7 | Expected to work | Untested |
| 2.0.8 | Expected to work | Untested |
| 2.0.10 | **Tested** | Full benchmark + data-correctness verification (all 10 data types, tree & table models, nulls) against a standalone deployment; RPC compression verified (`dn_rpc_thrift_compression_enable=true`) |
| master | Expected to work | The Thrift IDL is synced from `apache/iotdb` master (`iotdb-protocol/`); untested beyond IDL lockstep |
| 1.x | **Not supported** | The table model and the TIMESTAMP / DATE / BLOB / STRING data types assume 2.x; no plan to support 1.x |
"Expected to work" means the version speaks protocol V3 and the same IDL
surface, but the client has not been exercised against it. Reports of success
or failure on untested versions are welcome as issues.
## Protocol toolchain (per release)
Each crate release records the exact IDL source and Thrift toolchain used to
generate `src/protocol/`:
| Crate version | IoTDB IDL source | Thrift compiler | `thrift` crate |
|---|---|---|---|
| 0.1.0 (unreleased) | `apache/iotdb` master, `iotdb-protocol/` @ `2fedd8a395` (2026-06-30, last change to `client.thrift`/`common.thrift`) | 0.23.0 (as pinned by the IoTDB pom's `thrift.version`) | 0.23 |
The generation pipeline is documented in [`tools/generate-thrift.sh`](./tools/generate-thrift.sh):
the IDL files (`thrift/client.thrift`, `thrift/common.thrift`) are synced from
`apache/iotdb`'s `iotdb-protocol/` module, and the Thrift compiler binary is
taken from the IoTDB Maven build output, which guarantees the compiler version
matches the one the server project pins. The generated stubs are committed and
must never be hand-edited.
This table is updated as part of every release.
## Versioning policy (SemVer)
The crate follows [Cargo's SemVer rules](https://doc.rust-lang.org/cargo/reference/semver.html):
- **Pre-1.0 (`0.x.y`)**: a bump of `x` may contain breaking API changes; a
bump of `y` is additive or a bug fix. Cargo treats `0.x` as the
compatibility boundary, so `^0.1` will never auto-upgrade to `0.2`.
- **Post-1.0**: breaking changes bump the major version, new functionality
bumps the minor version, bug fixes bump the patch version.
- A regeneration of the Thrift stubs against a newer IDL is treated as
breaking only if it changes the public Rust API surface; pure wire-level
additions ship as minor/patch releases.
## Deprecation policy
- APIs slated for removal are first marked `#[deprecated]` (with a message
pointing at the replacement) and remain functional for at least one minor
release before removal.
- Removals happen only in releases that SemVer already marks as breaking
(major bumps, or `0.x` bumps pre-1.0).
- Deprecations and removals are listed in the release notes.
## Release process
- Every release documents, in its release notes: the IoTDB IDL commit, the
Thrift compiler version, and the tested IoTDB server versions (the table
above is updated in the same change).
- CI continuously tests against both the oldest tested and the latest stable
IoTDB versions (currently 2.0.6 and 2.0.10; see
[`.github/workflows/ci.yml`](./.github/workflows/ci.yml)).