feat: supports sst_format for x-greptime-hints and database options (#7843)

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>
This commit is contained in:
dennis zhuang
2026-03-24 10:05:16 +08:00
committed by GitHub
parent f999d5e70e
commit 223f6cfdf7
4 changed files with 144 additions and 4 deletions

View File

@@ -36,8 +36,9 @@ use store_api::metric_engine_consts::{
LOGICAL_TABLE_METADATA_KEY, PHYSICAL_TABLE_METADATA_KEY, is_metric_engine_option_key,
};
use store_api::mito_engine_options::{
APPEND_MODE_KEY, COMPACTION_TYPE, MEMTABLE_TYPE, MERGE_MODE_KEY, TWCS_FALLBACK_TO_LOCAL,
TWCS_MAX_OUTPUT_FILE_SIZE, TWCS_TIME_WINDOW, TWCS_TRIGGER_FILE_NUM, is_mito_engine_option_key,
APPEND_MODE_KEY, COMPACTION_TYPE, MEMTABLE_TYPE, MERGE_MODE_KEY, SST_FORMAT_KEY,
TWCS_FALLBACK_TO_LOCAL, TWCS_MAX_OUTPUT_FILE_SIZE, TWCS_TIME_WINDOW, TWCS_TRIGGER_FILE_NUM,
is_mito_engine_option_key,
};
use store_api::region_request::{SetRegionOption, UnsetRegionOption};
@@ -56,13 +57,14 @@ pub const TABLE_DATA_MODEL_TRACE_V1: &str = "greptime_trace_v1";
pub const OTLP_METRIC_COMPAT_KEY: &str = "otlp_metric_compat";
pub const OTLP_METRIC_COMPAT_PROM: &str = "prom";
pub const VALID_TABLE_OPTION_KEYS: [&str; 12] = [
pub const VALID_TABLE_OPTION_KEYS: [&str; 13] = [
// common keys:
WRITE_BUFFER_SIZE_KEY,
TTL_KEY,
STORAGE_KEY,
COMMENT_KEY,
SKIP_WAL_KEY,
SST_FORMAT_KEY,
// file engine keys:
FILE_TABLE_LOCATION_KEY,
FILE_TABLE_FORMAT_KEY,
@@ -94,6 +96,7 @@ static VALID_DB_OPT_KEYS: Lazy<HashSet<&str>> = Lazy::new(|| {
set.insert(TWCS_TIME_WINDOW);
set.insert(TWCS_TRIGGER_FILE_NUM);
set.insert(TWCS_MAX_OUTPUT_FILE_SIZE);
set.insert(SST_FORMAT_KEY);
set
});

View File

@@ -148,6 +148,7 @@ macro_rules! http_tests {
test_jaeger_query_api_for_trace_v1,
test_influxdb_write,
test_influxdb_write_with_hints,
test_http_memory_limit,
);
)*
@@ -3638,6 +3639,43 @@ transform:
guard.remove_all().await;
}
pub async fn test_influxdb_write_with_hints(storage_type: StorageType) {
common_telemetry::init_default_ut_logging();
let (app, mut guard) =
setup_test_http_app_with_frontend(storage_type, "test_influxdb_write_with_hints").await;
let client = TestClient::new(app).await;
let result = client
.post("/v1/influxdb/write?db=public")
.header("x-greptime-hints", "sst_format=flat,ttl=30d,skip_wal=true")
.body("sst_fmt_table,host=host1 cpu=1.2 1664370459457010101")
.send()
.await;
assert_eq!(result.status(), 204);
let res = client
.get("/v1/sql?sql=show create table sst_fmt_table")
.send()
.await;
assert_eq!(res.status(), StatusCode::OK);
let resp = res.text().await;
assert!(
resp.contains("sst_format = 'flat'"),
"expected sst_format = 'flat' in SHOW CREATE TABLE output, got: {resp}"
);
assert!(
resp.contains("ttl = '30days'"),
"expected ttl = '30days' in SHOW CREATE TABLE output, got: {resp}"
);
assert!(
resp.contains("skip_wal = 'true'"),
"expected skip_wal = 'true' in SHOW CREATE TABLE output, got: {resp}"
);
guard.remove_all().await;
}
/// Test one-to-many VRL pipeline expansion.
/// This test verifies that a VRL processor can return an array, which results in
/// multiple output rows from a single input row.

View File

@@ -314,6 +314,85 @@ SHOW CREATE DATABASE alter_database;
| | ) |
+----------------+----------------------------------------------+
-- Test sst_format option
ALTER DATABASE alter_database SET 'sst_format'='flat';
Affected Rows: 0
SHOW CREATE DATABASE alter_database;
+----------------+----------------------------------------------+
| Database | Create Database |
+----------------+----------------------------------------------+
| alter_database | CREATE DATABASE IF NOT EXISTS alter_database |
| | WITH( |
| | 'compaction.twcs.time_window' = '30m', |
| | 'compaction.type' = 'twcs', |
| | sst_format = 'flat' |
| | ) |
+----------------+----------------------------------------------+
USE alter_database;
Affected Rows: 0
CREATE TABLE monitor(ts TIMESTAMP TIME INDEX);
Affected Rows: 0
SHOW CREATE TABLE monitor;
+---------+----------------------------------------+
| Table | Create Table |
+---------+----------------------------------------+
| monitor | CREATE TABLE IF NOT EXISTS "monitor" ( |
| | "ts" TIMESTAMP(3) NOT NULL, |
| | TIME INDEX ("ts") |
| | ) |
| | |
| | ENGINE=mito |
| | WITH( |
| | sst_format = 'flat' |
| | ) |
+---------+----------------------------------------+
USE public;
Affected Rows: 0
ALTER DATABASE alter_database SET 'sst_format'='primary_key';
Affected Rows: 0
SHOW CREATE DATABASE alter_database;
+----------------+----------------------------------------------+
| Database | Create Database |
+----------------+----------------------------------------------+
| alter_database | CREATE DATABASE IF NOT EXISTS alter_database |
| | WITH( |
| | 'compaction.twcs.time_window' = '30m', |
| | 'compaction.type' = 'twcs', |
| | sst_format = 'primary_key' |
| | ) |
+----------------+----------------------------------------------+
ALTER DATABASE alter_database UNSET 'sst_format';
Affected Rows: 0
SHOW CREATE DATABASE alter_database;
+----------------+----------------------------------------------+
| Database | Create Database |
+----------------+----------------------------------------------+
| alter_database | CREATE DATABASE IF NOT EXISTS alter_database |
| | WITH( |
| | 'compaction.twcs.time_window' = '30m', |
| | 'compaction.type' = 'twcs' |
| | ) |
+----------------+----------------------------------------------+
DROP DATABASE alter_database;
Affected Rows: 0

View File

@@ -90,5 +90,25 @@ ALTER DATABASE alter_database UNSET 'ttl';
SHOW CREATE DATABASE alter_database;
DROP DATABASE alter_database;
-- Test sst_format option
ALTER DATABASE alter_database SET 'sst_format'='flat';
SHOW CREATE DATABASE alter_database;
USE alter_database;
CREATE TABLE monitor(ts TIMESTAMP TIME INDEX);
SHOW CREATE TABLE monitor;
USE public;
ALTER DATABASE alter_database SET 'sst_format'='primary_key';
SHOW CREATE DATABASE alter_database;
ALTER DATABASE alter_database UNSET 'sst_format';
SHOW CREATE DATABASE alter_database;
DROP DATABASE alter_database;