mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-10-16 17:02:33 +00:00
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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user