* 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>
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
QueryContextchanges must cover HTTP, gRPC, MySQL, and PostgreSQL entry points. - Internal frontend gRPC listeners set
Channel::Internalin 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
QueryContextstate; 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>