Files
greptimedb/src/common/meta/AGENTS.md
T
discord9 f50f42140a build: reduce checkout-specific inputs for cache reuse (#9198)
* test(mito2): cover regex inverted index pruning

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

* build: keep build inputs checkout-relative for cross-worktree cache reuse

Two small changes so compilations are byte-identical across worktrees
of the same commit and can share a build cache (mbx, sccache):

- src/common/version/build.rs: derive the workspace root relative to
  CARGO_MANIFEST_DIR instead of the CARGO_WORKSPACE_DIR injected by
  .cargo/config.toml (an absolute path). The env var remains as an
  explicit override for the submodule case; the [env] injection in
  .cargo/config.toml is removed so the relative derivation is used by
  default.
- Replace three env!("CARGO_MANIFEST_DIR") uses in test/bench code
  (servers prom_decode bench + decode test, common-meta test_util)
  with a runtime std::env::var lookup, so the compiled artifact no
  longer embeds the checkout path.

No behavior change: same files are read, same version info emitted.

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

* build: address cross-worktree cache review feedback

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

---------

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>
2026-10-12 08:08:21 +00:00

2.6 KiB

common-meta — Agent & Contributor Guide

Navigation map for src/common/meta. Repo-wide invariants: .agents/architecture-invariants.md.

common-meta contains shared metadata keys and values, KV backends, caches, and durable DDL procedures. Metasrv process and service wiring live in src/meta-srv.

Module map

Area Path Entry point
Metadata model src/common/meta/src/key.rs, src/common/meta/src/key/ Typed keys, values, and TableMetadataManager
KV storage src/common/meta/src/kv_backend.rs, src/common/meta/src/kv_backend/ KvBackend, transactions, memory/etcd/RDS backends
DDL procedures src/common/meta/src/ddl.rs, src/common/meta/src/ddl/, src/common/meta/src/ddl_manager.rs Durable DDL state machines and task dispatch
Caches src/common/meta/src/cache.rs, src/common/meta/src/cache/, src/common/meta/src/cache_invalidator.rs Metadata caches and invalidation
RPC types src/common/meta/src/rpc.rs, src/common/meta/src/rpc/ Shared metasrv request/response types
Recovery src/common/meta/src/reconciliation.rs, src/common/meta/src/reconciliation/ Catalog/table/region reconciliation

Change coupling

  • Key/value encoding changes require backward-compatible decoding and a case in tests/compatibility/.
  • Multi-key metadata changes must preserve transaction boundaries and cache invalidation.
  • Procedure changes must preserve persisted state and TYPE_NAME; new procedures need loader registration in src/common/meta/src/ddl_manager.rs.
  • Marker-style table options that no region consumes (greptime.semantic.*, repartition.column.hint) go through AnnotationFamily in src/table/src/requests.rs — classification, validation, logical-table eligibility, and the metadata-only alter flow come with it. Do not add per-option special cases to the alter conversion or DDL routing.
  • KvBackend behavior changes should extend the shared tests in src/common/meta/src/kv_backend/test.rs.

Testing

cargo nextest run -p common-meta

Backend-specific coverage may also need pg_kvbackend or mysql_kvbackend.

test_util::etcd_certs_dir and test_util::test_certs_dir resolve fixture certificates using CARGO_MANIFEST_DIR at run time (std::env::var, not env!). cargo nextest run sets it; direct test-binary execution requires setting the variable to the crate directory. Run this example from the repository root:

CARGO_MANIFEST_DIR="$PWD/src/common/meta" ./target/debug/deps/<test_binary>