mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-05-24 00:40:40 +00:00
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:
@@ -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
|
||||
});
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user