Skip to content

Commit 39fd730

Browse files
authored
chore(query): add system history enterprise feature (#17961)
feat(query): add system history enterprise feature
1 parent d99799e commit 39fd730

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

src/common/base/src/runtime/runtime_tracker.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,10 @@ impl ThreadTracker {
267267
}
268268

269269
pub fn should_log() -> bool {
270-
TRACKER.with(|tracker| tracker.borrow().payload.should_log)
270+
// To prevent crashes, logging will be skipped if thread local storage is inaccessible.
271+
TRACKER
272+
.try_with(|tracker| tracker.borrow().payload.should_log)
273+
.unwrap_or(false)
271274
}
272275
}
273276

src/common/license/src/license.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ pub enum Feature {
7979
NgramIndex,
8080
#[serde(alias = "workload_group", alias = "WORKLOAD_GROUP")]
8181
WorkloadGroup,
82+
#[serde(alias = "system_history", alias = "SYSTEM_HISTORY")]
83+
SystemHistory,
8284
#[serde(other)]
8385
Unknown,
8486
}
@@ -128,6 +130,7 @@ impl fmt::Display for Feature {
128130
Feature::HilbertClustering => write!(f, "hilbert_clustering"),
129131
Feature::NgramIndex => write!(f, "ngram_index"),
130132
Feature::WorkloadGroup => write!(f, "workload_group"),
133+
Feature::SystemHistory => write!(f, "system_history"),
131134
Feature::Unknown => write!(f, "unknown"),
132135
}
133136
}
@@ -350,6 +353,16 @@ mod tests {
350353
serde_json::from_str::<Feature>("\"NgramIndex\"").unwrap()
351354
);
352355

356+
assert_eq!(
357+
Feature::WorkloadGroup,
358+
serde_json::from_str::<Feature>("\"workload_group\"").unwrap()
359+
);
360+
361+
assert_eq!(
362+
Feature::SystemHistory,
363+
serde_json::from_str::<Feature>("\"system_history\"").unwrap()
364+
);
365+
353366
assert_eq!(
354367
Feature::Unknown,
355368
serde_json::from_str::<Feature>("\"ssss\"").unwrap()
@@ -384,11 +397,13 @@ mod tests {
384397
Feature::AmendTable,
385398
Feature::HilbertClustering,
386399
Feature::NgramIndex,
400+
Feature::WorkloadGroup,
401+
Feature::SystemHistory,
387402
]),
388403
};
389404

390405
assert_eq!(
391-
"LicenseInfo{ type: enterprise, org: databend, tenants: [databend_tenant,foo], features: [aggregate_index,amend_table,attach_table,compute_quota(threads_num: 1, memory_usage: 1),computed_column,data_mask,hilbert_clustering,inverted_index,license_info,ngram_index,storage_encryption,storage_quota(storage_usage: 1),stream,vacuum,virtual_column] }",
406+
"LicenseInfo{ type: enterprise, org: databend, tenants: [databend_tenant,foo], features: [aggregate_index,amend_table,attach_table,compute_quota(threads_num: 1, memory_usage: 1),computed_column,data_mask,hilbert_clustering,inverted_index,license_info,ngram_index,storage_encryption,storage_quota(storage_usage: 1),stream,system_history,vacuum,virtual_column,workload_group] }",
392407
license_info.to_string()
393408
);
394409
}

src/query/service/src/sessions/query_ctx.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ use databend_common_base::runtime::profile::Profile;
4040
use databend_common_base::runtime::profile::ProfileStatisticsName;
4141
use databend_common_base::runtime::GlobalIORuntime;
4242
use databend_common_base::runtime::MemStat;
43+
use databend_common_base::runtime::ThreadTracker;
4344
use databend_common_base::runtime::TrySpawn;
4445
use databend_common_base::JoinHandle;
4546
use databend_common_catalog::catalog::CATALOG_DEFAULT;
@@ -73,6 +74,8 @@ use databend_common_expression::TableDataType;
7374
use databend_common_expression::TableField;
7475
use databend_common_expression::TableSchema;
7576
use databend_common_io::prelude::FormatSettings;
77+
use databend_common_license::license::Feature;
78+
use databend_common_license::license_manager::LicenseManagerSwitch;
7679
use databend_common_meta_app::principal::FileFormatParams;
7780
use databend_common_meta_app::principal::GrantObject;
7881
use databend_common_meta_app::principal::OnErrorMode;
@@ -1160,6 +1163,18 @@ impl TableContext for QueryContext {
11601163
database: &str,
11611164
table: &str,
11621165
) -> Result<Arc<dyn Table>> {
1166+
// Queries to non-internal system_history databases require license checks to be enabled.
1167+
if database.eq_ignore_ascii_case("system_history") && ThreadTracker::should_log() {
1168+
LicenseManagerSwitch::instance().check_enterprise_enabled(
1169+
unsafe {
1170+
self.get_settings()
1171+
.get_enterprise_license()
1172+
.unwrap_or_default()
1173+
},
1174+
Feature::SystemHistory,
1175+
)?;
1176+
}
1177+
11631178
let batch_size = self.get_settings().get_stream_consume_batch_size_hint()?;
11641179
self.get_table_from_shared(catalog, database, table, batch_size)
11651180
.await

0 commit comments

Comments
 (0)