feat: support request-level insert WAL skipping (#9088)

* refactor: add skip_wal fields to internal write requests

Signed-off-by: WenyXu <wenymedia@gmail.com>

* chore(deps): update greptime-proto for insert skip_wal

Signed-off-by: WenyXu <wenymedia@gmail.com>

* feat(mito): support request-level WAL skipping

Signed-off-by: WenyXu <wenymedia@gmail.com>

* feat(metric-engine): handle request-level WAL policies

Signed-off-by: WenyXu <wenymedia@gmail.com>

* feat: propagate insert WAL policy through query context

Signed-off-by: WenyXu <wenymedia@gmail.com>

* feat: support session-level insert WAL policy via SET

Signed-off-by: WenyXu <wenymedia@gmail.com>

* fix(metric-engine): require uniform WAL policy in batch puts

Signed-off-by: WenyXu <wenymedia@gmail.com>

* test(metric-engine): simplify WAL policy coverage

Signed-off-by: WenyXu <wenymedia@gmail.com>

* refactor(servers): simplify gRPC hint extraction

Signed-off-by: WenyXu <wenymedia@gmail.com>

* test: flatten Mito and Metric WAL scenario orchestration

Signed-off-by: WenyXu <wenymedia@gmail.com>

* refactor: separate WAL and memtable-only mutations

Signed-off-by: WenyXu <wenymedia@gmail.com>

* refactor: carry skip-WAL policy in table insert requests

Signed-off-by: WenyXu <wenymedia@gmail.com>

* test: flatten skip-WAL policy cases

Signed-off-by: WenyXu <wenymedia@gmail.com>

* refactor: clarify WAL notifier naming

Signed-off-by: WenyXu <wenymedia@gmail.com>

* chore: pin merged skip-WAL proto revision

Signed-off-by: WenyXu <wenymedia@gmail.com>

---------

Signed-off-by: WenyXu <wenymedia@gmail.com>
This commit is contained in:
Weny Xu
2026-09-10 11:40:51 +00:00
committed by GitHub
parent 536f42e4a2
commit fa128adb8e
46 changed files with 1750 additions and 98 deletions
+34
View File
@@ -221,6 +221,7 @@ fn make_region_puts(inserts: InsertRequests) -> Result<Vec<(RegionId, RegionRequ
RegionRequest::Put(RegionPutRequest {
rows,
hint: None,
skip_wal: r.skip_wal,
partition_expr_version: r.partition_expr_version.map(|v| v.value),
}),
)
@@ -524,6 +525,9 @@ pub struct RegionPutRequest {
pub rows: Rows,
/// Write hint.
pub hint: Option<WriteHint>,
/// Skip WAL for this insert without changing region options.
/// Metadata writes must not inherit this option from user inserts.
pub skip_wal: bool,
/// Partition expression version for the region.
pub partition_expr_version: Option<u64>,
}
@@ -1864,6 +1868,36 @@ mod tests {
use super::*;
use crate::metadata::RegionMetadataBuilder;
#[test]
fn test_make_region_puts_preserves_skip_wal() {
let region_id = RegionId::new(42, 3);
let rows = Rows::default();
let requests = make_region_puts(InsertRequests {
requests: [false, true, false]
.into_iter()
.map(|skip_wal| api::v1::region::InsertRequest {
region_id: region_id.as_u64(),
rows: Some(rows.clone()),
partition_expr_version: Some(api::v1::PartitionExprVersion { value: 7 }),
skip_wal,
})
.collect(),
})
.unwrap();
assert_eq!(3, requests.len());
for ((id, request), skip_wal) in requests.into_iter().zip([false, true, false]) {
assert_eq!(region_id, id);
let RegionRequest::Put(request) = request else {
panic!("expected a put request");
};
assert_eq!(rows, request.rows);
assert_eq!(skip_wal, request.skip_wal);
assert_eq!(Some(7), request.partition_expr_version);
assert!(request.hint.is_none());
}
}
#[test]
fn test_make_region_compact_with_time_range() {
let requests = make_region_compact(CompactRequest {