Files
greptimedb/src/operator/AGENTS.md
T
shuiyisongandLei, HUANG 66d38e8e1c feat: add database ingestion admission through metering (#9239)
* feat: add `ingest_rows_rate_limit` database option

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* feat: add `InsertLimitInterceptor` hook to `Inserter`

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix: attribute insert limit checks to the target table's database

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* refactor: unify write admission through metering

Signed-off-by: shuiyisong <xixing.sys@gmail.com>

* fix: enforce write admission for pending row batches

Signed-off-by: shuiyisong <xixing.sys@gmail.com>

* feat: distinguish internal requests for ingestion metering

Signed-off-by: shuiyisong <xixing.sys@gmail.com>

* fix: admit split ingestion requests once per database

Signed-off-by: shuiyisong <xixing.sys@gmail.com>

* fix: OpenTSDB throws error reason

Signed-off-by: shuiyisong <xixing.sys@gmail.com>

* chore: use meter crate main rev

Signed-off-by: shuiyisong <xixing.sys@gmail.com>

* fix: exclude database ingest rate limit from table options

Signed-off-by: shuiyisong <xixing.sys@gmail.com>

* refactor: reserve channel 255 for internal requests

Signed-off-by: shuiyisong <xixing.sys@gmail.com>

---------

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>
Signed-off-by: shuiyisong <xixing.sys@gmail.com>
Co-authored-by: Lei, HUANG <ratuthomm@gmail.com>
2026-09-21 07:27:22 +00:00

2.3 KiB

operator — Agent & Contributor Guide

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

operator connects frontend statements and writes to query, catalog, metasrv, and datanodes. It owns statement dispatch, DDL task conversion, and region-level insert/delete routing.

Module map

Area Path Entry point
Statements src/operator/src/statement.rs, src/operator/src/statement/ StatementExecutor and per-statement handlers
Inserts src/operator/src/insert.rs, src/operator/src/bulk_insert.rs Insert, auto-create/alter, routing, dispatch
Deletes src/operator/src/delete.rs Delete conversion and dispatch
Request conversion src/operator/src/req_convert.rs, src/operator/src/req_convert/ Table/row/column requests to region requests
Region requests src/operator/src/region_req_factory.rs Region-level DDL/DML request construction
Procedures src/operator/src/procedure.rs Metasrv procedure administration
Flow src/operator/src/flow.rs, src/operator/src/statement/ddl.rs Flow requests and internal mode selection

Change coupling

  • New statement kinds usually touch parser/AST handling, frontend permission and interception, executor dispatch, and sqlness cases.
  • DDL task changes require matching common-meta, metasrv, recovery, and compatibility updates.
  • Insert/delete conversion changes must cover both request formats, partition routing, and schema-on-write behavior.
  • Flow creation changes must stay aligned with src/flow/AGENTS.md and common-meta flow metadata.

Testing

cargo nextest run -p operator
cargo sqlness bare -t <case>

Check standalone and distributed routing when changing region dispatch.

Write admission uses fallible write_meter! calls in Inserter::do_request and handle_bulk_insert, before flow side effects and datanode dispatch. Bulk records carry row counts and the request channel with zero WCU. Validate both the default meter-macros/noop build and active metering when changing this path. Finite requests split internally use admit_write / admit_row_insert_batches before dispatch. Their database-scoped QueryContext admission prevents a second row debit while do_request still records WCU for the actual writes.