Files
greptimedb/src/servers/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.9 KiB

servers — Agent & Contributor Guide

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

servers owns network listeners and protocol translation. Database behavior is provided through handler traits, mostly implemented by frontend.

Module map

Area Path Entry point
Lifecycle src/servers/src/server.rs Shared Server trait
Handler boundary src/servers/src/query_handler.rs, src/servers/src/query_handler/ Protocol-independent handler traits
gRPC / Flight src/servers/src/grpc.rs, src/servers/src/grpc/ gRPC services, auth, cancellation, builders
HTTP src/servers/src/http.rs, src/servers/src/http/ Routes, middleware, protocol endpoints, output formats
SQL protocols src/servers/src/mysql.rs, src/servers/src/mysql/, src/servers/src/postgres.rs, src/servers/src/postgres/ MySQL/PostgreSQL servers and type conversion
Observability protocols src/servers/src/prom_remote_write/, src/servers/src/prometheus.rs, src/servers/src/otlp/, src/servers/src/otel_arrow.rs Prometheus and OpenTelemetry conversion
Resources / TLS src/servers/src/request_memory_limiter.rs, src/servers/src/tls.rs, src/servers/src/addrs.rs Memory admission, TLS, listener addresses

Change coupling

  • Handler trait changes require matching frontend and mock implementations.
  • gRPC wire changes start in greptime-proto; update builders and handlers here after bumping it.
  • Auth or QueryContext changes must cover HTTP, gRPC, MySQL, and PostgreSQL entry points.
  • Internal frontend gRPC listeners set Channel::Internal in server-owned request extensions. Handlers preserve it through query execution and metering; client flow metadata does not grant an internal channel.
  • Finite requests split by wire handlers (Prometheus batching and OpenTSDB summary/details) admit all rows before dispatch. Admission is process-local QueryContext state; never accept it from headers or serialized contexts.
  • New protocols or externally visible routes also require frontend service and configuration wiring.

Testing

cargo nextest run -p servers

Keep protocol translation here and permissions/database behavior in frontend. Async table batching returns storage-completion futures with its early acknowledgements. Keep completion reporting independent of the caller's lifetime.

prom_remote_write/decode.rs and benches/prom_decode.rs resolve benches/write_request.pb.data using CARGO_MANIFEST_DIR at run time (std::env::var, not env!). cargo nextest run and cargo bench set it; direct test/benchmark-binary execution requires setting it to the crate directory. Run this example from the repository root:

CARGO_MANIFEST_DIR="$PWD/src/servers" ./target/debug/deps/<test_or_bench_binary>